field.h
Go to the documentation of this file.
1 //=================================================================================================
2 // Copyright (c) 2011, Johannes Meyer, TU Darmstadt
3 // All rights reserved.
4 
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above copyright
10 // notice, this list of conditions and the following disclaimer in the
11 // documentation and/or other materials provided with the distribution.
12 // * Neither the name of the Flight Systems and Automatic Control group,
13 // TU Darmstadt, nor the names of its contributors may be used to
14 // endorse or promote products derived from this software without
15 // specific prior written permission.
16 
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
21 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 //=================================================================================================
28 
29 #ifndef CPP_INTROSPECTION_FIELD_H
30 #define CPP_INTROSPECTION_FIELD_H
31 
32 #include <introspection/forwards.h>
33 #include <introspection/type.h>
34 
35 namespace cpp_introspection {
36 
37  class Field
38  {
39  public:
40  virtual ~Field() { }
41 
42  virtual const Message& message() const = 0;
43 
44  virtual const char* getName() const = 0;
45  virtual const char* getDataType() const = 0;
46  virtual const char* getValueType() const = 0;
47  virtual std::size_t getIndex() const = 0;
48  virtual const std::type_info& getTypeId() const = 0;
49  virtual TypePtr getType() const { return type(getValueType()); }
50 
51  virtual bool isArray() const = 0;
52  virtual bool isVector() const = 0;
53  virtual bool isContainer() const = 0;
54  virtual bool isSimple() const = 0;
55  virtual bool isFixedSize() const = 0;
56  virtual bool isMessage() const = 0;
57 
58  virtual bool hasInstance() const { return false; }
59  virtual boost::any get(std::size_t i = 0) const { return boost::any(); }
60  template <typename T> T as(std::size_t i = 0) const { return getType()->as<T>(get(i)); }
61 
62  virtual void setAny(const boost::any& value, std::size_t i = 0) const { }
63  template <typename T> void set(const T& value, std::size_t i = 0) const { setAny(getType()->from(value), i); }
64 
65  virtual std::size_t size() const { return 1; }
66  virtual void resize(size_t new_size) const {}
67  virtual bool empty() const { return false; }
68  virtual std::size_t capacity() const { return 1; }
69 
70  virtual MessagePtr expand(std::size_t i = 0) const;
71  virtual FieldPtr access(AccessorBase& accessor) const = 0;
72  };
73 
74 } // namespace cpp_introspection
75 
76 #endif // CPP_INTROSPECTION_FIELD_H
virtual const std::type_info & getTypeId() const =0
virtual TypePtr getType() const
Definition: field.h:49
virtual bool isSimple() const =0
virtual bool isFixedSize() const =0
virtual bool isContainer() const =0
virtual bool isMessage() const =0
virtual std::size_t capacity() const
Definition: field.h:68
virtual void resize(size_t new_size) const
Definition: field.h:66
virtual MessagePtr expand(std::size_t i=0) const
TypePtr type(const std::string &name)
Definition: types.cpp:82
virtual const char * getValueType() const =0
virtual bool isVector() const =0
virtual bool hasInstance() const
Definition: field.h:58
virtual bool empty() const
Definition: field.h:67
virtual void setAny(const boost::any &value, std::size_t i=0) const
Definition: field.h:62
virtual bool isArray() const =0
virtual const char * getDataType() const =0
virtual FieldPtr access(AccessorBase &accessor) const =0
virtual ~Field()
Definition: field.h:40
virtual const Message & message() const =0
T as(std::size_t i=0) const
Definition: field.h:60
virtual std::size_t size() const
Definition: field.h:65
virtual std::size_t getIndex() const =0
virtual const char * getName() const =0


cpp_introspection
Author(s): Johannes Meyer
autogenerated on Mon Jun 10 2019 12:56:17