aboutsummaryrefslogtreecommitdiff
path: root/src/system_wrappers/interface/data_log.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/system_wrappers/interface/data_log.h')
-rw-r--r--src/system_wrappers/interface/data_log.h121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/system_wrappers/interface/data_log.h b/src/system_wrappers/interface/data_log.h
new file mode 100644
index 0000000000..6fc1d64495
--- /dev/null
+++ b/src/system_wrappers/interface/data_log.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ * Use of this source code is governed by a BSD-style license
+ * that can be found in the LICENSE file in the root of the source
+ * tree. An additional intellectual property rights grant can be found
+ * in the file PATENTS. All contributing project authors may
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
+/*
+ * This singleton can be used for logging data for offline processing. Data
+ * logged with it can conveniently be parsed and processed with e.g. Matlab.
+ *
+ * Following is an example of the log file format, starting with the header
+ * row at line 1, and the data rows following.
+ * col1,col2,col3,multi-value-col4[3],,,col5
+ * 123,10.2,-243,1,2,3,100
+ * 241,12.3,233,1,2,3,200
+ * 13,16.4,-13,1,2,3,300
+ *
+ * As can be seen in the example, a multi-value-column is specified with the
+ * name followed the number of elements it contains. This followed by
+ * number of elements - 1 empty columns.
+ *
+ * Without multi-value-columns this format can be natively by Matlab. With
+ * multi-value-columns a small Matlab script is needed, available at
+ * trunk/tools/matlab/parseLog.m.
+ *
+ * Table names and column names are case sensitive.
+ */
+
+#ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_DATA_LOG_H_
+#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_DATA_LOG_H_
+
+#include <string>
+
+#include "data_log_impl.h"
+
+namespace webrtc {
+
+class DataLog {
+ public:
+ // Creates a log which uses a separate thread (referred to as the file
+ // writer thread) for writing log rows to file.
+ //
+ // Calls to this function after the log object has been created will only
+ // increment the reference counter.
+ static int CreateLog();
+
+ // Decrements the reference counter and deletes the log when the counter
+ // reaches 0. Should be called equal number of times as successful calls to
+ // CreateLog or memory leak will occur.
+ static void ReturnLog();
+
+ // Combines the string table_name and the integer table_id into a new string
+ // table_name + _ + table_id. The new string will be lower-case.
+ static std::string Combine(const std::string& table_name, int table_id);
+
+ // Adds a new table, with the name table_name, and creates the file, with the
+ // name table_name + ".txt", to which the table will be written.
+ // table_name is treated in a case sensitive way.
+ static int AddTable(const std::string& table_name);
+
+ // Adds a new column to a table. The column will be a multi-value-column
+ // if multi_value_length is greater than 1.
+ // table_name and column_name are treated in a case sensitive way.
+ static int AddColumn(const std::string& table_name,
+ const std::string& column_name,
+ int multi_value_length);
+
+ // Inserts a single value into a table with name table_name at the column with
+ // name column_name.
+ // Note that the ValueContainer makes use of the copy constructor,
+ // operator= and operator<< of the type T, and that the template type must
+ // implement a deep copy copy constructor and operator=.
+ // Copy constructor and operator= must not be disabled for the type T.
+ // table_name and column_name are treated in a case sensitive way.
+ template<class T>
+ static int InsertCell(const std::string& table_name,
+ const std::string& column_name,
+ T value) {
+ DataLogImpl* data_log = DataLogImpl::StaticInstance();
+ if (data_log == NULL)
+ return -1;
+ return data_log->InsertCell(
+ table_name,
+ column_name,
+ new ValueContainer<T>(value));
+ }
+
+ // Inserts an array of values into a table with name table_name at the
+ // column specified by column_name, which must be a multi-value-column.
+ // Note that the MultiValueContainer makes use of the copy constructor,
+ // operator= and operator<< of the type T, and that the template type
+ // must implement a deep copy copy constructor and operator=.
+ // Copy constructor and operator= must not be disabled for the type T.
+ // table_name and column_name are treated in a case sensitive way.
+ template<class T>
+ static int InsertCell(const std::string& table_name,
+ const std::string& column_name,
+ const T* array,
+ int length) {
+ DataLogImpl* data_log = DataLogImpl::StaticInstance();
+ if (data_log == NULL)
+ return -1;
+ return data_log->InsertCell(
+ table_name,
+ column_name,
+ new MultiValueContainer<T>(array, length));
+ }
+
+ // For the table with name table_name: Writes the current row to file.
+ // Starts a new empty row.
+ // table_name is treated in a case-sensitive way.
+ static int NextRow(const std::string& table_name);
+};
+
+} // namespace webrtc
+
+#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_DATA_LOG_H_