C++ (Qt)struct CBase { long mObjectID: // уникальное ID объекта CBase * mPrev; // предыдущий объект (все объекты связаны в список) CBase * mNext; // следующий объект CBase * mPrevTyped; // предыдущий объект того же типа (унаследованного от CBase) CBase * mNextTyped; // следующий объект того же типа };
C++ (Qt)CBase * obj = GetFirstTypedObject(TYPE_1);while (obj) { // do something with obj obj = GetNextTypedObject(obj);}....CBase * obj = GetNthTypedObject(TYPE_1);if (obj != NULL) .....InsertTypedObject(newObj, thePosition);
C++ (Qt)static QMap< type, QList< CBase* > > typedMap QList< CBase* >* list = GetTypeList( typeID ){ if ( !typedMap.contains( typeID ) ) { typedMap.insert( typeID, QList< CBase* >() ); } return &typedMap.value( typeID );} CBase* GetFirstTypedObject( type typeID ){ QList< CBase* >* list = GetTypeList( typeID ); return list.first();} CBase* GetNextTypedObject( CBase* obj ){ if ( obj == 0 ) { return 0; } QList< CBase* >* list = GetTypeList( typeOf( obj ) ); int index = list.indexOf( obj ); if ( ( index == -1 ) || ( ( index+1 ) == list.length() ) ) { return 0; } else { return list.at( index + 1 ); }}
C++ (Qt)CBase* GetNextTypedObject( CBase* obj ){ ... int index = list.indexOf( obj ); ...}
C++ (Qt)typedef long TID;std::map <TID, CBase *> theMapID; // поиск объекта по ID typedef std::vector <TID> TVecID;TVecID theVecAllID; // вектор всех объектов std::map <type, TVecID *> theMapTypeID; // поиск по типу объекта
C++ (Qt)class MyObj { ... MyTarget * mTarget;};
C++ (Qt)MyTarget * GetDependentObject(ID(), DEPENDENCY_TYPE_1);size_t NumDependentObjects(ID(), DEPENDENCY_TYPE_1);