Changeset 203 in dev


Ignore:
Timestamp:
Jul 3, 2007, 3:49:18 AM (17 years ago)
Author:
dai_9181
Message:

jengaライブラリに一通りserializeメソッドを仕込んだ

Location:
trunk/jenga
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/jenga/include/smoothie/Class.h

    r200 r203  
    5454    NamespaceScopesCollection importedNamespaces;
    5555
    56     // 継承するインターフェイス
     56    // 実装するインターフェイス
    5757    Interfaces interfaces;
     58   
     59    // 継承クラス
     60    const CClass *pSuperClass;
    5861
    5962    // Blittable型情報
     
    7780
    7881    // XMLシリアライズ用
     82    // TODO: xml実装
    7983private:
    8084    friend class boost::serialization::access;
     
    8589        ar & BOOST_SERIALIZATION_NVP( importedNamespaces );
    8690        //ar & BOOST_SERIALIZATION_NVP( interfaces );
     91        ar & boost::serialization::make_nvp( "pSuperClass", const_cast<CClass *&>(pSuperClass) );
    8792        ar & BOOST_SERIALIZATION_NVP( blittableType );
    8893        //ar & BOOST_SERIALIZATION_NVP( dynamicMembers );
     
    99104
    100105public:
    101     //継承クラスへのポインタ
    102     const CClass *pobj_InheritsClass;
    103106
    104107    //アラインメント値
    105108    int iAlign;
    106109
    107     CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name );
     110    CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name )
     111        : isReady( false )
     112        , Prototype( namespaceScopes, name )
     113        , importedNamespaces( importedNamespaces )
     114        , ConstructorMemberSubIndex( -1 )
     115        , DestructorMemberSubIndex( -1 )
     116        , classType( Class )
     117        , pSuperClass( NULL )
     118        , vtblNum( 0 )
     119        , iAlign( 0 )
     120        , vtbl_offset( -1 )
     121        , isCompilingConstructor( false )
     122        , isCompilingDestructor( false )
     123        , pobj_NextClass( NULL )
     124    {
     125    }
    108126    CClass()
    109         : Prototype()
     127        : isReady( false )
     128        , Prototype()
     129        , importedNamespaces()
     130        , ConstructorMemberSubIndex( -1 )
     131        , DestructorMemberSubIndex( -1 )
     132        , classType()
     133        , pSuperClass( NULL )
     134        , vtblNum( 0 )
     135        , iAlign( 0 )
     136        , vtbl_offset( -1 )
     137        , isCompilingConstructor( false )
     138        , isCompilingDestructor( false )
     139        , pobj_NextClass( NULL )
    110140    {
    111141    }
     
    130160    }
    131161    bool IsInheritsInterface( const CClass *pInterfaceClass ) const;
     162
     163    // 継承元クラス
     164    bool HasSuperClass() const
     165    {
     166        return ( pSuperClass != NULL );
     167    }
     168    const CClass &GetSuperClass() const
     169    {
     170        return *pSuperClass;
     171    }
     172    void SetSuperClass( const CClass *pSuperClass )
     173    {
     174        this->pSuperClass = pSuperClass;
     175    }
    132176
    133177    // Blittable型
  • trunk/jenga/include/smoothie/Member.h

    r187 r203  
    2020    string initializeExpression;
    2121    string constructParameter;
     22
     23    // XMLシリアライズ用
     24private:
     25    friend class boost::serialization::access;
     26    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     27    {
     28        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MemberPrototype );
     29        ar & BOOST_SERIALIZATION_NVP( name );
     30        ar & BOOST_SERIALIZATION_NVP( type );
     31        ar & BOOST_SERIALIZATION_NVP( isConst );
     32        ar & BOOST_SERIALIZATION_NVP( initializeExpression );
     33        ar & BOOST_SERIALIZATION_NVP( constructParameter );
     34    }
     35
    2236public:
    2337    int SubScripts[MAX_ARRAYDIM];
  • trunk/jenga/include/smoothie/Method.h

    r170 r203  
    1717class CMethod : public MemberPrototype
    1818{
     19
     20    // XMLシリアライズ用
     21    // TODO: xml実装
     22private:
     23    friend class boost::serialization::access;
     24    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     25    {
     26        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MemberPrototype );
     27        //ar & BOOST_SERIALIZATION_NVP( pUserProc );
     28    }
     29
    1930public:
    2031    UserProc *pUserProc;
     
    4152    bool isConst;
    4253    const CClass *pInheritsClass;
     54
     55    // XMLシリアライズ用
     56    // TODO: xml実装
     57private:
     58    friend class boost::serialization::access;
     59    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     60    {
     61        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
     62        ar & BOOST_SERIALIZATION_NVP( isAbstract );
     63        ar & BOOST_SERIALIZATION_NVP( isVirtual );
     64        ar & BOOST_SERIALIZATION_NVP( isConst );
     65        //ar & BOOST_SERIALIZATION_NVP( pInheritsClass );
     66    }
    4367
    4468public:
     
    91115class StaticMethod : public CMethod
    92116{
     117    // XMLシリアライズ用
     118private:
     119    friend class boost::serialization::access;
     120    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     121    {
     122        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( CMethod );
     123    }
     124
    93125public:
    94126    StaticMethod( UserProc *pUserProc, Prototype::Accessibility accessibility )
     
    113145class Methods : public vector<CMethod *>
    114146{
     147    // XMLシリアライズ用
     148    // TODO: xml実装
     149private:
     150    friend class boost::serialization::access;
     151    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     152    {
     153        ar & boost::serialization::make_nvp("vector_CMethod", boost::serialization::base_object<vector<CMethod *>>(*this));
     154    }
     155
    115156public:
    116157    Methods();
  • trunk/jenga/include/smoothie/Parameter.h

    r181 r203  
    1515
    1616    const std::string initValue;
     17
     18    // XMLシリアライズ用
     19private:
     20    friend class boost::serialization::access;
     21    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     22    {
     23        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Type );
     24        ar & BOOST_SERIALIZATION_NVP( varName );
     25        ar & BOOST_SERIALIZATION_NVP( isRef );
     26        ar & BOOST_SERIALIZATION_NVP( isArray );
     27        ar & BOOST_SERIALIZATION_NVP( subScripts );
     28        ar & BOOST_SERIALIZATION_NVP( initValue );
     29    }
    1730
    1831public:
     
    93106class Parameters : public std::vector<Parameter *>
    94107{
     108    // XMLシリアライズ用
     109private:
     110    friend class boost::serialization::access;
     111    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     112    {
     113        ar & boost::serialization::make_nvp("vector_Parameter", boost::serialization::base_object<vector<Parameter *>>(*this));
     114    }
     115
    95116public:
    96117
  • trunk/jenga/include/smoothie/Procedure.h

    r192 r203  
    1616
    1717private:
    18     const string name;                      // プロシージャ名
     18    string name;                        // プロシージャ名
    1919
    2020    Kind kind;
     
    3333    // ソースコードの位置
    3434    int codePos;
     35
     36    // XMLシリアライズ用
     37private:
     38    friend class boost::serialization::access;
     39    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     40    {
     41        ar & BOOST_SERIALIZATION_NVP( name );
     42        ar & BOOST_SERIALIZATION_NVP( kind );
     43        ar & BOOST_SERIALIZATION_NVP( isCdecl );
     44        ar & BOOST_SERIALIZATION_NVP( isUsing );
     45        ar & BOOST_SERIALIZATION_NVP( params );
     46        ar & BOOST_SERIALIZATION_NVP( returnType );
     47        ar & BOOST_SERIALIZATION_NVP( codePos );
     48    }
    3549
    3650public:
     
    112126    bool isCompiled;
    113127
    114 public:
    115 
    116     void Serialize( bool isRead )
    117     {
    118 
    119     }
     128    // XMLシリアライズ用
     129    // TODO: xml実装(publicなクラスが残っている)
     130private:
     131    friend class boost::serialization::access;
     132    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     133    {
     134        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
     135        ar & BOOST_SERIALIZATION_NVP( _paramStr );
     136        ar & BOOST_SERIALIZATION_NVP( secondParmNum );
     137        ar & BOOST_SERIALIZATION_NVP( realParams );
     138        ar & BOOST_SERIALIZATION_NVP( realSecondParmNum );
     139        ar & BOOST_SERIALIZATION_NVP( pParentClass );
     140        ar & BOOST_SERIALIZATION_NVP( pMethod );
     141        ar & BOOST_SERIALIZATION_NVP( isExport );
     142        ar & BOOST_SERIALIZATION_NVP( isSystem );
     143        ar & BOOST_SERIALIZATION_NVP( isAutoGeneration );
     144        ar & BOOST_SERIALIZATION_NVP( isCompiled );
     145    }
     146
     147public:
    120148
    121149    UserProc( const string &name, Kind kind, bool isMacro, bool isCdecl, bool isExport ):
     
    260288class DllProc : public Procedure
    261289{
    262     const NamespaceScopes namespaceScopes;
    263 
    264     const string dllFileName;
    265     const string alias;
     290    NamespaceScopes namespaceScopes;
     291
     292    string dllFileName;
     293    string alias;
    266294    int lookupAddress;
     295
     296    // XMLシリアライズ用
     297private:
     298    friend class boost::serialization::access;
     299    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     300    {
     301        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
     302        ar & BOOST_SERIALIZATION_NVP( namespaceScopes );
     303        ar & BOOST_SERIALIZATION_NVP( dllFileName );
     304        ar & BOOST_SERIALIZATION_NVP( alias );
     305        ar & BOOST_SERIALIZATION_NVP( lookupAddress );
     306    }
    267307
    268308public:
     
    312352class ProcPointer : public Procedure
    313353{
     354    // XMLシリアライズ用
     355private:
     356    friend class boost::serialization::access;
     357    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     358    {
     359        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Procedure );
     360    }
     361
    314362public:
    315363    ProcPointer( Kind kind ):
     
    323371class ProcPointers : public vector<ProcPointer *>
    324372{
     373    // XMLシリアライズ用
     374private:
     375    friend class boost::serialization::access;
     376    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     377    {
     378        ar & boost::serialization::make_nvp("vector_ProcPointer", boost::serialization::base_object<vector<ProcPointer *>>(*this));
     379    }
     380
    325381public:
    326382    ProcPointers()
  • trunk/jenga/include/smoothie/Prototype.h

    r200 r203  
    7979{
    8080    Prototype::Accessibility accessibility;
     81
     82    // XMLシリアライズ用
     83private:
     84    friend class boost::serialization::access;
     85    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     86    {
     87        ar & BOOST_SERIALIZATION_NVP( accessibility );
     88    }
     89
    8190public:
    8291    MemberPrototype( Prototype::Accessibility accessibility )
  • trunk/jenga/include/smoothie/Variable.h

    r192 r203  
    66class Variable : public Type
    77{
    8     const NamespaceScopes namespaceScopes;
     8    NamespaceScopes namespaceScopes;
    99    string name;
    1010    bool isConst;
     
    1414
    1515    bool isParameter;
     16
     17    // XMLシリアライズ用
     18    // TODO: xml実装(publicなクラスが残っている)
     19private:
     20    friend class boost::serialization::access;
     21    template<class Archive> void serialize(Archive& ar, const unsigned int version)
     22    {
     23        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP( Type );
     24        ar & BOOST_SERIALIZATION_NVP( namespaceScopes );
     25        ar & BOOST_SERIALIZATION_NVP( name );
     26        ar & BOOST_SERIALIZATION_NVP( isConst );
     27        ar & BOOST_SERIALIZATION_NVP( isRef );
     28        ar & BOOST_SERIALIZATION_NVP( isArray );
     29        ar & BOOST_SERIALIZATION_NVP( subScripts );
     30        ar & BOOST_SERIALIZATION_NVP( isParameter );
     31    }
    1632
    1733public:
  • trunk/jenga/src/smoothie/Class.cpp

    r192 r203  
    66
    77
    8 CClass::CClass( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const string &name )
    9     : isReady( false )
    10     , Prototype( namespaceScopes, name )
    11     , importedNamespaces( importedNamespaces )
    12     , ConstructorMemberSubIndex( -1 )
    13     , DestructorMemberSubIndex( -1 )
    14     , classType( Class )
    15     , pobj_InheritsClass( NULL )
    16     , vtblNum( 0 )
    17     , iAlign( 0 )
    18     , vtbl_offset( -1 )
    19     , isCompilingConstructor( false )
    20     , isCompilingDestructor( false )
    21     , pobj_NextClass( NULL )
    22 {
    23 }
    248CClass::~CClass(){
    259    // 動的メンバ
     
    284268bool CClass::IsSubClass( const CClass *pClass ) const
    285269{
    286     pClass = pClass->pobj_InheritsClass;
    287     while( pClass ){
    288         if( this == pClass ) return true;
    289         pClass = pClass->pobj_InheritsClass;
     270    if( !pClass->HasSuperClass() )
     271    {
     272        return false;
     273    }
     274
     275    const CClass *pTempClass = &pClass->GetSuperClass();
     276    while( pTempClass ){
     277        if( this == pTempClass ) return true;
     278        pTempClass = &pTempClass->GetSuperClass();
    290279    }
    291280    return false;
Note: See TracChangeset for help on using the changeset viewer.