ICG 2
Electric Boogaloo
CompositeDataType.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <map>
4 #include <string>
5 
6 #include "Type/DataType.hpp"
7 #include "Type/StructMember.hpp"
8 
9 #include "DataTypeInator.hpp"
10 
11 
16 class CompositeDataType : public DataType {
17 
18 public:
19 
20  typedef std::map<std::string, StructMember> MemberMap;
21  typedef std::vector<StructMember*> SortedMemberList;
22 
27  CompositeDataType( std::string name,
28  size_t sizeof_struct,
29  void *(*allocator)(int),
30  void (*deAllocator)(void*) );
31 
32  /* ================================================================================= */
33  /* Rule of 3 - NO COPYING */
34  /* ================================================================================= */
35 
36  CompositeDataType ( const CompositeDataType & original ) = delete;
38 
39  /* ==================================================================== */
40  /* VIRTUAL INTERFACE */
41  /* ==================================================================== */
42 
43 
46  bool validate(DataTypeInator* dataTypeInator) override;
47 
48  bool isValid() const override;
49 
53  size_t getSize() const override;
54 
57  void* createInstance(unsigned int num) const override;
58 
61  void deleteInstance(void* address) const override;
62 
65  std::string toString() const override;
66 
67  bool accept (DataTypeVisitor* visitor) const override;
68 
71  std::string getTypeSpecName() const override;
72 
73  /* ==================================================================== */
74  /* CLASS SPECIFIC INTERFACE */
75  /* ==================================================================== */
76 
82  virtual const MemberMap& getMemberMap () const = 0;
83 
89  const SortedMemberList& getSortedMemberList () const;
90 
91 
99  bool hasMemberNamed(std::string name);
100 
101 
102 protected:
103  // A non-const member map accessor, should only be used for validation
104  virtual MemberMap& getMemberMap () = 0;
105 
106 private:
107  SortedMemberList sorted_members;
108 
109  bool is_valid;
110 
111  std::string name;
112  size_t structSize;
113 
114  void* (*allocator)(int);
115  void (*deAllocator)(void*);
116 };
Definition: CompositeDataType.hpp:16
~CompositeDataType()
Definition: CompositeDataType.cpp:24
std::vector< StructMember * > SortedMemberList
Definition: CompositeDataType.hpp:21
std::map< std::string, StructMember > MemberMap
Definition: CompositeDataType.hpp:20
size_t getSize() const override
Definition: CompositeDataType.cpp:61
virtual MemberMap & getMemberMap()=0
std::string getTypeSpecName() const override
Get the Type Spec Name object.
Definition: CompositeDataType.cpp:112
bool accept(DataTypeVisitor *visitor) const override
Definition: CompositeDataType.cpp:116
virtual const MemberMap & getMemberMap() const =0
Get the map of struct members in this object.
void deleteInstance(void *address) const override
Delete this instance.
Definition: CompositeDataType.cpp:86
bool validate(DataTypeInator *dataTypeInator) override
Verify that all of the types that are named by this DataType or subordinate DataTypes are resolvable ...
Definition: CompositeDataType.cpp:27
bool isValid() const override
Determine whether this type has already been successfully validated.
Definition: CompositeDataType.cpp:56
std::string toString() const override
Definition: CompositeDataType.cpp:100
CompositeDataType(std::string name, size_t sizeof_struct, void *(*allocator)(int), void(*deAllocator)(void *))
Definition: CompositeDataType.cpp:10
CompositeDataType(const CompositeDataType &original)=delete
void * createInstance(unsigned int num) const override
Create one or more instances of this type.
Definition: CompositeDataType.cpp:66
const SortedMemberList & getSortedMemberList() const
Get the Sorted Member List object.
Definition: CompositeDataType.cpp:124
bool hasMemberNamed(std::string name)
Look up whether this struct has a member with the given name.
Definition: CompositeDataType.cpp:120
Register and manage datatypes at runtime.
Definition: DataTypeInator.hpp:16
Abstract base class for a DataTypeVisitor.
Definition: DataTypeVisitor.hpp:20
Abstract base class for DataTypes.
Definition: DataType.hpp:11