// ============================================================================ // ============================================================================== __int64 GetMotionReducedIndex(__int64 i64Index, const std::map<int, int> &mapLookTrans, const std::map<int, int> &mapWeaponMotionTrans) { //~~~~~~~~~~~~~~~~~~ int nLook = 0; int nWeaponMotion = 0; //~~~~~~~~~~~~~~~~~~ GetIndexInfo(i64Index, nLook, nWeaponMotion); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const std::map<int, int>::const_iterator itLook = mapLookTrans.find(nLook); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (itLook == mapLookTrans.end()) { return 0; } nLook = itLook->second; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const std::map<int, int>::const_iterator itWeapon = mapWeaponMotionTrans.find(nWeaponMotion); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (itWeapon == mapWeaponMotionTrans.end()) { return 0; } nWeaponMotion = itWeapon->second; i64Index = ComboIndexInfo(nLook, nWeaponMotion); return i64Index; }
void TableProperties::GetIndexList() { char* sql = sqlite3_mprintf("PRAGMA index_list([%q]);", fTableName.String()); RecordSet* rs = GlobalSQLMgr->OpenRecordSet(sql); while(rs->Step()) { IndexProperties index; index.fName = BString(rs->ColumnText(1)); index.fIsUnique = (strcmp(rs->ColumnText(2), "0") ? true : false); GetIndexInfo(index); } rs->Close(); sqlite3_free(sql); }
// ============================================================================ // ============================================================================== bool AdvanceReduce(const std::map<__int64, std::string> &rMapOrgInfo, const std::vector<FORMAT_RES_DATA> &vecResData, std::map<__int64, std::string> &mapNewIndex, std::map<int, int> &mapLookTrans, std::map<int, int> &mapWeaponMotionTrans) { mapNewIndex.clear(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::vector<FORMAT_RES_DATA>::const_iterator it = vecResData.begin(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (; it != vecResData.end(); ++it) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const FORMAT_RES_DATA &rData = *it; const std::vector<__int64> &rVecIndex = rData.vecIndex; __int64 i64IndexRes = ResPathTransIndex(rData.strRes); bool bIndexResOk = true; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (i64IndexRes <= 0) { bIndexResOk = false; } if (bIndexResOk) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::map<__int64, std::string>::const_iterator it = rMapOrgInfo.find(i64IndexRes); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (it == rMapOrgInfo.end() || it->second != rData.strRes) { bIndexResOk = false; } } if (!bIndexResOk) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::vector<__int64>::const_iterator itIndex = rVecIndex.begin(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (; itIndex != rVecIndex.end(); ++itIndex) { //~~~~~~~~~~~~~~~~~~~~~~~~ __int64 i64Index = *itIndex; //~~~~~~~~~~~~~~~~~~~~~~~~ if (REDUCE_VERSION > 1) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ __int64 i64IndexRuleTrans = MountRuleTrans(i64Index); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (i64IndexRuleTrans != i64Index) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const std::map<__int64, std::string>::const_iterator itRule = rMapOrgInfo.find(i64IndexRuleTrans); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (itRule != rMapOrgInfo.end() && itRule->second == rData.strRes) { continue; } } } mapNewIndex[i64Index] = rData.strRes; } } else { mapNewIndex[i64IndexRes] = rData.strRes; //~~~~~~~~~~~~~~~~~~~~~ int nResLook = 0; int nResWeaponMotion = 0; //~~~~~~~~~~~~~~~~~~~~~ GetIndexInfo(i64IndexRes, nResLook, nResWeaponMotion); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::vector<__int64>::const_iterator itIndex = rVecIndex.begin(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (; itIndex != rVecIndex.end(); ++itIndex) { //~~~~~~~~~~~~~~~~~~~~~~~~ int nIndexLook = 0; int nIndexWeaponMotion = 0; __int64 i64Index = *itIndex; //~~~~~~~~~~~~~~~~~~~~~~~~ if (REDUCE_VERSION > 1) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ __int64 i64IndexRuleTrans = MountRuleTrans(i64Index); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (i64IndexRuleTrans != i64Index) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const std::map<__int64, std::string>::const_iterator itRule = rMapOrgInfo.find(i64IndexRuleTrans); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (itRule != rMapOrgInfo.end() && itRule->second == rData.strRes) { continue; } } } GetIndexInfo(i64Index, nIndexLook, nIndexWeaponMotion); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::map<int, int>::const_iterator itFind; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ itFind = mapLookTrans.find(nIndexLook); if (itFind == mapLookTrans.end()) { mapLookTrans[nIndexLook] = nResLook; } if (mapLookTrans[nIndexLook] != nResLook) { mapNewIndex[i64Index] = rData.strRes; continue; } itFind = mapWeaponMotionTrans.find(nIndexWeaponMotion); if (itFind == mapWeaponMotionTrans.end()) { mapWeaponMotionTrans[nIndexWeaponMotion] = nResWeaponMotion; } if (mapWeaponMotionTrans[nIndexWeaponMotion] != nResWeaponMotion) { mapNewIndex[i64Index] = rData.strRes; } } } } printf("ReduceVer %d End %d %d %d\n", REDUCE_VERSION, mapNewIndex.size(), mapLookTrans.size(), mapWeaponMotionTrans.size()); return true; }
// ============================================================================ // ============================================================================== bool CalcTransTable(const std::vector<FORMAT_RES_DATA> &vecResData, std::map<int, int> &mapLookTrans, std::map<int, int> &mapWeaponMotionTrans) { mapLookTrans.clear(); mapWeaponMotionTrans.clear(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::vector<FORMAT_RES_DATA>::const_iterator it = vecResData.begin(); std::map<int, std::map<int, int> > mapLookTransCount; std::map<int, std::map<int, int> > mapWeaponMotionTransCount; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (; it != vecResData.end(); ++it) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ const FORMAT_RES_DATA &rData = *it; const std::vector<__int64> &rVecIndex = rData.vecIndex; __int64 i64IndexRes = ResPathTransIndex(rData.strRes); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (i64IndexRes > 0) { //~~~~~~~~~~~~~~~~~~~~~ int nResLook = 0; int nResWeaponMotion = 0; //~~~~~~~~~~~~~~~~~~~~~ GetIndexInfo(i64IndexRes, nResLook, nResWeaponMotion); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::vector<__int64>::const_iterator itIndex = rVecIndex.begin(); //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (; itIndex != rVecIndex.end(); ++itIndex) { //~~~~~~~~~~~~~~~~~~~~~~~~ int nIndexLook = 0; int nIndexWeaponMotion = 0; __int64 i64Index = *itIndex; //~~~~~~~~~~~~~~~~~~~~~~~~ GetIndexInfo(i64Index, nIndexLook, nIndexWeaponMotion); ++mapLookTransCount[nIndexLook][nResLook]; ++mapWeaponMotionTransCount[nIndexWeaponMotion][nResWeaponMotion]; } } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::map<int, std::map<int, int> >::const_iterator itMap; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (itMap = mapLookTransCount.begin(); itMap != mapLookTransCount.end(); ++itMap) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::map<int, int>::const_iterator it; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (it = itMap->second.begin(); it != itMap->second.end(); ++it) { mapLookTrans[itMap->first] = CalMapMaxSecondFirst(itMap->second); } } for (itMap = mapWeaponMotionTransCount.begin(); itMap != mapWeaponMotionTransCount.end(); ++itMap) { //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ std::map<int, int>::const_iterator it; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ for (it = itMap->second.begin(); it != itMap->second.end(); ++it) { mapWeaponMotionTrans[itMap->first] = CalMapMaxSecondFirst(itMap->second); } } return true; }