Changeset 6364
- Timestamp:
- 07/01/08 03:07:09 (2 months ago)
- Location:
- trunk/licq
- Files:
-
- 2 modified
-
include/licq_user.h (modified) (9 diffs)
-
src/user.cpp (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/licq/include/licq_user.h
r6363 r6364 33 33 { \ 34 34 ICQUser *pUser; \ 35 UserList *_ul_ = gUserManager.LockUserList(LOCK_R);\36 for (User List::iterator _i_ = _ul_->begin();\35 const UserMap* _ul_ = gUserManager.LockUserList(LOCK_R); \ 36 for (UserMap::const_iterator _i_ = _ul_->begin(); \ 37 37 _i_ != _ul_->end(); _i_++) \ 38 38 { \ 39 pUser = *_i_;\39 pUser = _i_->second; \ 40 40 pUser->Lock(x); \ 41 41 { … … 44 44 { \ 45 45 ICQUser *pUser; \ 46 UserList *_ul_ = gUserManager.LockUserList(LOCK_R);\47 for (User List::iterator _i_ = _ul_->begin();\46 const UserMap* _ul_ = gUserManager.LockUserList(LOCK_R); \ 47 for (UserMap::const_iterator _i_ = _ul_->begin(); \ 48 48 _i_ != _ul_->end(); _i_++) \ 49 49 { \ 50 pUser = *_i_;\51 if (pUser->PPID() == x)\52 {\53 pUser->Lock(y);\54 {50 if (_i_->first.second != x) \ 51 continue; \ 52 pUser = _i_->second; \ 53 pUser->Lock(y); \ 54 { 55 55 56 56 #define FOR_EACH_OWNER_START(x) \ … … 85 85 } 86 86 87 #define FOR_EACH_PROTO_USER_END \ 88 } \ 89 pUser->Unlock(); \ 90 } \ 91 } \ 92 gUserManager.UnlockUserList(); \ 93 } 87 #define FOR_EACH_PROTO_USER_END FOR_EACH_USER_END 94 88 95 89 #define FOR_EACH_USER_BREAK \ … … 178 172 { \ 179 173 unsigned long nUin; \ 180 UserList *_ul_ = gUserManager.LockUserList(LOCK_R);\181 for (User List::iterator _i_ = _ul_->begin();\174 const UserMap* _ul_ = gUserManager.LockUserList(LOCK_R); \ 175 for (UserMap::const_iterator _i_ = _ul_->begin(); \ 182 176 _i_ != _ul_->end(); _i_++) \ 183 177 { \ 184 nUin = (*_i_)->Uin();\178 nUin = _i_->second->Uin(); \ 185 179 { 186 180 … … 188 182 { \ 189 183 char *szId; \ 190 User List *_ul_ = gUserManager.LockUserList(LOCK_R);\191 for (User List::iterator _i_ = _ul_->begin();\184 UserMap* _ul_ = gUserManager.LockUserList(LOCK_R); \ 185 for (UserMap::const_iterator _i_ = _ul_->begin(); \ 192 186 _i_ != _ul_->end(); _i_++) \ 193 187 { \ 194 if ( (*_i_)->PPID() == x)\195 {\196 szId = (*_i_)->IdString();\197 {188 if (_i_->first.second != x) \ 189 continue; \ 190 szId = (*_i_)->IdString(); \ 191 { 198 192 199 193 #define FOR_EACH_UIN_END \ … … 203 197 } 204 198 205 #define FOR_EACH_PROTO_ID_END \ 206 } \ 207 } \ 208 } \ 209 gUserManager.UnlockUserList(); \ 210 } 199 #define FOR_EACH_PROTO_ID_END FOR_EACH_UIN_END 211 200 212 201 #define FOR_EACH_UIN_BREAK \ … … 236 225 typedef std::pair<std::string, unsigned long> UserMapKey; 237 226 typedef std::map<UserMapKey, class ICQUser*> UserMap; 238 typedef std::list<ICQUser *> UserList;239 227 typedef std::list<class ICQOwner *> OwnerList; 240 228 typedef std::set<unsigned short> UserGroupList; … … 1290 1278 bool IsOnList(unsigned long nUin); 1291 1279 1292 UserList *LockUserList(unsigned short); 1280 /** 1281 * Lock user list for access 1282 * call UnlockUserList when lock is no longer needed 1283 * 1284 * @param lockType Type of lock (LOCK_R or LOCK_W) 1285 * @return Map of all users indexed by UserMapKey 1286 */ 1287 UserMap* LockUserList(unsigned short lockType); 1288 1289 /** 1290 * Release user list lock 1291 */ 1293 1292 void UnlockUserList(); 1294 1293 … … 1486 1485 1487 1486 GroupMap myGroups; 1488 UserList m_vpcUsers;1489 1487 UserMap myUsers; 1490 1488 OwnerList m_vpcOwners; -
trunk/licq/src/user.cpp
r6363 r6364 510 510 CUserManager::~CUserManager() 511 511 { 512 UserList::iterator iter; 513 for (iter = m_vpcUsers.begin(); iter != m_vpcUsers.end(); ++iter) 514 { 515 delete *iter; 516 } 512 UserMap::iterator iter; 513 for (iter = myUsers.begin(); iter != myUsers.end(); ++iter) 514 delete iter->second; 517 515 518 516 GroupMap::iterator g_iter; … … 681 679 u->AddToContactList(); 682 680 myUsers[UserMapKey(szId, nPPID)] = u; 683 m_vpcUsers.push_back(u);684 681 } 685 682 UnlockUserList(); … … 715 712 // Store the user in the lookup map 716 713 myUsers[UserMapKey(_szId, _nPPID)] = pUser; 717 // Reorder the user to the correct place718 m_vpcUsers.push_back(pUser);719 714 720 715 UnlockUserList(); … … 728 723 u->RemoveFiles(); 729 724 LockUserList(LOCK_W); 730 UserList::iterator iter = m_vpcUsers.begin();731 while (iter != m_vpcUsers.end() && u != (*iter)) ++iter;732 if (iter == m_vpcUsers.end())733 gLog.Warn("%sInteral Error: CUserManager::RemoveUser():\n"734 "%sUser \"%s\" (%s) not found in vector.\n",735 L_WARNxSTR, L_BLANKxSTR, u->GetAlias(), u->IdString());736 else737 m_vpcUsers.erase(iter);738 DropUser(u);739 725 myUsers.erase(UserMapKey(_szId, _nPPID)); 740 726 UnlockUserList(); 727 DropUser(u); 741 728 delete u; 742 729 } … … 1440 1427 { 1441 1428 //LockUserList(LOCK_R); 1442 unsigned short n = m _vpcUsers.size();1429 unsigned short n = myUsers.size(); 1443 1430 //UnlockUserList(); 1444 1431 return n; … … 1472 1459 * Locks the entire user list for iterating through... 1473 1460 *-------------------------------------------------------------------------*/ 1474 User List *CUserManager::LockUserList(unsigned short _nLockType)1461 UserMap* CUserManager::LockUserList(unsigned short _nLockType) 1475 1462 { 1476 1463 switch (_nLockType) … … 1487 1474 } 1488 1475 m_nUserListLockType = _nLockType; 1489 return &m _vpcUsers;1476 return &myUsers; 1490 1477 } 1491 1478
