ICG 2
Electric Boogaloo
SpecifiedCompositeType.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 
5 // An Allocator
6 template <typename T>
7 void* construct_composite (int num) {
8  T* temp = (T*)calloc( num, sizeof(T));
9  for (int ii=0 ; ii<num ; ii++) { new( &temp[ii]) T(); }
10  return ((void *)temp);
11 }
12 
13 // A Deallocator
14 // Object constructed with placement new must call the destructor explicitly (https://isocpp.org/wiki/faq/dtors#placement-new)
15 template <typename T>
16 void destruct_composite (void* address) {
17  T* temp = static_cast<T*> (address);
18  temp->~T();
19 }
20 
28 template <typename T>
30 
31  public:
32  SpecifiedCompositeType(std::string name) : CompositeDataType(name, sizeof(T), &construct_composite<T>, &destruct_composite<T>) {}
33 
35  static MemberMap memberMap;
36  return memberMap;
37  }
38 
39  // This is just a const overload of above
40  const MemberMap& getMemberMap () const override {
41  return (const_cast<SpecifiedCompositeType<T>*> (this))->getMemberMap();
42  }
43 
44  template<typename Derived>
46  return getMemberMap();
47  }
48 };
void destruct_composite(void *address)
Definition: SpecifiedCompositeType.hpp:16
void * construct_composite(int num)
Definition: SpecifiedCompositeType.hpp:7
Definition: CompositeDataType.hpp:16
std::map< std::string, StructMember > MemberMap
Definition: CompositeDataType.hpp:20
This is a class template that can be used to represent a composite type. This version can ONLY be use...
Definition: SpecifiedCompositeType.hpp:29
SpecifiedCompositeType(std::string name)
Definition: SpecifiedCompositeType.hpp:32
MemberMap & getMemberMap()
Definition: SpecifiedCompositeType.hpp:34
const MemberMap & getMemberMap() const override
Get the map of struct members in this object.
Definition: SpecifiedCompositeType.hpp:40
static MemberMap applyMembersToDerived()
Definition: SpecifiedCompositeType.hpp:45