ICG 2
Electric Boogaloo
LookupAddressAndTypeByName.hpp
Go to the documentation of this file.
1 #pragma once
2 
4 #include "Value/Value.hpp"
6 
7 // More accurate name would be
8 // LookupAddressAndTypeByNameVisitor
9 // but that's so long
10 
12 
13  struct Result {
14  Result() : success(false), type(NULL), address(NULL), isPointer(false) {}
15 
16  bool success;
17  std::shared_ptr<const DataType> type;
18  void * address;
19  bool isPointer;
20  };
21 
23 
24  public:
25  LookupAddressAndTypeByNameVisitor(void * starting_address, std::string full_variable_name);
26  LookupAddressAndTypeByNameVisitor(void * starting_address, MutableVariableName name_elems);
27 
28  // Visitor Interface
29  virtual bool visitPrimitiveDataType(std::shared_ptr<const PrimitiveDataType> node) override;
30  virtual bool visitCompositeType(std::shared_ptr<const CompositeDataType> node) override;
31  virtual bool visitArrayType(std::shared_ptr<const ArrayDataType> node) override;
32  virtual bool visitPointerType(std::shared_ptr<const PointerDataType> node) override;
33  virtual bool visitEnumeratedType(std::shared_ptr<const EnumDataType> node) override;
34  virtual bool visitStringType (std::shared_ptr<const StringDataType> node) override;
35  virtual bool visitSequenceType (std::shared_ptr<const SequenceDataType> node) override;
36 
37  Result getResult();
38 
39  private:
40  // Helper
41  bool visitLeaf(std::shared_ptr<const DataType> node);
42 
43  // Visitor Intermediate State
44  void * current_search_address;
45  MutableVariableName name_elems;
46 
47  // Result
48  Result result;
49  };
50 }
Abstract base class for a DataTypeVisitor.
Definition: DataTypeVisitor.hpp:20
Definition: LookupAddressAndTypeByName.hpp:22
virtual bool visitSequenceType(std::shared_ptr< const SequenceDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:112
LookupAddressAndTypeByNameVisitor(void *starting_address, std::string full_variable_name)
Definition: LookupAddressAndTypeByName.cpp:9
virtual bool visitEnumeratedType(std::shared_ptr< const EnumDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:104
virtual bool visitStringType(std::shared_ptr< const StringDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:108
virtual bool visitPointerType(std::shared_ptr< const PointerDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:87
virtual bool visitCompositeType(std::shared_ptr< const CompositeDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:17
virtual bool visitArrayType(std::shared_ptr< const ArrayDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:52
Result getResult()
Definition: LookupAddressAndTypeByName.cpp:165
virtual bool visitPrimitiveDataType(std::shared_ptr< const PrimitiveDataType > node) override
Definition: LookupAddressAndTypeByName.cpp:100
Definition: MutableVariableName.hpp:9
Definition: LookupAddressAndTypeByName.hpp:11
Definition: LookupAddressAndTypeByName.hpp:13
bool isPointer
Definition: LookupAddressAndTypeByName.hpp:19
std::shared_ptr< const DataType > type
Definition: LookupAddressAndTypeByName.hpp:17
bool success
Definition: LookupAddressAndTypeByName.hpp:16
Result()
Definition: LookupAddressAndTypeByName.hpp:14
void * address
Definition: LookupAddressAndTypeByName.hpp:18