00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _CINFO_H
00011 #define _CINFO_H
00012
00013 class DinfoBase;
00014
00018 class Cinfo
00019 {
00020 public:
00032 Cinfo( const std::string& name,
00033 const Cinfo* baseCinfo,
00034 Finfo** finfoArray,
00035 unsigned int nFinfos,
00036 DinfoBase* d,
00037 const string* doc = 0,
00038 unsigned int numDoc = 0,
00039 bool banCreation = false
00040 );
00041
00045 Cinfo();
00046
00050 Cinfo( const Cinfo& other );
00051
00052 ~Cinfo();
00054
00058 void init( Finfo** finfoArray, unsigned int nFinfos );
00059
00065 void registerFinfo( Finfo* f );
00066
00071 FuncId registerOpFunc( const OpFunc* f );
00072
00077 void overrideFunc( FuncId fid, const OpFunc* f );
00078
00083 BindIndex registerBindIndex();
00084
00090 void postCreationFunc( Id newId, Element* newElm ) const;
00091
00095 void registerPostCreationFinfo( const Finfo* f );
00096
00103 bool banCreation() const;
00105
00106 const OpFunc* getOpFunc( FuncId fid ) const;
00107
00108
00112 const std::string& name() const;
00113
00117 static const Cinfo* find( const std::string& name );
00118
00119
00120
00121
00122 const Cinfo* baseCinfo() const;
00123
00129 const Finfo* findFinfo( const string& name) const;
00130
00140 unsigned int numBindIndex() const;
00141
00145 const map< string, Finfo* >& finfoMap() const;
00146
00151 const DinfoBase* dinfo() const;
00152
00157 bool isA( const string& ancestor ) const;
00158
00162 void reportFids() const;
00163
00165
00167
00171 string getDocs() const;
00172
00176 string getBaseClass() const;
00177
00178
00182 Finfo* getSrcFinfo( unsigned int i ) const;
00183
00187 unsigned int getNumSrcFinfo() const;
00188
00192 Finfo* getDestFinfo( unsigned int i ) const;
00193
00197 unsigned int getNumDestFinfo() const;
00198
00202 Finfo* getValueFinfo( unsigned int i ) const;
00203
00207 unsigned int getNumValueFinfo() const;
00208
00212 Finfo* getLookupFinfo( unsigned int i ) const;
00216 unsigned int getNumLookupFinfo() const;
00217
00221 Finfo* getSharedFinfo( unsigned int i );
00222
00226 unsigned int getNumSharedFinfo() const;
00227
00231 Finfo* getFieldElementFinfo( unsigned int i ) const;
00232
00236 unsigned int getNumFieldElementFinfo() const;
00237
00241 void setNumFinfo( unsigned int v );
00242
00248 const string& srcFinfoName( BindIndex bid ) const;
00249
00255 const string& destFinfoName( FuncId fid ) const;
00256
00257
00258
00263 static void makeCinfoElements( Id parent );
00264
00270 static void rebuildOpIndex();
00271
00275 static const Cinfo* initCinfo();
00276
00277 private:
00278 string name_;
00279
00280
00281
00282 const Cinfo* baseCinfo_;
00283 const DinfoBase* dinfo_;
00284
00285 BindIndex numBindIndex_;
00286 std::map< std::string, std::string > doc_;
00287
00288 bool banCreation_;
00289
00293 map< string, Finfo* > finfoMap_;
00294
00296 vector< Finfo* > srcFinfos_;
00297
00299 vector< Finfo* > destFinfos_;
00300
00302 vector< Finfo* > valueFinfos_;
00303
00305 vector< Finfo* > lookupFinfos_;
00306
00308 vector< Finfo* > sharedFinfos_;
00309
00311 vector< Finfo* > fieldElementFinfos_;
00312
00318 vector< const Finfo* > postCreationFinfos_;
00319 vector< const OpFunc* > funcs_;
00320
00321
00322
00323 static unsigned int numCoreOpFunc_;
00324
00325
00326 static map< string, Cinfo* >& cinfoMap();
00327
00328
00329
00330 };
00331
00332 #endif // _CINFO_H