You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
	
	
		
			120 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
		
		
			
		
	
	
			120 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			C
		
	
| 
											10 years ago
										 | /*
 | ||
|  |  *  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 "webrtc/system_wrappers/interface/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_
 |