Ignore:
Timestamp:
Aug 9, 2007, 3:18:40 AM (17 years ago)
Author:
dai_9181
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/include/Class.h

    r266 r270  
    3131typedef vector<InheritedInterface> Interfaces;
    3232
    33 class CClass: public Prototype
     33class CClass: public Prototype, public Jenga::Common::ObjectInHashmap<CClass>
    3434{
    3535public:
     
    148148    }
    149149
     150    virtual const std::string &GetKeyName() const
     151    {
     152        return GetName();
     153    }
     154    virtual bool IsDuplication( const CClass *pClass ) const
     155    {
     156        if( pClass->IsEqualSymbol( *this ) )
     157        {
     158            return true;
     159        }
     160        return false;
     161    }
     162
    150163    void Readed(){
    151164        isReady = true;
     
    355368};
    356369
    357 #define MAX_CLASS_HASH 65535
    358 class Classes
     370class Classes : public Jenga::Common::Hashmap<CClass>
    359371{
    360     CClass *pobj_ClassHash[MAX_CLASS_HASH];
    361     int GetHashCode(const char *name) const;
    362 
    363372    // XMLシリアライズ用
    364 private:
    365     friend class boost::serialization::access;
    366     BOOST_SERIALIZATION_SPLIT_MEMBER();
    367     template<class Archive> void load(Archive& ar, const unsigned int version)
    368     {
    369         trace_for_serialize( "serializing(load) - Classes" );
    370 
    371         std::vector<CClass *> vectorClasses;
    372         ar & BOOST_SERIALIZATION_NVP( vectorClasses );
    373 
    374         // 読み込み後の処理
    375         Clear();
    376         BOOST_FOREACH( CClass *pClass, vectorClasses )
    377         {
    378             Insert( pClass );
    379         }
    380         Iterator_Init();
    381     }
    382     template<class Archive> void save(Archive& ar, const unsigned int version) const
    383     {
    384         trace_for_serialize( "serializing(save) - Classes" );
    385 
    386         // 保存準備
    387         std::vector<CClass *> vectorClasses;
    388         vectorClasses.clear();
    389         Iterator_Reset();
    390         while( Iterator_HasNext() )
    391         {
    392             vectorClasses.push_back( dynamic_cast<CClass *>(Iterator_GetNext()) );
    393         }
    394 
    395         ar & BOOST_SERIALIZATION_NVP( vectorClasses );
    396     }
    397 
    398373public:
    399374    Classes()
     
    401376        , pStringClass( NULL )
    402377        , pObjectClass( NULL )
    403         , ppobj_IteClass( NULL )
    404         , iIteMaxNum( 0 )
    405         , iIteNextNum( 0 )
    406     {
    407         memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
     378    {
    408379    }
    409380    ~Classes()
    410381    {
    411         for(int i=0;i<MAX_CLASS_HASH;i++){
    412             if(pobj_ClassHash[i]) DestroyClass(pobj_ClassHash[i]);
    413         }
    414     }
    415     void DestroyClass(CClass *pobj_c)
    416     {
    417         if(pobj_c->pobj_NextClass){
    418             DestroyClass(pobj_c->pobj_NextClass);
    419         }
    420 
    421         delete pobj_c;
    422     }
    423     void Clear()
    424     {
    425         if(ppobj_IteClass)
    426         {
    427             free(ppobj_IteClass);
    428             ppobj_IteClass = NULL;
    429         }
    430         // TODO: ここはこれでいいのか…
    431         memset( pobj_ClassHash, 0, MAX_CLASS_HASH * sizeof(CClass *) );
    432382    }
    433383
     
    473423    CClass *GetStringClassPtr() const;
    474424    CClass *GetObjectClassPtr() const;
    475 
    476 
    477     /////////////////////
    478     // イテレータ
    479     /////////////////////
    480 private:
    481     mutable CClass **ppobj_IteClass;
    482     mutable int iIteMaxNum;
    483     mutable int iIteNextNum;
    484 public:
    485     void Iterator_Init() const;
    486     void Iterator_Reset() const;
    487     BOOL Iterator_HasNext() const;
    488     CClass *Iterator_GetNext() const;
    489     int Iterator_GetMaxCount() const;
    490425};
Note: See TracChangeset for help on using the changeset viewer.