AbstractProperty * PropertyGroup::takeProperty(const std::string & name) { // Check if property exists in this group if (!this->propertyExists(name)) { return nullptr; } // Get property and property index AbstractProperty * property = m_propertiesMap.at(name); auto it = std::find(m_properties.begin(), m_properties.end(), property); size_t index = indexOf( (*it) ); // Invoke callback beforeRemove(index); // Remove property from group m_properties.erase(it); m_propertiesMap.erase(name); // Invoke callback afterRemove(index); // Return property return property; }
void PropertyGroup::clear() { // Remove all properties auto it = m_properties.begin(); while (it != m_properties.end()) { // Get property index size_t index = std::distance(m_properties.begin(), it); // Invoke callback beforeRemove(index); // Delete property if (m_ownsProperties) { AbstractProperty * property = *it; delete property; } // Remove property m_propertiesMap.erase((*it)->name()); it = m_properties.erase(it); // Invoke callback afterRemove(index); } // Make sure that property list is empty assert(m_properties.empty()); assert(m_propertiesMap.empty()); }
bool GuildManager::process(std::string msg) { if (msg.size() > 4 && msg[0] == '#' && msg[1] == '#') msg = msg.substr(3); bool haveNick = (msg.find(": ") != std::string::npos); if (!haveNick && findCutLast(msg, " is now Offline.")) { Guild *guild = createGuild(); if (!guild) return false; if (msg.size() < 4) return false; if (msg[0] == '#' && msg[1] == '#') msg = msg.substr(3); GuildMember *m = guild->addMember(msg); if (m) m->setOnline(false); guild->sort(); mRequest = false; return true; } else if (!haveNick && findCutLast(msg, " is now Online.")) { Guild *guild = createGuild(); if (!guild) return false; if (msg.size() < 4) return false; if (msg[0] == '#' && msg[1] == '#') msg = msg.substr(3); GuildMember *m = guild->addMember(msg); if (m) m->setOnline(true); guild->sort(); mRequest = false; return true; } else if (findCutFirst(msg, "Welcome to the ")) { Guild *guild = createGuild(); if (!guild) return false; // logger->log("welcome message: %s", msg.c_str()); size_t pos = msg.find("! ("); if (pos == std::string::npos) return false; msg = msg.substr(0, pos); guild->setName(msg); if (player_node) player_node->setGuildName(msg); mGotName = true; mSentNameRequest = false; mRequest = false; return true; } else if (findCutFirst(msg, "Player name: ")) { Guild *guild = createGuild(); if (!guild) return false; size_t pos = msg.find("Access Level: "); if (pos == std::string::npos) return false; msg = msg.substr(pos); if (!findCutFirst(msg, "Access Level: ")) return false; pos = msg.find(", Guild:"); if (pos == std::string::npos) return false; int level = atoi(msg.substr(0, pos).c_str()); if (level >= 10) mHavePower = true; else mHavePower = false; msg = msg.substr(pos + strlen(", Guild:")); pos = msg.find(", No. Of Online Players: "); if (pos == std::string::npos) return false; msg = msg.substr(0, pos); // logger->log("guild name: %s", msg.c_str()); guild->setName(msg); if (player_node) player_node->setGuildName(msg); mGotName = true; mSentNameRequest = false; mRequest = false; return true; } else if (findCutFirst(msg, "OL#")) { // logger->log("OL"); mTempList.clear(); splitToStringVector(mTempList, msg, '#'); if (msg.size() < 1 || msg[msg.size() - 1] != '#') updateList(); mRequest = false; return true; } else if (findCutFirst(msg, "oL#")) { // logger->log("oL"); splitToStringVector(mTempList, msg, '#'); if (msg.size() < 1 || msg[msg.size() - 1] != '#') updateList(); mRequest = false; return true; } else if (msg == "You are currently not in a guild. For more information " "or to discuss the possibility of adding you own guild " "please contact Jero.") { mRequest = true; return true; } else if (findCutFirst(msg, "You have been invited to the ") && findCutLast(msg, " guild chat. If you would like to accept " "this invitation please reply \"yes\" and if not then \"no\" .")) { if (socialWindow) socialWindow->showGuildInvite(msg, 1, ""); return true; } else if (!haveNick && (findCutLast(msg, " has been removed " "from the Guild.") || findCutLast(msg, " has left the Guild."))) { Guild *guild = createGuild(); if (!guild) return false; if (msg.size() < 4) return false; if (msg[0] == '#' && msg[1] == '#') msg = msg.substr(3); if (actorSpriteManager) { Being *b = actorSpriteManager->findBeingByName( msg, Being::PLAYER); if (b) { b->clearGuilds(); b->setGuildName(""); b->updateColors(); } } guild->removeMember(msg); return true; } else if (msg == "You have been removed from the Guild" || msg == "You have left the Guild") { return afterRemove(); } else { Guild *guild = createGuild(); if (!guild) return false; if (!mTab) { createTab(guild); } if (mTab) { size_t pos = msg.find(": ", 0); if (pos != std::string::npos) { std::string sender_name = ((pos == std::string::npos) ? "" : msg.substr(0, pos)); if (!guild->getMember(sender_name)) { mTab->chatLog(msg); return true; } msg.erase(0, pos + 2); if (msg.size() > 3 && msg[0] == '#' && msg[1] == '#') msg.erase(0, 3); trim(msg); mTab->chatLog(sender_name, msg); } else { mTab->chatLog(msg); } return true; } } return false; }