diff --git a/src/common/stl.h b/src/common/stl.h index 75f4cc1..22b0409 100644 --- a/src/common/stl.h +++ b/src/common/stl.h @@ -1,5 +1,4 @@ -#ifndef __INC_METIN_II_STL_H__ -#define __INC_METIN_II_STL_H__ +#pragma once #include #include @@ -19,15 +18,15 @@ inline void stl_lowers(std::string& rstRet) { for (size_t i = 0; i < rstRet.length(); ++i) - rstRet[i] = tolower(rstRet[i]); + rstRet[i] = (char) tolower(rstRet[i]); } -struct stringhash +struct stringhash { size_t operator () (const std::string & str) const { - const unsigned char * s = (const unsigned char*) str.c_str(); - const unsigned char * end = s + str.size(); + const auto * s = (const unsigned char*) str.c_str(); + const auto * end = s + str.size(); size_t h = 0; while (s < end) @@ -39,98 +38,3 @@ struct stringhash return h; } }; - -// code from tr1/functional_hash.h -template -struct hash; - -template -struct hash<_Tp*> -: public std::unary_function<_Tp*, std::size_t> -{ - std::size_t - operator()(_Tp* __p) const - { return reinterpret_cast(__p); } -}; - -namespace std -{ - template - void erase_if (container & a, typename container::iterator first, typename container::iterator past, Pred pred) - { - while (first != past) - if (pred(*first)) - a.erase(first++); - else - ++first; - } - - template - void wipe(container & a) - { - typename container::iterator first, past; - - first = a.begin(); - past = a.end(); - - while (first != past) - delete *(first++); - - a.clear(); - } - - template - void wipe_second(container & a) - { - typename container::iterator first, past; - - first = a.begin(); - past = a.end(); - - while (first != past) - { - delete first->second; - ++first; - } - - a.clear(); - } - - template - class void_mem_fun_t : public unary_function<_Ty *, void> - { - public: - explicit void_mem_fun_t(void (_Ty::*_Pm)()) : _Ptr(_Pm) - { - } - - void operator()(_Ty* p) const - { - ((p->*_Ptr)()); - } - - private: - void (_Ty::*_Ptr)(); - }; - - template inline - void_mem_fun_t<_Ty> void_mem_fun(void (_Ty::*_Pm)()) - { return (void_mem_fun_t<_Ty>(_Pm)); } - - template - class void_mem_fun_ref_t : public unary_function<_Ty, void> - { - public: - explicit void_mem_fun_ref_t(void (_Ty::*_Pm)()) : _Ptr(_Pm) {} - void operator()(_Ty& x) const - { return ((x.*_Ptr)()); } - private: - void (_Ty::*_Ptr)(); - }; - - template inline - void_mem_fun_ref_t<_Ty> void_mem_fun_ref(void (_Ty::*_Pm)()) - { return (void_mem_fun_ref_t< _Ty>(_Pm)); } -}; - -#endif diff --git a/src/game/src/char_battle.cpp b/src/game/src/char_battle.cpp index 7a09363..799708a 100644 --- a/src/game/src/char_battle.cpp +++ b/src/game/src/char_battle.cpp @@ -1009,7 +1009,8 @@ void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller) if (!vec_bSlots.empty()) { - random_shuffle(vec_bSlots.begin(), vec_bSlots.end()); + unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::shuffle(vec_bSlots.begin(), vec_bSlots.end(), std::default_random_engine(seed)); int iQty = std::min(vec_bSlots.size(), r.iInventoryQty); @@ -1041,7 +1042,9 @@ void CHARACTER::ItemDropPenalty(LPCHARACTER pkKiller) if (!vec_bSlots.empty()) { - random_shuffle(vec_bSlots.begin(), vec_bSlots.end()); + unsigned seed = std::chrono::system_clock::now().time_since_epoch().count(); + std::shuffle(vec_bSlots.begin(), vec_bSlots.end(), std::default_random_engine(seed)); + int iQty; if (isDropAllEquipments) diff --git a/src/game/src/char_manager.cpp b/src/game/src/char_manager.cpp index 17e92d7..f293628 100644 --- a/src/game/src/char_manager.cpp +++ b/src/game/src/char_manager.cpp @@ -663,7 +663,7 @@ void CHARACTER_MANAGER::Update(int iPulse) else { //for_each(v.begin(), v.end(), mem_fun(&CFSM::Update)); - for_each(v.begin(), v.end(), bind2nd(mem_fun(&CHARACTER::UpdateCharacter), iPulse)); + for (auto& ch : v) ch->UpdateCharacter(iPulse); } } @@ -678,7 +678,7 @@ void CHARACTER_MANAGER::Update(int iPulse) v.reserve(m_set_pkChrState.size()); transform(m_set_pkChrState.begin(), m_set_pkChrState.end(), back_inserter(v), identity()); - for_each(v.begin(), v.end(), bind2nd(mem_fun(&CHARACTER::UpdateStateMachine), iPulse)); + for (auto& ch : v) ch->UpdateStateMachine(iPulse); } } @@ -688,8 +688,7 @@ void CHARACTER_MANAGER::Update(int iPulse) if (CHARACTER_MANAGER::instance().GetCharactersByRaceNum(xmas::MOB_SANTA_VNUM, i)) { - for_each(i.begin(), i.end(), - bind2nd(mem_fun(&CHARACTER::UpdateStateMachine), iPulse)); + for (auto& ch : i) ch->UpdateStateMachine(iPulse); } } diff --git a/src/game/src/guild.cpp b/src/game/src/guild.cpp index 254b709..711849c 100644 --- a/src/game/src/guild.cpp +++ b/src/game/src/guild.cpp @@ -618,15 +618,15 @@ void CGuild::Load(DWORD guild_id) m_data.guild_id = guild_id; - DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&CGuild::LoadGuildData), this), + DBManager::instance().FuncQuery([this](auto const& msg) { LoadGuildData(msg); }, "SELECT master, level, exp, name, skill_point, skill, sp, ladder_point, win, draw, loss, gold FROM guild%s WHERE id = %u", get_table_postfix(), m_data.guild_id); SPDLOG_DEBUG("GUILD: loading guild id {:>12} {}", m_data.name, guild_id); - DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&CGuild::LoadGuildGradeData), this), + DBManager::instance().FuncQuery([this](auto const& msg) { LoadGuildGradeData(msg); }, "SELECT grade, name, auth+0 FROM guild_grade%s WHERE guild_id = %u", get_table_postfix(), m_data.guild_id); - DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&CGuild::LoadGuildMemberData), this), + DBManager::instance().FuncQuery([this](auto const& msg) { LoadGuildMemberData(msg); }, "SELECT pid, grade, is_general, offer, level, job, name FROM guild_member%s, player%s WHERE guild_id = %u and pid = id", get_table_postfix(), get_table_postfix(), guild_id); } @@ -756,7 +756,7 @@ void CGuild::__P2PUpdateGrade(SQLMsg* pmsg) void CGuild::P2PChangeGrade(BYTE grade) { - DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&CGuild::__P2PUpdateGrade),this), + DBManager::instance().FuncQuery([this](auto const& msg) { __P2PUpdateGrade(msg); }, "SELECT grade, name, auth+0 FROM guild_grade%s WHERE guild_id = %u and grade = %d", get_table_postfix(), m_data.guild_id, grade); } @@ -1011,7 +1011,7 @@ void CGuild::AddComment(LPCHARACTER ch, const std::string& str) char text[GUILD_COMMENT_MAX_LEN * 2 + 1]; DBManager::instance().EscapeString(text, sizeof(text), str.c_str(), str.length()); - DBManager::instance().FuncAfterQuery(void_bind(std::bind1st(std::mem_fun(&CGuild::RefreshCommentForce),this),ch->GetPlayerID()), + DBManager::instance().FuncAfterQuery([this, ch]() { this->RefreshCommentForce(ch->GetPlayerID()); }, "INSERT INTO guild_comment%s(guild_id, name, notice, content, time) VALUES(%u, '%s', %d, '%s', NOW())", get_table_postfix(), m_data.guild_id, ch->GetName(), (str[0] == '!') ? 1 : 0, text); } @@ -1223,7 +1223,7 @@ void CGuild::SkillLevelUp(DWORD dwVnum) break; }*/ - for_each(m_memberOnline.begin(), m_memberOnline.end(), std::bind1st(std::mem_fun_ref(&CGuild::SendSkillInfoPacket),*this)); + for (auto& ch : m_memberOnline) SendSkillInfoPacket(ch); SPDLOG_DEBUG("Guild SkillUp: {} {} level {} type {}", GetName(), pkSk->dwVnum, m_data.abySkill[dwRealVnum], pkSk->dwType); } @@ -1482,7 +1482,7 @@ void CGuild::GuildPointChange(BYTE type, int amount, bool save) SaveSkill(); } - for_each(m_memberOnline.begin(), m_memberOnline.end(), std::bind1st(std::mem_fun_ref(&CGuild::SendSkillInfoPacket),*this)); + for (auto& ch : m_memberOnline) SendSkillInfoPacket(ch); break; case POINT_EXP: @@ -1513,7 +1513,7 @@ void CGuild::GuildPointChange(BYTE type, int amount, bool save) ChangeLadderPoint(GUILD_LADDER_POINT_PER_LEVEL); // NOTIFY_GUILD_EXP_CHANGE - for_each(m_memberOnline.begin(), m_memberOnline.end(), std::bind1st(std::mem_fun(&CGuild::SendGuildInfoPacket), this)); + for (auto& ch : m_memberOnline) SendGuildInfoPacket(ch); // END_OF_NOTIFY_GUILD_EXP_CHANGE } diff --git a/src/game/src/guild_manager.cpp b/src/game/src/guild_manager.cpp index 2212392..e66d16a 100644 --- a/src/game/src/guild_manager.cpp +++ b/src/game/src/guild_manager.cpp @@ -284,7 +284,7 @@ int CGuildManager::GetRank(CGuild* g) return rank; } -struct FGuildCompare : public std::binary_function +struct FGuildCompare { bool operator () (CGuild* g1, CGuild* g2) const { @@ -942,16 +942,13 @@ std::vector & CGuildManager::GetReserveWarRef() void CGuildManager::ChangeMaster(DWORD dwGID) { - TGuildMap::iterator iter = m_mapGuild.find(dwGID); + auto iter = m_mapGuild.find(dwGID); - if ( iter != m_mapGuild.end() ) - { + if (iter != m_mapGuild.end()) iter->second->Load(dwGID); - } // 업데이트된 정보 보내주기 - DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&CGuild::SendGuildDataUpdateToAllMember), iter->second), + DBManager::instance().FuncQuery([iter](auto const& msg) { iter->second->SendGuildDataUpdateToAllMember(msg); }, "SELECT 1"); - } diff --git a/src/game/src/input_db.cpp b/src/game/src/input_db.cpp index e0d2f07..a1b2ed0 100644 --- a/src/game/src/input_db.cpp +++ b/src/game/src/input_db.cpp @@ -1682,7 +1682,7 @@ void CInputDB::ReloadProto(const char * c_pData) CMotionManager::instance().Build(); - CHARACTER_MANAGER::instance().for_each_pc(std::mem_fun(&CHARACTER::ComputePoints)); + CHARACTER_MANAGER::instance().for_each_pc([](auto& pc) { pc->ComputePoints(); }); } void CInputDB::GuildSkillUsableChange(const char* c_pData) diff --git a/src/game/src/messenger_manager.cpp b/src/game/src/messenger_manager.cpp index 1d8641a..424067d 100644 --- a/src/game/src/messenger_manager.cpp +++ b/src/game/src/messenger_manager.cpp @@ -43,7 +43,7 @@ void MessengerManager::Login(MessengerManager::keyA account) if (m_set_loginAccount.find(account) != m_set_loginAccount.end()) return; - DBManager::instance().FuncQuery(std::bind1st(std::mem_fun(&MessengerManager::LoadList), this), + DBManager::instance().FuncQuery([this](auto const& msg) { LoadList(msg); }, "SELECT account, companion FROM messenger_list%s WHERE account='%s'", get_table_postfix(), account.c_str()); m_set_loginAccount.insert(account); diff --git a/src/game/src/mob_manager.cpp b/src/game/src/mob_manager.cpp index e6424a9..a860670 100644 --- a/src/game/src/mob_manager.cpp +++ b/src/game/src/mob_manager.cpp @@ -109,7 +109,7 @@ bool CMobManager::Initialize(TMobTable * pTable, int iSize) // END_OF_LOCALE_SERVICE //exit(EXIT_FAILURE); - CHARACTER_MANAGER::instance().for_each_pc(std::bind1st(std::mem_fun(&CMobManager::RebindMobProto),this)); + CHARACTER_MANAGER::instance().for_each_pc([this](auto& pc) { RebindMobProto(pc); }); return true; }