#pragma once #include class ClassImpl: public CClass { public: ClassImpl( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name ) : CClass( namespaceScopes, importedNamespaces, name ) { } ClassImpl() : CClass() { } virtual bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const; //継承させる virtual bool Inherits( const char *inheritNames, int nowLine ); virtual bool InheritsClass( const CClass &inheritsClass, int nowLine ); virtual bool InheritsInterface( const CClass &inheritsClass, int nowLine ); //メンバ、メソッドの追加 CMember *CreateMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine ); virtual void AddMember( Prototype::Accessibility accessibility, bool idConst, bool isRef, char *buffer, int nowLine ); virtual void AddStaticMember( Prototype::Accessibility accessibility, bool isConst, bool isRef, char *buffer, int nowLine ); virtual void AddMethod(CClass *pobj_c, Prototype::Accessibility accessibility, BOOL bStatic, bool isConst, bool isAbstract, bool isVirtual, bool isOverride, char *buffer, int nowLine); virtual LONG_PTR GetVtblGlobalOffset(void) const; virtual void ActionVtblSchedule(LONG_PTR ImageBase, LONG_PTR MemPos_CodeSection); // XMLシリアライズ用 private: friend class boost::serialization::access; template void serialize(Archive& ar, const unsigned int version) { ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CClass ); } }; BOOST_IS_ABSTRACT( CClass ); class ClassesImpl : public Classes { public: ClassesImpl() : Classes() { } virtual CClass *Create( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name); virtual void CollectClassesForNameOnly( const BasicSource &source ); virtual void InitStaticMember(); private: bool MemberVar_LoopRefCheck(const CClass &objClass); public: virtual void GetClass_recur(const char *lpszInheritsClass); virtual void GetAllClassInfo(); virtual void Compile_System_InitializeUserTypes(); virtual const CClass *Find( const NamespaceScopes &namespaceScopes, const string &name ) const; // XMLシリアライズ用 private: friend class boost::serialization::access; BOOST_SERIALIZATION_SPLIT_MEMBER(); template void load(Archive& ar, const unsigned int version) { std::vector vectorClasses; ar & BOOST_SERIALIZATION_NVP( vectorClasses ); // 読み込み後の処理 Clear(); BOOST_FOREACH( CClass *pClass, vectorClasses ) { Insert( pClass ); } } template void save(Archive& ar, const unsigned int version) const { // 保存準備 std::vector vectorClasses; vectorClasses.clear(); Iterator_Reset(); while( Iterator_HasNext() ) { vectorClasses.push_back( dynamic_cast(Iterator_GetNext()) ); } ar & BOOST_SERIALIZATION_NVP( vectorClasses ); } }; BOOST_IS_ABSTRACT( Classes );