| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. | |
| 3 * | |
| 4 * Use of this source code is governed by a BSD-style license | |
| 5 * that can be found in the LICENSE file in the root of the source | |
| 6 * tree. An additional intellectual property rights grant can be found | |
| 7 * in the file PATENTS. All contributing project authors may | |
| 8 * be found in the AUTHORS file in the root of the source tree. | |
| 9 */ | |
| 10 | |
| 11 // This singleton can be used for logging data for offline processing. Data | |
| 12 // logged with it can conveniently be parsed and processed with e.g. Matlab. | |
| 13 // | |
| 14 // Following is an example of the log file format, starting with the header | |
| 15 // row at line 1, and the data rows following. | |
| 16 // col1,col2,col3,multi-value-col4[3],,,col5 | |
| 17 // 123,10.2,-243,1,2,3,100 | |
| 18 // 241,12.3,233,1,2,3,200 | |
| 19 // 13,16.4,-13,1,2,3,300 | |
| 20 // | |
| 21 // As can be seen in the example, a multi-value-column is specified with the | |
| 22 // name followed the number of elements it contains. This followed by | |
| 23 // number of elements - 1 empty columns. | |
| 24 // | |
| 25 // Without multi-value-columns this format can be natively by Matlab. With | |
| 26 // multi-value-columns a small Matlab script is needed, available at | |
| 27 // trunk/tools/matlab/parseLog.m. | |
| 28 // | |
| 29 // Table names and column names are case sensitive. | |
| 30 | |
| 31 #ifndef WEBRTC_SYSTEM_WRAPPERS_INCLUDE_DATA_LOG_H_ | |
| 32 #define WEBRTC_SYSTEM_WRAPPERS_INCLUDE_DATA_LOG_H_ | |
| 33 | |
| 34 #include <string> | |
| 35 | |
| 36 #include "webrtc/system_wrappers/include/data_log_impl.h" | |
| 37 | |
| 38 namespace webrtc { | |
| 39 | |
| 40 class DataLog { | |
| 41 public: | |
| 42 // Creates a log which uses a separate thread (referred to as the file | |
| 43 // writer thread) for writing log rows to file. | |
| 44 // | |
| 45 // Calls to this function after the log object has been created will only | |
| 46 // increment the reference counter. | |
| 47 static int CreateLog(); | |
| 48 | |
| 49 // Decrements the reference counter and deletes the log when the counter | |
| 50 // reaches 0. Should be called equal number of times as successful calls to | |
| 51 // CreateLog or memory leak will occur. | |
| 52 static void ReturnLog(); | |
| 53 | |
| 54 // Combines the string table_name and the integer table_id into a new string | |
| 55 // table_name + _ + table_id. The new string will be lower-case. | |
| 56 static std::string Combine(const std::string& table_name, int table_id); | |
| 57 | |
| 58 // Adds a new table, with the name table_name, and creates the file, with the | |
| 59 // name table_name + ".txt", to which the table will be written. | |
| 60 // table_name is treated in a case sensitive way. | |
| 61 static int AddTable(const std::string& table_name); | |
| 62 | |
| 63 // Adds a new column to a table. The column will be a multi-value-column | |
| 64 // if multi_value_length is greater than 1. | |
| 65 // table_name and column_name are treated in a case sensitive way. | |
| 66 static int AddColumn(const std::string& table_name, | |
| 67 const std::string& column_name, | |
| 68 int multi_value_length); | |
| 69 | |
| 70 // Inserts a single value into a table with name table_name at the column with | |
| 71 // name column_name. | |
| 72 // Note that the ValueContainer makes use of the copy constructor, | |
| 73 // operator= and operator<< of the type T, and that the template type must | |
| 74 // implement a deep copy copy constructor and operator=. | |
| 75 // Copy constructor and operator= must not be disabled for the type T. | |
| 76 // table_name and column_name are treated in a case sensitive way. | |
| 77 template<class T> | |
| 78 static int InsertCell(const std::string& table_name, | |
| 79 const std::string& column_name, | |
| 80 T value) { | |
| 81 DataLogImpl* data_log = DataLogImpl::StaticInstance(); | |
| 82 if (data_log == NULL) | |
| 83 return -1; | |
| 84 return data_log->InsertCell( | |
| 85 table_name, | |
| 86 column_name, | |
| 87 new ValueContainer<T>(value)); | |
| 88 } | |
| 89 | |
| 90 // Inserts an array of values into a table with name table_name at the | |
| 91 // column specified by column_name, which must be a multi-value-column. | |
| 92 // Note that the MultiValueContainer makes use of the copy constructor, | |
| 93 // operator= and operator<< of the type T, and that the template type | |
| 94 // must implement a deep copy copy constructor and operator=. | |
| 95 // Copy constructor and operator= must not be disabled for the type T. | |
| 96 // table_name and column_name are treated in a case sensitive way. | |
| 97 template<class T> | |
| 98 static int InsertCell(const std::string& table_name, | |
| 99 const std::string& column_name, | |
| 100 const T* array, | |
| 101 int length) { | |
| 102 DataLogImpl* data_log = DataLogImpl::StaticInstance(); | |
| 103 if (data_log == NULL) | |
| 104 return -1; | |
| 105 return data_log->InsertCell( | |
| 106 table_name, | |
| 107 column_name, | |
| 108 new MultiValueContainer<T>(array, length)); | |
| 109 } | |
| 110 | |
| 111 // For the table with name table_name: Writes the current row to file. | |
| 112 // Starts a new empty row. | |
| 113 // table_name is treated in a case-sensitive way. | |
| 114 static int NextRow(const std::string& table_name); | |
| 115 }; | |
| 116 | |
| 117 } // namespace webrtc | |
| 118 | |
| 119 #endif // WEBRTC_SYSTEM_WRAPPERS_INCLUDE_DATA_LOG_H_ | |
| OLD | NEW |