#ifndef ACPA_ELEMENT_H #define ACPA_ELEMENT_H #include #include #include #include using std::map; using std::vector; using std::string; using std::weak_ptr; using std::shared_ptr; struct Struct; struct ValType; struct TemplateType; struct StructType; struct FunctionType; struct Struct { weak_ptr fa; vector> c1; vector> c2; map> vars; map> structs; }; struct ValType { virtual const int type() = 0; }; struct TemplateType : ValType { const int type() override { return 0; } }; struct StructType : ValType { const int type() override { return 1; } shared_ptr str; map, shared_ptr> mp; }; struct FunctionType : ValType { const int type() override { return 2; } vector> c1; vector> c2; shared_ptr c3; }; bool sameType(shared_ptr, shared_ptr); #endif