diff options
| author | linencloth <none@none> | 2010-10-21 16:56:51 +0200 |
|---|---|---|
| committer | linencloth <none@none> | 2010-10-21 16:56:51 +0200 |
| commit | d9d1ec3670ce4498b22025973fa126e5e3c2ab48 (patch) | |
| tree | 53f1ffd4ec3e3247f4b5af4bddf6207268b07eaf /src/server/game/Entities | |
| parent | f275f8b4b580b48f8ff7804d2079d6cd83842cda (diff) | |
Core: optimize string splitting
- Mainly affects item loading performance
- Reduces guild loading time a lot
--HG--
branch : trunk
Diffstat (limited to 'src/server/game/Entities')
| -rwxr-xr-x | src/server/game/Entities/Item/Item.cpp | 4 | ||||
| -rwxr-xr-x | src/server/game/Entities/Object/Object.cpp | 20 | ||||
| -rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 16 | ||||
| -rwxr-xr-x | src/server/game/Entities/Unit/Unit.cpp | 6 |
4 files changed, 19 insertions, 27 deletions
diff --git a/src/server/game/Entities/Item/Item.cpp b/src/server/game/Entities/Item/Item.cpp index 55d5c80889c..68be75501ae 100755 --- a/src/server/game/Entities/Item/Item.cpp +++ b/src/server/game/Entities/Item/Item.cpp @@ -418,10 +418,10 @@ bool Item::LoadFromDB(uint32 guid, uint64 owner_guid, Field* fields, uint32 entr need_save = true; } - Tokens tokens = StrSplit(fields[4].GetString(), " "); + Tokens tokens(fields[4].GetString(), ' ', MAX_ITEM_PROTO_SPELLS); if (tokens.size() == MAX_ITEM_PROTO_SPELLS) for (uint8 i = 0; i < MAX_ITEM_PROTO_SPELLS; ++i) - SetSpellCharges(i, atoi(tokens[i].c_str())); + SetSpellCharges(i, atoi(tokens[i])); SetUInt32Value(ITEM_FIELD_FLAGS, fields[5].GetUInt32()); // Remove bind flag for items vs NO_BIND set diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 7c5768a80e0..868443031ae 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -764,17 +764,13 @@ bool Object::LoadValues(const char* data) { if (!m_uint32Values) _InitValues(); - Tokens tokens = StrSplit(data, " "); + Tokens tokens(data, ' '); if (tokens.size() != m_valuesCount) return false; - Tokens::iterator iter; - int index; - for (iter = tokens.begin(), index = 0; index < m_valuesCount; ++iter, ++index) - { - m_uint32Values[index] = atol((*iter).c_str()); - } + for (uint16 index = 0; index < m_valuesCount; ++index) + m_uint32Values[index] = atol(tokens[index]); return true; } @@ -784,17 +780,13 @@ void Object::_LoadIntoDataField(const char* data, uint32 startOffset, uint32 cou if (!data) return; - Tokens tokens = StrSplit(data, " "); + Tokens tokens(data, ' ', count); if (tokens.size() != count) return; - Tokens::iterator iter; - uint32 index; - for (iter = tokens.begin(), index = 0; index < count; ++iter, ++index) - { - m_uint32Values[startOffset + index] = atol((*iter).c_str()); - } + for (uint32 index = 0; index < count; ++index) + m_uint32Values[startOffset + index] = atol(tokens[index]); } void Object::_SetUpdateBits(UpdateMask *updateMask, Player* /*target*/) const diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 53c5f0f2aa2..085b18c2feb 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -183,7 +183,7 @@ void PlayerTaxi::InitTaxiNodesForLevel(uint32 race, uint32 chrClass, uint8 level void PlayerTaxi::LoadTaxiMask(const char* data) { - Tokens tokens = StrSplit(data, " "); + Tokens tokens(data, ' '); uint8 index; Tokens::iterator iter; @@ -191,7 +191,7 @@ void PlayerTaxi::LoadTaxiMask(const char* data) (index < TaxiMaskSize) && (iter != tokens.end()); ++iter, ++index) { // load and set bits only for existed taxi nodes - m_taximask[index] = sTaxiNodesMask[index] & uint32(atol((*iter).c_str())); + m_taximask[index] = sTaxiNodesMask[index] & uint32(atol(*iter)); } } @@ -213,11 +213,11 @@ bool PlayerTaxi::LoadTaxiDestinationsFromString(const std::string& values, uint3 { ClearTaxiDestinations(); - Tokens tokens = StrSplit(values," "); + Tokens tokens(values,' '); for (Tokens::iterator iter = tokens.begin(); iter != tokens.end(); ++iter) { - uint32 node = uint32(atol(iter->c_str())); + uint32 node = uint32(atol(*iter)); AddTaxiDestination(node); } @@ -1697,7 +1697,7 @@ bool Player::BuildEnumData(QueryResult result, WorldPacket * p_data) *p_data << uint32(petFamily); } - Tokens data = StrSplit(fields[19].GetString(), " "); + Tokens data(fields[19].GetString(), ' '); for (uint8 slot = 0; slot < EQUIPMENT_SLOT_END; ++slot) { uint32 visualbase = slot * 2; @@ -15997,7 +15997,7 @@ uint32 Player::GetUInt32ValueFromArray(Tokens const& data, uint16 index) if (index >= data.size()) return 0; - return (uint32)atoi(data[index].c_str()); + return (uint32)atoi(data[index]); } float Player::GetFloatValueFromArray(Tokens const& data, uint16 index) @@ -16953,10 +16953,10 @@ void Player::_LoadInventory(PreparedQueryResult result, uint32 timediff) { Field* fields2 = result2->Fetch(); std::string strGUID = fields2[0].GetString(); - Tokens GUIDlist = StrSplit(strGUID, " "); + Tokens GUIDlist(strGUID, ' '); AllowedLooterSet looters; for (Tokens::iterator itr = GUIDlist.begin(); itr != GUIDlist.end(); ++itr) - looters.insert(atol((*itr).c_str())); + looters.insert(atol(*itr)); item->SetSoulboundTradeable(&looters, this, true); m_itemSoulboundTradeable.push_back(item); } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 5b155a2879e..5981c8ea9af 100755 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -13806,7 +13806,7 @@ void CharmInfo::LoadPetActionBar(const std::string& data) { InitPetActionBar(); - Tokens tokens = StrSplit(data, " "); + Tokens tokens(data, ' '); if (tokens.size() != (ACTION_BAR_INDEX_END-ACTION_BAR_INDEX_START)*2) return; // non critical, will reset to default @@ -13816,9 +13816,9 @@ void CharmInfo::LoadPetActionBar(const std::string& data) for (iter = tokens.begin(), index = ACTION_BAR_INDEX_START; index < ACTION_BAR_INDEX_END; ++iter, ++index) { // use unsigned cast to avoid sign negative format use at long-> ActiveStates (int) conversion - ActiveStates type = ActiveStates(atol(iter->c_str())); + ActiveStates type = ActiveStates(atol(*iter)); ++iter; - uint32 action = uint32(atol(iter->c_str())); + uint32 action = uint32(atol(*iter)); PetActionBar[index].SetActionAndType(action, type); |
