[Positioning] InputCSV: prepare handling CalibrationRequest

InputMedium:
- Split into two files (inputmedium.{hh,cc}).
- Add polymorphic handling of CalibrationRequest.
- Write unit tests.

InputCSV:
- Use new code of InputMedium to handle calibration requests.
- We detect if the read request is a calibration request, but
  specific attributes are not initialised.
This commit is contained in:
Matteo Cypriani 2010-02-17 17:33:26 +01:00
parent 1ceab071a2
commit 6ad31f9af4
4 changed files with 67 additions and 38 deletions

View File

@ -33,8 +33,8 @@ OBJ = posutil.o stock.o timestamp.o point3d.o referencepoint.o \
mobile.o measurement.o request.o calibrationrequest.o \ mobile.o measurement.o request.o calibrationrequest.o \
configuration.o userinterface.o input.o \ configuration.o userinterface.o input.o \
inputcsv.o inputlogcsv.o inputcsv.o inputlogcsv.o
OBJ_NOTEST = posexcept.o OBJ_NOTEST = posexcept.o inputmedium.o
INTERFACES = inputmedium.hh inputlogmedium.hh INTERFACES = inputlogmedium.hh
TESTS_XX = $(TESTS_DIR)/tests.cc TESTS_XX = $(TESTS_DIR)/tests.cc
TESTS_OBJ = $(TESTS_DIR)/tests.o TESTS_OBJ = $(TESTS_DIR)/tests.o
@ -68,7 +68,7 @@ mobile.o: wifidevice.o
measurement.o: accesspoint.o measurement.o: accesspoint.o
request.o: timestamp.o measurement.o request.o: timestamp.o measurement.o
calibrationrequest.o: request.o referencepoint.o calibrationrequest.o: request.o referencepoint.o
inputcsv.o: inputmedium.hh request.o stock.o inputcsv.o: inputmedium.o request.o stock.o
inputlogcsv.o: inputlogmedium.hh request.o inputlogcsv.o: inputlogmedium.hh request.o
input.o: posexcept.o input.o: posexcept.o
@ -81,7 +81,7 @@ $(TESTS_XX): $(SOURCE_TESTS)
--include=$(TESTUTIL_OBJ:.o=.hh) \ --include=$(TESTUTIL_OBJ:.o=.hh) \
-o $@ $^ -o $@ $^
$(TESTS_OBJ): $(TESTS_XX) $(OBJ) $(INCLUDES_TESTS) $(TESTS_OBJ): $(TESTS_XX) $(OBJ) $(OBJ_NOTEST) $(INCLUDES_TESTS)
$(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $< $(GXX) $(GXXFLAGS) $(TESTSGXXFLAGS) -o $@ -c $<
$(TESTS_TARGET): $(TESTS_OBJ) $(OBJ_TESTS) $(TESTS_TARGET): $(TESTS_OBJ) $(OBJ_TESTS)
@ -125,4 +125,4 @@ check:
@$(CPPCHECK) \ @$(CPPCHECK) \
$(OBJ:.o=.hh) $(OBJ:.o=.cc) \ $(OBJ:.o=.hh) $(OBJ:.o=.cc) \
$(OBJ_NOTEST:.o=.hh) $(OBJ_NOTEST:.o=.cc) \ $(OBJ_NOTEST:.o=.hh) $(OBJ_NOTEST:.o=.cc) \
$(INTERFACES) $(INTERFACES) $(TARGET).cc

View File

@ -116,12 +116,10 @@ void InputCSV::read_next_line()
*/ */
const Request& InputCSV::get_next_request() const Request& InputCSV::get_next_request()
{ {
if (eof_close()) clear_current_request() ;
{
// End of file or error: blank current request if (eof_close()) // End of file or error
current_request->clear() ; return *current_request ;
return *current_request ;
}
// Split read string into fields (semicolon-separated) // Split read string into fields (semicolon-separated)
tokenizer<escaped_list_separator<char> > tok( tokenizer<escaped_list_separator<char> > tok(
@ -130,12 +128,8 @@ const Request& InputCSV::get_next_request()
tokenizer<escaped_list_separator<char> >::const_iterator ti(tok.begin()) ; tokenizer<escaped_list_separator<char> >::const_iterator ti(tok.begin()) ;
// Read Mobile MAC field // Read Mobile MAC field
if (ti == tok.end()) if (ti == tok.end()) // Wrong number of fields
{ return *current_request ;
// Wrong number of fields: blank current request
current_request->clear() ;
return *current_request ;
}
// If the mobile did not exist, we create it // If the mobile did not exist, we create it
try try
@ -167,7 +161,7 @@ const Request& InputCSV::get_next_request()
<< *ti << " » at line " << *ti << " » at line "
<< current_line_nb << ", field « Timestamp », of input file « " << current_line_nb << ", field « Timestamp », of input file « "
<< input_file_name << " »!" << endl ; << input_file_name << " »!" << endl ;
current_request->clear() ; // Blank current request current_request->clear() ;
return *current_request ; return *current_request ;
} }
@ -196,7 +190,7 @@ const Request& InputCSV::get_next_request()
<< current_line_nb << ", position field #" << i << current_line_nb << ", position field #" << i
<< ", of input file « " << input_file_name << " »!" << ", of input file « " << input_file_name << " »!"
<< endl ; << endl ;
current_request->clear() ; // Blank current request current_request->clear() ;
return *current_request ; return *current_request ;
} }
} }
@ -222,7 +216,7 @@ const Request& InputCSV::get_next_request()
<< *ti << " » at line " << *ti << " » at line "
<< current_line_nb << ", field « Direction », of input file « " << current_line_nb << ", field « Direction », of input file « "
<< input_file_name << " »!" << endl ; << input_file_name << " »!" << endl ;
current_request->clear() ; // Blank current request current_request->clear() ;
return *current_request ; return *current_request ;
} }
@ -277,7 +271,7 @@ const Request& InputCSV::get_next_request()
read_next_line() ; read_next_line() ;
if (is_calibration_request) if (is_calibration_request)
{} // TODO current_request_to_calibration_request() ;
return *current_request ; return *current_request ;
} }

View File

@ -0,0 +1,47 @@
#include "inputmedium.hh"
#include "calibrationrequest.hh"
/* *** Constructors *** */
InputMedium::InputMedium()
{
current_request = new Request() ;
current_line_nb = 0 ;
}
InputMedium::~InputMedium()
{
delete current_request ;
}
/* *** Operations *** */
void InputMedium::current_request_to_calibration_request()
{
if (dynamic_cast<CalibrationRequest*>(current_request) != NULL)
return ;
Request *tmp = current_request ;
current_request = NULL ;
current_request = new CalibrationRequest(*tmp) ;
delete tmp ;
}
void InputMedium::clear_current_request()
{
if (dynamic_cast<CalibrationRequest*>(current_request) == NULL)
current_request->clear() ;
else
{
delete current_request ;
current_request = NULL ;
current_request = new Request() ;
}
}

View File

@ -52,28 +52,16 @@ public:
*/ */
virtual const Request& get_next_request(void) = 0 ; virtual const Request& get_next_request(void) = 0 ;
/// Converts #current_request into a CalibrationRequest
void current_request_to_calibration_request(void) ;
/// Clears (reallocates to Request if needed) #current_request
void clear_current_request(void) ;
//@} // End Operations //@} // End Operations
} ; } ;
/* *** Constructors *** */
inline InputMedium::InputMedium()
{
current_request = new Request() ;
current_line_nb = 0 ;
}
inline InputMedium::~InputMedium()
{
delete current_request ;
}
/* *** Read accessors *** */ /* *** Read accessors *** */