From 7088e524d4c532ec9bae373047de3d399e361df0 Mon Sep 17 00:00:00 2001 From: Matteo Cypriani Date: Thu, 4 Mar 2010 11:26:13 +0100 Subject: [PATCH] [Positioning] Add OutputMedium & OutputTerminal OutputMedium is the super-class of all output media. OutputTerminal prints a Result on the terminal (or on any stream). --- owlps-positioning/Makefile | 6 +++- owlps-positioning/src/outputmedium.hh | 24 ++++++++++++++++ owlps-positioning/src/outputterminal.cc | 8 ++++++ owlps-positioning/src/outputterminal.hh | 21 ++++++++++++++ .../tests/outputterminal_test.hh | 28 +++++++++++++++++++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 owlps-positioning/src/outputmedium.hh create mode 100644 owlps-positioning/src/outputterminal.cc create mode 100644 owlps-positioning/src/outputterminal.hh create mode 100644 owlps-positioning/tests/outputterminal_test.hh diff --git a/owlps-positioning/Makefile b/owlps-positioning/Makefile index 6a09910..b42beb3 100644 --- a/owlps-positioning/Makefile +++ b/owlps-positioning/Makefile @@ -55,13 +55,17 @@ OBJ_LIST = \ realposition.o \ configuration.o \ userinterface.o \ + outputterminal.o \ input.o \ inputcsv.o \ inputlogcsv.o OBJ_NOTEST_LIST = \ posexcept.o \ inputmedium.o -INTERFACES_LIST = inputlogmedium.hh positioningalgorithm.hh +INTERFACES_LIST = \ + inputlogmedium.hh \ + outputmedium.hh \ + positioningalgorithm.hh OBJ = $(OBJ_LIST:%=$(OBJ_DIR)/%) OBJ_NOTEST = $(OBJ_NOTEST_LIST:%=$(OBJ_DIR)/%) diff --git a/owlps-positioning/src/outputmedium.hh b/owlps-positioning/src/outputmedium.hh new file mode 100644 index 0000000..88354ce --- /dev/null +++ b/owlps-positioning/src/outputmedium.hh @@ -0,0 +1,24 @@ +#ifndef _OWLPS_POSITIONING_OUTPUTMEDIUM_HH_ +#define _OWLPS_POSITIONING_OUTPUTMEDIUM_HH_ + +#include "result.hh" + +/// Super class of all output media +/** + * Provide interface for output media, i.e. to write Results computed + * by a PositioningAlgorithm. + */ +class OutputMedium +{ +public: + OutputMedium(void) {} + + virtual ~OutputMedium(void) {} + + /** @name Operations */ + //@{ + virtual void write(const Result &result) = 0 ; + //@} // End Operations +} ; + +#endif // _OWLPS_POSITIONING_OUTPUTMEDIUM_HH_ diff --git a/owlps-positioning/src/outputterminal.cc b/owlps-positioning/src/outputterminal.cc new file mode 100644 index 0000000..758508e --- /dev/null +++ b/owlps-positioning/src/outputterminal.cc @@ -0,0 +1,8 @@ +#include "outputterminal.hh" + + + +void OutputTerminal::write(const Result &result) +{ + output_stream << result << '\n' ; +} diff --git a/owlps-positioning/src/outputterminal.hh b/owlps-positioning/src/outputterminal.hh new file mode 100644 index 0000000..d5d58e4 --- /dev/null +++ b/owlps-positioning/src/outputterminal.hh @@ -0,0 +1,21 @@ +#ifndef _OWLPS_POSITIONING_OUTPUTTERMINAL_HH_ +#define _OWLPS_POSITIONING_OUTPUTTERMINAL_HH_ + +#include "outputmedium.hh" + +#include + +/// Writes a result to a stream (defaults to the standard output) +class OutputTerminal: public OutputMedium +{ +protected: + std::ostream &output_stream ; + +public: + OutputTerminal(std::ostream &_output_stream = std::cout): + output_stream(_output_stream) {} + + void write(const Result &result) ; +} ; + +#endif // _OWLPS_POSITIONING_OUTPUTTERMINAL_HH_ diff --git a/owlps-positioning/tests/outputterminal_test.hh b/owlps-positioning/tests/outputterminal_test.hh new file mode 100644 index 0000000..def2fd6 --- /dev/null +++ b/owlps-positioning/tests/outputterminal_test.hh @@ -0,0 +1,28 @@ +#include + +#include "outputterminal.hh" +#include "result.hh" + +#include + +class OutputTerminal_test: public CxxTest::TestSuite +{ +public: + + void test_output(void) + { + std::ostringstream output_stream ; + OutputTerminal output(output_stream) ; + Result result ; + + TS_ASSERT(output_stream.str().empty()) ; + output.write(result) ; + + TS_ASSERT(! output_stream.str().empty()) ; + + std::ostringstream result_stream ; + result_stream << result << '\n' ; + TS_ASSERT_EQUALS(output_stream.str(), result_stream.str()) ; + } + +} ;