Structure.h

Go to the documentation of this file.
00001 
00020 #ifndef ARXX_STRUCTURE_H
00021 #define ARXX_STRUCTURE_H
00022 
00023 #include <map>
00024 #include <vector>
00025 
00026 #include "Common.h"
00027 #include "Reference.h"
00028 
00035 namespace Arxx
00036 {
00037     class Archive;
00038     
00039     class Buffer;
00040     
00041     class Item;
00042     
00048     class Structure
00049     {
00050         friend class Arxx::Archive;
00051     public:
00057         class Relation
00058         {
00059             friend class Arxx::Structure;
00060         public:
00061             typedef std::multimap< Arxx::u4byte, Arxx::Reference >::size_type size_type;
00062             
00063             class const_iterator;
00064             
00070             class iterator
00071             {
00072                 friend class Arxx::Structure::Relation::const_iterator;
00073             public:
00080                 iterator(std::multimap< Arxx::u4byte, Arxx::Reference >::iterator iReference);
00081                 
00085                 ~iterator(void);
00086                 
00092                 iterator & operator++(void);
00093                 
00099                 Arxx::Reference & operator*(void);
00100                 
00106                 const Arxx::Reference & operator*(void) const;
00107                 
00111                 Arxx::Reference * operator->(void);
00112                 
00117                 bool operator==(const Arxx::Structure::Relation::iterator & iReference) const;
00118                 
00123                 bool operator!=(const Arxx::Structure::Relation::iterator & iReference) const;
00124                 
00129                 bool operator==(const Arxx::Structure::Relation::const_iterator & iReference) const;
00130                 
00135                 bool operator!=(const Arxx::Structure::Relation::const_iterator & iReference) const;
00136             private:
00142                 std::multimap< Arxx::u4byte, Arxx::Reference >::iterator m_iReference;
00143             };
00144             
00150             class const_iterator
00151             {
00152                 friend class Arxx::Structure::Relation::iterator;
00153             public:
00160                 const_iterator(std::multimap< Arxx::u4byte, Arxx::Reference >::const_iterator iReference);
00161                 
00168                 const_iterator(Arxx::Structure::Relation::iterator iIterator);
00169                 
00173                 ~const_iterator(void);
00174                 
00180                 const_iterator & operator++(void);
00181                 
00187                 const Arxx::Reference & operator*(void) const;
00188                 
00192                 const Arxx::Reference * operator->(void);
00193                 
00198                 bool operator==(const Arxx::Structure::Relation::const_iterator & iReference) const;
00199                 
00204                 bool operator!=(const Arxx::Structure::Relation::const_iterator & iReference) const;
00205             private:
00211                 std::multimap< Arxx::u4byte, Arxx::Reference >::const_iterator m_iReference;
00212             };
00213             
00220             void vAdd(Arxx::u4byte u4UniqueID);
00221             
00228             bool bDelete(Arxx::u4byte u4UniqueID);
00229             
00233             size_type size(void) const;
00234             
00238             Arxx::Structure::Relation::iterator begin(void);
00239             
00243             Arxx::Structure::Relation::iterator end(void);
00244             
00248             Arxx::Structure::Relation::const_iterator begin(void) const;
00249             
00253             Arxx::Structure::Relation::const_iterator end(void) const;
00254             
00258             const std::string & sGetName(void) const;
00259         private:
00265             Relation(Arxx::Structure & Structure, const std::string & sName);
00266             
00272             Arxx::Structure & m_Structure;
00273             
00277             std::multimap< Arxx::u4byte, Arxx::Reference > m_References;
00278             
00282             std::string m_sName;
00283         };
00284         
00285         friend class Arxx::Structure::Relation;
00286         
00287         class const_iterator;
00288         
00294         class iterator
00295         {
00296             friend class Arxx::Structure::const_iterator;
00297         public:
00304             iterator(std::map< std::string, Arxx::Structure::Relation >::iterator iRelation);
00305             
00309             ~iterator(void);
00310             
00316             iterator & operator++(void);
00317             
00323             Arxx::Structure::Relation & operator*(void);
00324             
00330             const Arxx::Structure::Relation & operator*(void) const;
00331             
00335             Arxx::Structure::Relation * operator->(void);
00336             
00341             bool operator==(const Arxx::Structure::iterator & iRelation) const;
00342             
00347             bool operator!=(const Arxx::Structure::iterator & iRelation) const;
00348             
00353             bool operator==(const Arxx::Structure::const_iterator & iRelation) const;
00354             
00359             bool operator!=(const Arxx::Structure::const_iterator & iRelation) const;
00360         private:
00366             std::map< std::string, Arxx::Structure::Relation >::iterator m_iRelation;
00367         };
00368         
00374         class const_iterator
00375         {
00376             friend class Arxx::Structure::iterator;
00377         public:
00384             const_iterator(std::map< std::string, Arxx::Structure::Relation >::const_iterator iRelation);
00385             
00392             const_iterator(Arxx::Structure::iterator iRelation);
00393             
00397             ~const_iterator(void);
00398             
00404             const_iterator & operator++(void);
00405             
00411             const Arxx::Structure::Relation & operator*(void) const;
00412             
00416             const Arxx::Structure::Relation * operator->(void);
00417             
00422             bool operator==(const Arxx::Structure::const_iterator & iRelation) const;
00423             
00428             bool operator!=(const Arxx::Structure::const_iterator & iRelation) const;
00429         private:
00435             std::map< std::string, Arxx::Structure::Relation >::const_iterator m_iRelation;
00436         };
00437         
00438         typedef std::map< std::string, Arxx::Structure::Relation >::size_type size_type;
00439         
00444         Structure(Arxx::Item & Item);
00445         
00462         bool bAdd(Arxx::u4byte u4UniqueID, const std::string & sRelation = "child");
00463         
00484         bool bDelete(Arxx::u4byte u4UniqueID, const std::string & sRelation = "child");
00485         
00493         const Arxx::Structure::Relation & GetRelation(const std::string & sRelation) const;
00494         
00502         Arxx::Structure::Relation & GetRelation(const std::string & sRelation);
00503         
00508         bool bHasRelation(const std::string & sRelation) const;
00509         
00513         size_type size(void) const;
00514         
00518         Arxx::Structure::iterator begin(void);
00519         
00523         Arxx::Structure::iterator end(void);
00524         
00528         Arxx::Structure::const_iterator begin(void) const;
00529         
00533         Arxx::Structure::const_iterator end(void) const;
00534     private:
00535         friend Arxx::Buffer & Arxx::operator<<(Arxx::Buffer & Buffer, const Arxx::Structure & Structure);
00536         
00543         void vWriteToBuffer(Arxx::Buffer & Buffer) const;
00544         
00545         void vReadFromStream(Arxx::u4byte u4StructureDataLength, std::istream & IStream);
00546         
00547         
00548         void vRemoveRelation(Arxx::Structure::Relation * pRelation);
00549         Arxx::Item & m_Item;
00550         std::map< std::string, Arxx::Structure::Relation > m_Relations;
00551     };
00552     
00556     Arxx::Buffer & operator<<(Arxx::Buffer & Buffer, const Arxx::Structure & Structure);
00557 }
00558 
00559 #endif

Generated on Tue Oct 10 11:33:55 2006 for libarxx by  doxygen 1.4.7