[Positioning] Add class OutputFileMedium
OutputFileMedium is designed to be a super-class for classes that need to write to a text file. It could also be a simple writer if the method write_string_to_file() was public (maybe we should change that and rename OutputFileMedium to OutputFileWriter or something like that). InputLogCSV: - Now extends InputLogMedium *and* OutputFileMedium. - Make log_request() inline.
This commit is contained in:
parent
5f0bb90d45
commit
84789f2ed2
|
@ -63,6 +63,7 @@ OBJ_LIST = \
|
||||||
inputlogcsv.o
|
inputlogcsv.o
|
||||||
OBJ_NOTEST_LIST = \
|
OBJ_NOTEST_LIST = \
|
||||||
posexcept.o \
|
posexcept.o \
|
||||||
|
outputfilemedium.o \
|
||||||
inputmedium.o
|
inputmedium.o
|
||||||
INTERFACES_LIST = \
|
INTERFACES_LIST = \
|
||||||
inputlogmedium.hh \
|
inputlogmedium.hh \
|
||||||
|
@ -127,6 +128,8 @@ calibrationrequest.o: \
|
||||||
$(OBJ_DIR)/request.o \
|
$(OBJ_DIR)/request.o \
|
||||||
$(OBJ_DIR)/referencepoint.o \
|
$(OBJ_DIR)/referencepoint.o \
|
||||||
$(OBJ_DIR)/direction.o
|
$(OBJ_DIR)/direction.o
|
||||||
|
outputfilemedium.o: \
|
||||||
|
$(OBJ_DIR)/posexcept.o
|
||||||
inputcsv.o: \
|
inputcsv.o: \
|
||||||
$(OBJ_DIR)/inputmedium.o \
|
$(OBJ_DIR)/inputmedium.o \
|
||||||
$(OBJ_DIR)/request.o \
|
$(OBJ_DIR)/request.o \
|
||||||
|
|
|
@ -7,6 +7,10 @@
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
|
||||||
/// Reads \link Request requests \endlink from a CSV file
|
/// Reads \link Request requests \endlink from a CSV file
|
||||||
|
/**
|
||||||
|
* CSV format is:
|
||||||
|
* Mobile_MAC;Timestamp;X;Y;Z;Direction;AP_MAC_1;SS_1;…;AP_MAC_n;SS_n
|
||||||
|
*/
|
||||||
class InputCSV: public InputMedium
|
class InputCSV: public InputMedium
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -11,47 +11,9 @@ using std::tr1::unordered_map ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* *** Constructors *** */
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Prepares the InputLogCSV to write to a CSV file.
|
|
||||||
* @param filename The name of the file to open.
|
|
||||||
* @throw error_opening_input_file if the file cannot be opened.
|
|
||||||
*/
|
|
||||||
InputLogCSV::InputLogCSV(const string &filename):
|
|
||||||
log_file_name(filename)
|
|
||||||
{
|
|
||||||
log_file.open(log_file_name.c_str()) ;
|
|
||||||
if (! log_file)
|
|
||||||
throw error_opening_input_file(log_file_name) ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
InputLogCSV::~InputLogCSV()
|
|
||||||
{
|
|
||||||
log_file.close() ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* *** Operations *** */
|
/* *** Operations *** */
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return true if the request has been logged successfuly, or false
|
|
||||||
* if not.
|
|
||||||
*/
|
|
||||||
bool InputLogCSV::log_request(const Request &request)
|
|
||||||
{
|
|
||||||
if (! log_file)
|
|
||||||
return false ;
|
|
||||||
|
|
||||||
log_file << request_to_csv(request).c_str() ;
|
|
||||||
return true ;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const string InputLogCSV::request_to_csv(const Request &request) const
|
const string InputLogCSV::request_to_csv(const Request &request) const
|
||||||
{
|
{
|
||||||
ostringstream csv_line ;
|
ostringstream csv_line ;
|
||||||
|
|
|
@ -2,22 +2,20 @@
|
||||||
#define _OWLPS_POSITIONING_INPUTLOGCSV_HH_
|
#define _OWLPS_POSITIONING_INPUTLOGCSV_HH_
|
||||||
|
|
||||||
#include "inputlogmedium.hh"
|
#include "inputlogmedium.hh"
|
||||||
|
#include "outputfilemedium.hh"
|
||||||
#include <string>
|
|
||||||
#include <fstream>
|
|
||||||
|
|
||||||
/// Log \link Request requests \endlink to a CSV file
|
/// Log \link Request requests \endlink to a CSV file
|
||||||
class InputLogCSV: public InputLogMedium
|
/**
|
||||||
|
* CSV format is the same as the one read by InputCSV.
|
||||||
|
*/
|
||||||
|
class InputLogCSV: public InputLogMedium, public OutputFileMedium
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
std::string log_file_name ;
|
|
||||||
std::ofstream log_file ;
|
|
||||||
|
|
||||||
const std::string request_to_csv(const Request &request) const ;
|
const std::string request_to_csv(const Request &request) const ;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
InputLogCSV(const std::string &filename) ;
|
InputLogCSV(const std::string &filename):
|
||||||
~InputLogCSV(void) ;
|
OutputFileMedium(filename) {}
|
||||||
|
|
||||||
/** @name Operations */
|
/** @name Operations */
|
||||||
//@{
|
//@{
|
||||||
|
@ -25,4 +23,16 @@ public:
|
||||||
//@}
|
//@}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* *** Operations *** */
|
||||||
|
|
||||||
|
|
||||||
|
inline bool InputLogCSV::log_request(const Request &request)
|
||||||
|
{
|
||||||
|
return write_string_to_file(request_to_csv(request)) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif // _OWLPS_POSITIONING_INPUTLOGCSV_HH_
|
#endif // _OWLPS_POSITIONING_INPUTLOGCSV_HH_
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include "outputfilemedium.hh"
|
||||||
|
#include "posexcept.hh"
|
||||||
|
|
||||||
|
using namespace std ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* *** Constructors *** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prepares the OutputFileMedium to write to a CSV file.
|
||||||
|
* @param filename The name of the file to open.
|
||||||
|
* @throw error_opening_input_file if the file cannot be opened.
|
||||||
|
*/
|
||||||
|
OutputFileMedium::OutputFileMedium(const string &_file_name):
|
||||||
|
file_name(_file_name)
|
||||||
|
{
|
||||||
|
file.open(file_name.c_str()) ;
|
||||||
|
if (! file)
|
||||||
|
throw error_opening_input_file(file_name) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
OutputFileMedium::~OutputFileMedium()
|
||||||
|
{
|
||||||
|
file.close() ;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* *** Operations *** */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return true if the string has been written successfuly, or false
|
||||||
|
* if not.
|
||||||
|
*/
|
||||||
|
bool OutputFileMedium::write_string_to_file(const string &text)
|
||||||
|
{
|
||||||
|
if (! file)
|
||||||
|
return false ;
|
||||||
|
|
||||||
|
file << text.c_str() ;
|
||||||
|
return true ;
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
#ifndef _OWLPS_POSITIONING_OUTPUTFILEMEDIUM_HH_
|
||||||
|
#define _OWLPS_POSITIONING_OUTPUTFILEMEDIUM_HH_
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
|
/// Super-class of all classes that write things to a file
|
||||||
|
class OutputFileMedium
|
||||||
|
{
|
||||||
|
private:
|
||||||
|
std::string file_name ;
|
||||||
|
std::ofstream file ;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool write_string_to_file(const std::string &text) ;
|
||||||
|
|
||||||
|
public:
|
||||||
|
OutputFileMedium(const std::string &_file_name) ;
|
||||||
|
virtual ~OutputFileMedium(void) ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
#endif // _OWLPS_POSITIONING_OUTPUTFILEMEDIUM_HH_
|
Loading…
Reference in New Issue