#ifndef ACPA_ELEMENT_H #define ACPA_ELEMENT_H #include #include #include #include using std::map; using std::shared_ptr; using std::string; using std::vector; using std::weak_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 int type() const = 0; virtual ~ValType() = default; }; struct TemplateType : ValType { int type() const override; }; struct StructType : ValType { int type() const override; shared_ptr str; map, shared_ptr> mp; }; struct FunctionType : ValType { int type() const override; vector> c1; vector> c2; shared_ptr c3; }; bool sameType(shared_ptr, shared_ptr); #endif