#pragma once #include #include #include #include #include "Interpretation.h" #include "Operator.h" #include "Primitive.h" class EHS_LIB_IO Language { private: friend class Arctyx; ehs::UInt_64 id; ehs::Str_8 name; ehs::Version version; ehs::Array eols; ehs::Array separators; ehs::Array primitives; ehs::Array keywords; ehs::Array operators; ehs::Array interpretations; static ehs::Array languages; public: Language(); Language(ehs::Str_8 name, const ehs::Version &version); Language(Language &&lang) noexcept; Language(const Language &lang); Language &operator=(Language &&lang) noexcept; Language &operator=(const Language &lang); ehs::UInt_64 GetId() const; ehs::Str_8 GetName() const; ehs::Version GetVersion() const; ehs::Array GetEOLs() const; bool HasEOL(const ehs::Char_8 &eol) const; bool AddEOL(const ehs::Char_8 &eol); ehs::Array GetSeparators() const; bool HasSeparator(const ehs::Char_8 &separator) const; bool AddSeparator(const ehs::Char_8 &separator); ehs::Array GetPrimitives() const; bool HasPrimitive(const ehs::UInt_64 &id) const; bool HasPrimitive(const ehs::Str_8 &name) const; const Primitive *GetPrimitive(const ehs::UInt_64 &id) const; const Primitive *GetPrimitive(const ehs::Str_8 &name) const; bool AddPrimitive(Primitive primitive); ehs::Array GetKeywords() const; bool HasKeyword(const ehs::Str_8 &keyword) const; bool AddKeyword(const ehs::Str_8 &keyword); ehs::Array GetOperators() const; bool HasOperator(const ehs::Str_8 &delimeter) const; const Operator *GetOperator(const ehs::Str_8 &delimeter) const; bool AddOperator(Operator primitive); ehs::Array GetInterpretations() const; bool HasInterpretation(const TokenT &type, const ehs::Str_8 &name) const; const Interpretation *GetInterpretation(const TokenT &type, const ehs::Str_8 &name) const; bool AddInterpretation(Interpretation interpretation); static bool Has(const ehs::UInt_64 &id); static bool Has(const ehs::Str_8 &name); static const Language *Get(const ehs::UInt_64 &id); static const Language *Get(const ehs::Str_8 &name); static bool Add(Language lang); };