ICG 2
Electric Boogaloo
PointerDataType.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stddef.h>
4 #include <string>
5 #include <stdexcept>
6 
7 #include "DataTypeInator.hpp"
8 
9 
12 class PointerDataType : public DataType {
13 
14  public:
15 
20  PointerDataType( std::string typeSpecifierName ) ;
21 
22  /* ================================================================================= */
23  /* RULE OF THREE (and a half) INTERFACE */
24  /* ================================================================================= */
25 
26  PointerDataType ( const PointerDataType & original ) = delete;
29 
30 
31  /* ==================================================================== */
32  /* VIRTUAL INTERFACE */
33  /* ==================================================================== */
34 
37  bool validate(DataTypeInator * dataTypeInator) override;
38 
39  bool isValid() const override;
40 
41 
45  size_t getSize() const override;
46 
47 
51  void* createInstance(unsigned int num) const override;
52 
55  void deleteInstance(void* address) const override;
56 
59  std::string getTypeSpecName() const override;
60 
63  std::string makeDeclaration(std::string declarator) const override;
64 
65  bool accept (DataTypeVisitor* visitor) const override;
66 
67 
68  /* ==================================================================== */
69  /* CLASS SPECIFIC INTERFACE */
70  /* ==================================================================== */
71 
72  std::shared_ptr<const DataType> getSubType() const;
73 
74 
75  private:
76 
77  std::shared_ptr<const DataType> subType;
78 
79  bool is_valid;
80  std::string typeSpecName;
81 
82  const DataTypeInator * dataTypeInator;
83 };
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
Definition: PointerDataType.hpp:12
bool validate(DataTypeInator *dataTypeInator) override
Verify that all of the types that are named by this DataType or subordinate DataTypes are resolvable ...
Definition: PointerDataType.cpp:36
std::shared_ptr< const DataType > getSubType() const
Definition: PointerDataType.cpp:90
bool isValid() const override
Determine whether this type has already been successfully validated.
Definition: PointerDataType.cpp:49
size_t getSize() const override
Definition: PointerDataType.cpp:54
PointerDataType & operator=(PointerDataType rhs)=delete
bool accept(DataTypeVisitor *visitor) const override
Definition: PointerDataType.cpp:86
void * createInstance(unsigned int num) const override
Definition: PointerDataType.cpp:59
~PointerDataType()
Definition: PointerDataType.cpp:28
PointerDataType(const PointerDataType &original)=delete
std::string makeDeclaration(std::string declarator) const override
Definition: PointerDataType.cpp:76
PointerDataType(std::string typeSpecifierName)
Definition: PointerDataType.cpp:15
std::string getTypeSpecName() const override
Get the Type Spec Name object.
Definition: PointerDataType.cpp:71
void deleteInstance(void *address) const override
Delete this instance.
Definition: PointerDataType.cpp:65