OrocosComponentLibrary  2.9.0
TableMarshaller.hpp
1 /***************************************************************************
2  tag: Peter Soetens Mon Jan 19 14:11:20 CET 2004 TableMarshaller.hpp
3 
4  TableMarshaller.hpp - description
5  -------------------
6  begin : Mon January 19 2004
7  copyright : (C) 2004 Peter Soetens
8  email : peter.soetens@mech.kuleuven.ac.be
9 
10  ***************************************************************************
11  * This library is free software; you can redistribute it and/or *
12  * modify it under the terms of the GNU General Public *
13  * License as published by the Free Software Foundation; *
14  * version 2 of the License. *
15  * *
16  * As a special exception, you may use this file as part of a free *
17  * software library without restriction. Specifically, if other files *
18  * instantiate templates or use macros or inline functions from this *
19  * file, or you compile this file and link it with other files to *
20  * produce an executable, this file does not by itself cause the *
21  * resulting executable to be covered by the GNU General Public *
22  * License. This exception does not however invalidate any other *
23  * reasons why the executable file might be covered by the GNU General *
24  * Public License. *
25  * *
26  * This library is distributed in the hope that it will be useful, *
27  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
28  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
29  * Lesser General Public License for more details. *
30  * *
31  * You should have received a copy of the GNU General Public *
32  * License along with this library; if not, write to the Free Software *
33  * Foundation, Inc., 59 Temple Place, *
34  * Suite 330, Boston, MA 02111-1307 USA *
35  * *
36  ***************************************************************************/
37 
38 #ifndef PI_PROPERTIES_TABLESERIALIZER
39 #define PI_PROPERTIES_TABLESERIALIZER
40 
41 #include <rtt/Property.hpp>
42 #include <rtt/base/PropertyIntrospection.hpp>
43 #include <rtt/marsh/StreamProcessor.hpp>
44 #include <rtt/marsh/MarshallInterface.hpp>
45 
46 namespace RTT
47 {
48 
55  template<typename o_stream>
57  : public marsh::MarshallInterface, public marsh::StreamProcessor<o_stream>
58  {
59  std::string msep;
60  public:
61  typedef o_stream output_stream;
62  typedef o_stream OutputStream;
63 
70  TableMarshaller(output_stream &os, std::string sep=" ") :
71  marsh::StreamProcessor<o_stream>(os), msep(sep)
72  {}
73 
74  virtual ~TableMarshaller() {}
75 
76  virtual void serialize(base::PropertyBase* v)
77  {
78  *this->s << msep;
79  Property<PropertyBag>* bag = dynamic_cast< Property<PropertyBag>* >( v );
80  if ( bag )
81  this->serialize( bag->value() );
82  else {
83  *this->s << v->getDataSource();
84  }
85  }
86 
87  virtual void serialize(const PropertyBag &v)
88  {
89  for (
90  PropertyBag::const_iterator i = v.getProperties().begin();
91  i != v.getProperties().end();
92  i++ )
93  {
94  this->serialize( *i );
95  }
96  }
97 
98  virtual void flush()
99  {
100  // TODO : buffer for formatting and flush here.
101  *this->s << msep <<std::endl;
102  }
103  };
104 }
105 #endif
A marsh::MarshallInterface for generating a stream of numbers, ordered in columns.
Definition: Category.hpp:10
TableMarshaller(output_stream &os, std::string sep=" ")
Create a new marshaller, streaming the data to a stream.