#pragma once //定数 class CConst : public Symbol, public Jenga::Common::ObjectInHashmap { Type type; _int64 i64data; // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - CConst" ); ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol ); ar & BOOST_SERIALIZATION_NVP( type ); ar & BOOST_SERIALIZATION_NVP( i64data ); } public: CConst( const NamespaceScopes &namespaceScopes, const std::string &name, const Type &newType, _int64 i64data) : Symbol( namespaceScopes, name ) , type( newType ) , i64data( i64data ) { } CConst( const NamespaceScopes &namespaceScopes, const std::string &name, int value) : Symbol( namespaceScopes, name ) , type( Type(DEF_LONG) ) , i64data( value ) { } CConst() { } ~CConst() { } virtual const std::string &GetKeyName() const { return GetName(); } Type GetType() { return type; } _int64 GetWholeData() { return i64data; } double GetDoubleData(); }; class Consts : public Jenga::Common::Hashmap { // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - Consts" ); ar & boost::serialization::make_nvp("Hashmap_CConst", boost::serialization::base_object>(*this)); } public: void Add( const NamespaceScopes &namespaceScopes, const std::string &name, const char *Expression); void Add( const NamespaceScopes &namespaceScopes, const std::string &name, int value); private: CConst *GetObjectPtr( const std::string &name ); public: int GetBasicType(const char *Name); _int64 GetWholeData(const char *Name); double GetDoubleData(const char *Name); bool IsStringPtr(const char *Name); }; //定数マクロ class ConstMacro : public Symbol, public Jenga::Common::ObjectInHashmap { std::vector parameters; std::string expression; // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - ConstMacro" ); ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Symbol ); ar & BOOST_SERIALIZATION_NVP( parameters ); ar & BOOST_SERIALIZATION_NVP( expression ); } public: ConstMacro( const NamespaceScopes &namespaceScopes, const std::string &name, const std::vector ¶meters, const std::string &expression ) : Symbol( namespaceScopes, name ) , parameters( parameters ) , expression( expression ) { } ConstMacro() { } ~ConstMacro() { } virtual const std::string &GetKeyName() const { return GetName(); } const std::vector &GetParameters() const { return parameters; } const std::string &GetExpression() const { return expression; } bool GetCalcBuffer( const char *parameterStr, char *dest ) const; }; class ConstMacros : public Jenga::Common::Hashmap { // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { trace_for_serialize( "serializing - ConstMacros" ); ar & boost::serialization::make_nvp("Hashmap_ConstMacro", boost::serialization::base_object>(*this)); } public: void Add( const NamespaceScopes &namespaceScopes, const std::string &name, const char *parameterStr ); ConstMacro *Find( const std::string &name ); };