diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 25040b7a3d9335665dde4f62edc62b296e858515..68cd2b216975d807df8ec96a3e4f3c1e8394329f 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.cpp @@ -225,11 +225,12 @@ S32 LLAvatarTracker::addBuddyList(const buddy_map_t& buds) for(buddy_map_t::const_iterator itr = buds.begin(); itr != buds.end(); ++itr) { agent_id = (*itr).first; - buddy_map_t::const_iterator existing_buddy = mBuddyInfo.find(agent_id); + auto existing_buddy = mBuddyInfo.find(agent_id); if(existing_buddy == mBuddyInfo.end()) { ++new_buddy_count; - mBuddyInfo[agent_id] = (*itr).second; + auto buddy = (*itr).second; + auto it = mBuddyInfo.emplace(agent_id, buddy); // pre-request name for notifications? LLAvatarName av_name; @@ -237,9 +238,9 @@ S32 LLAvatarTracker::addBuddyList(const buddy_map_t& buds) addChangedMask(LLFriendObserver::ADD, agent_id); LL_DEBUGS() << "Added buddy " << agent_id - << ", " << (mBuddyInfo[agent_id]->isOnline() ? "Online" : "Offline") - << ", TO: " << mBuddyInfo[agent_id]->getRightsGrantedTo() - << ", FROM: " << mBuddyInfo[agent_id]->getRightsGrantedFrom() + << ", " << (buddy->isOnline() ? "Online" : "Offline") + << ", TO: " << buddy->getRightsGrantedTo() + << ", FROM: " << buddy->getRightsGrantedFrom() << LL_ENDL; } else @@ -261,12 +262,8 @@ S32 LLAvatarTracker::addBuddyList(const buddy_map_t& buds) void LLAvatarTracker::copyBuddyList(buddy_map_t& buddies) const { - buddy_map_t::const_iterator it = mBuddyInfo.begin(); - buddy_map_t::const_iterator end = mBuddyInfo.end(); - for(; it != end; ++it) - { - buddies[(*it).first] = (*it).second; - } + if(!mBuddyInfo.empty()) + buddies.insert(mBuddyInfo.begin(), mBuddyInfo.end()); } void LLAvatarTracker::terminateBuddy(const LLUUID& id) @@ -297,8 +294,7 @@ const LLRelationship* LLAvatarTracker::getBuddyInfo(const LLUUID& id) const bool LLAvatarTracker::isBuddy(const LLUUID& id) const { - LLRelationship* info = get_ptr_in_map(mBuddyInfo, id); - return (info != nullptr); + return (mBuddyInfo.find(id) != mBuddyInfo.end()); } // online status @@ -538,11 +534,9 @@ void LLAvatarTracker::addChangedMask(U32 mask, const LLUUID& referent) void LLAvatarTracker::applyFunctor(LLRelationshipFunctor& f) { - buddy_map_t::iterator it = mBuddyInfo.begin(); - buddy_map_t::iterator end = mBuddyInfo.end(); - for(; it != end; ++it) + for(auto& pair : mBuddyInfo) { - f((*it).first, (*it).second); + f(pair.first, pair.second); } } @@ -611,16 +605,19 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg) msg->getS32Fast(_PREHASH_Rights,_PREHASH_RelatedRights, new_rights, i); if(agent_id == gAgent.getID()) { - if(mBuddyInfo.find(agent_related) != mBuddyInfo.end()) + auto buddy_it = mBuddyInfo.find(agent_related); + if(buddy_it != mBuddyInfo.end()) { - (mBuddyInfo[agent_related])->setRightsTo(new_rights); + + buddy_it->second->setRightsTo(new_rights); } } else { + auto buddy_it = mBuddyInfo.find(agent_id); if(mBuddyInfo.find(agent_id) != mBuddyInfo.end()) { - S32 change = mBuddyInfo[agent_id]->getRightsGrantedFrom() ^ new_rights; + S32 change = buddy_it->second->getRightsGrantedFrom() ^ new_rights; if (change) { LLSD args = LLSD().with("NAME", LLSLURL("agent", agent_id, "displayname").getSLURLString()); @@ -636,7 +633,7 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg) ? "GrantedMapRights" : "RevokedMapRights", args, payload); } } - (mBuddyInfo[agent_id])->setRightsFrom(new_rights); + buddy_it->second->setRightsFrom(new_rights); } } } @@ -739,13 +736,12 @@ void LLAvatarTracker::formFriendship(const LLUUID& id) { if(id.notNull()) { - LLRelationship* buddy_info = get_ptr_in_map(mBuddyInfo, id); - if(!buddy_info) + if(mBuddyInfo.find(id) == mBuddyInfo.end()) { //The default for relationship establishment is to have both parties //visible online to each other. - buddy_info = new LLRelationship(LLRelationship::GRANT_ONLINE_STATUS,LLRelationship::GRANT_ONLINE_STATUS, false); - mBuddyInfo[id] = buddy_info; + auto buddy_info = new LLRelationship(LLRelationship::GRANT_ONLINE_STATUS,LLRelationship::GRANT_ONLINE_STATUS, false); + mBuddyInfo.emplace(id, buddy_info); addChangedMask(LLFriendObserver::ADD, id); notifyObservers(); } @@ -759,9 +755,10 @@ void LLAvatarTracker::processTerminateFriendship(LLMessageSystem* msg, void**) if(id.notNull()) { LLAvatarTracker& at = LLAvatarTracker::instance(); - LLRelationship* buddy = get_ptr_in_map(at.mBuddyInfo, id); - if(!buddy) return; - at.mBuddyInfo.erase(id); + auto it = at.mBuddyInfo.find(id); + if (it == at.mBuddyInfo.end()) return; + auto buddy = it->second; + at.mBuddyInfo.erase(it); at.addChangedMask(LLFriendObserver::REMOVE, id); delete buddy; at.notifyObservers(); @@ -854,12 +851,11 @@ bool LLCollectProxyBuddies::operator()(const LLUUID& buddy_id, LLRelationship* b bool LLCollectMappableBuddies::operator()(const LLUUID& buddy_id, LLRelationship* buddy) { - LLAvatarName av_name; - LLAvatarNameCache::get( buddy_id, &av_name); - buddy_map_t::value_type value(buddy_id, av_name.getDisplayName()); if(buddy->isOnline() && buddy->isRightGrantedFrom(LLRelationship::GRANT_MAP_LOCATION)) { - mMappable.insert(value); + LLAvatarName av_name; + LLAvatarNameCache::get(buddy_id, &av_name); + mMappable.emplace(buddy_id, av_name.getDisplayName()); } return true; } @@ -869,10 +865,9 @@ bool LLCollectOnlineBuddies::operator()(const LLUUID& buddy_id, LLRelationship* LLAvatarName av_name; LLAvatarNameCache::get(buddy_id, &av_name); mFullName = av_name.getUserName(); - buddy_map_t::value_type value(buddy_id, mFullName); if(buddy->isOnline()) { - mOnline.insert(value); + mOnline.emplace(buddy_id, mFullName); } return true; } @@ -882,14 +877,13 @@ bool LLCollectAllBuddies::operator()(const LLUUID& buddy_id, LLRelationship* bud LLAvatarName av_name; LLAvatarNameCache::get(buddy_id, &av_name); mFullName = av_name.getCompleteName(); - buddy_map_t::value_type value(buddy_id, mFullName); if(buddy->isOnline()) { - mOnline.insert(value); + mOnline.emplace(buddy_id, mFullName); } else { - mOffline.insert(value); + mOffline.emplace(buddy_id, mFullName); } return true; } diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h index 453ed3984b0f338d4cedc46eb424f3dca4ecf7de..bc30578d829da7da2f962f66af32cce105126f86 100644 --- a/indra/newview/llcallingcard.h +++ b/indra/newview/llcallingcard.h @@ -32,6 +32,8 @@ #include "lluuid.h" #include "v3dmath.h" +#include "absl/container/flat_hash_map.h" + class LLMessageSystem; class LLTrackingData;