From ba28c936c9d80e99ce2a234d7d8a9cffd02b3844 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 26 Dec 2022 15:38:47 +0800 Subject: [PATCH] 1 --- server/gameserver/mt/AirDrop.cc | 11 ----------- server/gameserver/mt/AirDrop.h | 2 -- server/gameserver/mt/AirRaid.cc | 11 ----------- server/gameserver/mt/AirRaid.h | 1 - server/gameserver/mt/Map.cc | 11 ----------- server/gameserver/mt/Map.h | 1 - server/gameserver/mt/MetaMgr.h | 33 +++++++++++++++++++++------------ server/gameserver/mt/macro.h | 30 ++++++++++++++++++++++++++++-- 8 files changed, 49 insertions(+), 51 deletions(-) diff --git a/server/gameserver/mt/AirDrop.cc b/server/gameserver/mt/AirDrop.cc index d249aede..139d9de6 100644 --- a/server/gameserver/mt/AirDrop.cc +++ b/server/gameserver/mt/AirDrop.cc @@ -44,15 +44,4 @@ namespace mt return 0; } - void AirDrop::Traverse(std::function cb) - { - bool stop = false; - for (auto& itr : raw_list) { - cb(itr, stop); - if (stop) { - break; - } - } - } - } diff --git a/server/gameserver/mt/AirDrop.h b/server/gameserver/mt/AirDrop.h index 0e6006b9..1068242c 100644 --- a/server/gameserver/mt/AirDrop.h +++ b/server/gameserver/mt/AirDrop.h @@ -16,8 +16,6 @@ namespace mt void Init1(); int RandDrop() const; - static void Traverse(std::function cb); - private: std::vector> _drop; }; diff --git a/server/gameserver/mt/AirRaid.cc b/server/gameserver/mt/AirRaid.cc index a928c353..9c382b94 100644 --- a/server/gameserver/mt/AirRaid.cc +++ b/server/gameserver/mt/AirRaid.cc @@ -30,15 +30,4 @@ namespace mt } } - void AirRaid::Traverse(std::function cb) - { - bool stop = false; - for (auto& itr : raw_list) { - cb(itr, stop); - if (stop) { - break; - } - } - } - } diff --git a/server/gameserver/mt/AirRaid.h b/server/gameserver/mt/AirRaid.h index d700d98a..6015433a 100644 --- a/server/gameserver/mt/AirRaid.h +++ b/server/gameserver/mt/AirRaid.h @@ -16,7 +16,6 @@ namespace mt std::vector> _raid_waves; std::vector _bomb_ids; - static void Traverse(std::function cb); }; } diff --git a/server/gameserver/mt/Map.cc b/server/gameserver/mt/Map.cc index 9f3ef648..e2ad25a9 100644 --- a/server/gameserver/mt/Map.cc +++ b/server/gameserver/mt/Map.cc @@ -173,15 +173,4 @@ namespace mt return map_id() >= 1002 && map_id() <= 1003; } - void Map::Traverse(std::function cb) - { - bool stop = false; - for (auto& itr : raw_list) { - cb(itr, stop); - if (stop) { - break; - } - } - } - } diff --git a/server/gameserver/mt/Map.h b/server/gameserver/mt/Map.h index 9d203240..dcbf1d2e 100644 --- a/server/gameserver/mt/Map.h +++ b/server/gameserver/mt/Map.h @@ -32,7 +32,6 @@ namespace mt void Init1(); void Init2(); - static void Traverse(std::function cb); }; } diff --git a/server/gameserver/mt/MetaMgr.h b/server/gameserver/mt/MetaMgr.h index 7fc660cd..82da3249 100644 --- a/server/gameserver/mt/MetaMgr.h +++ b/server/gameserver/mt/MetaMgr.h @@ -16,32 +16,41 @@ void SafeCallStaticPostInit(int) { T::StaticPostInit(); }; template void SafeCallInit1(...) { }; -template +template void SafeCallInit1(int) { - for (auto item : T::raw_list) { - item->Init1(); - } + T::MutTraverse + ( + [] (T* meta, bool& stop) + { + meta->Init1(); + }); }; template void SafeCallInit2(...) { }; -template +template void SafeCallInit2(int) { - for (auto item : T::raw_list) { - item->Init2(); - } + T::MutTraverse + ( + [] (T* meta, bool& stop) + { + meta->Init2(); + }); }; template void SafeCallInit3(...) { }; -template +template void SafeCallInit3(int) { - for (auto item : T::raw_list) { - item->Init3(); - } + T::MutTraverse + ( + [] (T* meta, bool& stop) + { + meta->Init3(); + }); }; namespace mt diff --git a/server/gameserver/mt/macro.h b/server/gameserver/mt/macro.h index 0eacb035..88e00960 100644 --- a/server/gameserver/mt/macro.h +++ b/server/gameserver/mt/macro.h @@ -10,7 +10,10 @@ class classname : public base \ static constexpr const char* table_name= filename; \ static std::vector raw_list; \ static std::map id_hash; \ - static std::map name_hash; + static std::map name_hash; \ + public: \ + static void Traverse(std::function cb); \ + static void MutTraverse(std::function cb); #define DECLARE_ID_TABLE(classname, base, filename, key) \ DECLARE_COMMON_HEAD(classname, base, filename, key, 1) \ @@ -43,4 +46,27 @@ DECLARE_COMMON_HEAD(classname, base, filename, key, 2) \ #define IMPL_TABLE(classname) \ std::vector classname::raw_list; \ std::map classname::id_hash; \ -std::map classname::name_hash; +std::map classname::name_hash; \ +namespace mt \ +{ \ + void classname::Traverse(std::function cb) \ + { \ + bool stop = false; \ + for (auto& itr : raw_list) { \ + cb(itr, stop); \ + if (stop) { \ + break; \ + } \ + } \ + } \ + void classname::MutTraverse(std::function cb) \ + { \ + bool stop = false; \ + for (auto& itr : raw_list) { \ + cb(itr, stop); \ + if (stop) { \ + break; \ + } \ + } \ + } \ +}