RepXCollection& RepXUpgrader::upgradeCollection(RepXCollection& src) { RepXCollection* dest = NULL; const char* srcVersion = src.getVersion(); if ( safeStrEq( src.getVersion(), RepXCollection::getLatestVersion() ) ) return src; else { if ( safeStrEq( srcVersion, "1.0" ) || safeStrEq( srcVersion, "3.1" ) ) dest = &upgrade10CollectionTo3_1Collection( src ); else PX_ASSERT( false ); } return *dest; }
RepXCollection& RepXUpgrader::upgradeCollection(RepXCollection& src) { const char* srcVersion = src.getVersion(); if( safeStrEq( srcVersion, RepXCollection::getLatestVersion() )) return src; static const char* oldVersions[] = {"1.0", "3.1", "3.1.1", "3.2.0", "3.3.0", "3.3.1" };//should be increase order PxU32 grade = PX_MAX_U16; const PxU32 count = sizeof(oldVersions)/sizeof(oldVersions[0]); for (PxU32 i=0; i<count; i++) { if( safeStrEq( srcVersion, oldVersions[i] )) { grade = i; break; } } typedef RepXCollection& (*UPGRADE_FUNCTION)(RepXCollection& src); UPGRADE_FUNCTION procs[count] = { upgrade10CollectionTo3_1Collection, NULL, upgrade3_1CollectionTo3_2Collection, upgrade3_2CollectionTo3_3Collection, NULL, NULL }; RepXCollection* dest = &src; for( PxU32 j = grade; j < count; j++ ) { if( procs[j] ) dest = &(procs[j])(*dest); } return *dest; }