int main(int argc, char *argv[]) { Decomposition decomp ; for (Decomposition::Iterator ditr(&decomp); ditr.isValid(); ditr.next()) { Domain* domain = ditr.value(); } return 0; }
bool SimObject::writeObject(Stream *stream) { stream->writeString(getName() ? getName() : ""); // Static fields AbstractClassRep *rep = getClassRep(); AbstractClassRep::FieldList &fieldList = rep->mFieldList; AbstractClassRep::FieldList::iterator itr; U32 savePos = stream->getPosition(); U32 numFields = fieldList.size(); stream->write(numFields); for(itr = fieldList.begin();itr != fieldList.end();itr++) { if( itr->type >= AbstractClassRep::ARCFirstCustomField ) { numFields--; continue; } const char *field = getDataField(itr->pFieldname, NULL); if(field == NULL) field = ""; stream->writeString(itr->pFieldname); stream->writeString(field); } // Dynamic Fields if(mCanSaveFieldDictionary) { SimFieldDictionary * fieldDictionary = getFieldDictionary(); for(SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) { SimFieldDictionary::Entry * entry = (*ditr); stream->writeString(entry->slotName); stream->writeString(entry->value); numFields++; } } // Overwrite the number of fields with the correct value U32 savePos2 = stream->getPosition(); stream->setPosition(savePos); stream->write(numFields); stream->setPosition(savePos2); return true; }
//----------------------------------------------------------------------------- // GuiInspectorDynamicGroup - inspectGroup override //----------------------------------------------------------------------------- bool GuiInspectorDynamicGroup::inspectGroup() { // clear the first responder if it's set mStack->clearFirstResponder(); // Clearing the fields and recreating them will more than likely be more // efficient than looking up existent fields, updating them, and then iterating // over existent fields and making sure they still exist, if not, deleting them. clearFields(); // Create a vector of the fields Vector< FieldEntry > flist; const U32 numTargets = mParent->getNumInspectObjects(); for( U32 i = 0; i < numTargets; ++ i ) { SimObject* target = mParent->getInspectObject( i ); // Then populate with fields SimFieldDictionary * fieldDictionary = target->getFieldDictionary(); for(SimFieldDictionaryIterator ditr(fieldDictionary); *ditr; ++ditr) { if( i == 0 ) { flist.increment(); flist.last().mEntry = *ditr; flist.last().mNumTargets = 1; } else { const U32 numFields = flist.size(); for( U32 n = 0; n < numFields; ++ n ) if( flist[ n ].mEntry->slotName == ( *ditr )->slotName ) { flist[ n ].mNumTargets ++; break; } } } } dQsort( flist.address(), flist.size(), sizeof( FieldEntry ), compareEntries ); for(U32 i = 0; i < flist.size(); i++) { if( flist[ i ].mNumTargets != numTargets ) continue; SimFieldDictionary::Entry* entry = flist[i].mEntry; // Create a dynamic field inspector. Can't reuse typed GuiInspectorFields as // these rely on AbstractClassRep::Fields. GuiInspectorDynamicField *field = new GuiInspectorDynamicField( mParent, this, entry ); // Register the inspector field and add it to our lists if( field->registerObject() ) { mChildren.push_back( field ); mStack->addObject( field ); } else delete field; } mStack->pushObjectToBack(mAddCtrl); setUpdate(); return true; }