@@ -29,15 +29,27 @@ namespace DataManager
2929{
3030 namespace values
3131 {
32- const std::unordered_map<DMArrayKey, std::string_view> ARRAY_KEY_TO_NAME{
33- { DMArrayKey::DIFFICULTY_ARRAY, " difficulty-array" },
34- { DMArrayKey::DEMON_DIFFICULTY_ARRAY, " demon-difficulty-array" },
35- { DMArrayKey::SELECTED_LIST_ARRAY, " selected-list-array" },
36- };
32+ template <DMArrayKey key>
33+ std::string_view getKeyString ()
34+ {
35+ if constexpr (key == DMArrayKey::DIFFICULTY_ARRAY)
36+ return " difficulty-array" ;
37+ else if constexpr (key == DMArrayKey::DEMON_DIFFICULTY_ARRAY)
38+ return " demon-difficulty-array" ;
39+ else if constexpr (key == DMArrayKey::SELECTED_LIST_ARRAY)
40+ return " selected-list-array" ;
41+
42+ std::unreachable ();
43+ }
3744
38- const std::unordered_map<DMMiscKey, std::string_view> MISC_KEY_TO_NAME{
39- { DMMiscKey::GD_LIST_ID, " gd-list-id" },
40- };
45+ template <DMMiscKey key>
46+ std::string_view getKeyString ()
47+ {
48+ if constexpr (key == DMMiscKey::GD_LIST_ID)
49+ return " gd-list-id" ;
50+
51+ std::unreachable ();
52+ }
4153
4254 struct SavedArrayInfo
4355 {
@@ -180,7 +192,7 @@ namespace DataManager
180192 template <DMArrayKey key>
181193 void set (const std::vector<matjson::Value>& value)
182194 {
183- geode::Mod::get ()->setSavedValue (values::ARRAY_KEY_TO_NAME. at ( key), value);
195+ geode::Mod::get ()->setSavedValue (values::getKeyString< key>( ), value);
184196 }
185197
186198 /* *
@@ -194,7 +206,7 @@ namespace DataManager
194206 void set (std::size_t idx, bool value)
195207 {
196208 geode::Mod::get ()->getSaveContainer ().get (
197- values::ARRAY_KEY_TO_NAME. at ( key)
209+ values::getKeyString< key>( )
198210 ).unwrap ().asArray ().unwrap ().at (idx) = value;
199211 }
200212
@@ -210,7 +222,7 @@ namespace DataManager
210222 if constexpr (key == DMMiscKey::SAVE_DATA)
211223 writeGameState (value);
212224 else
213- geode::Mod::get ()->setSavedValue (values::MISC_KEY_TO_NAME. at ( key), value);
225+ geode::Mod::get ()->setSavedValue (values::getKeyString< key>( ), value);
214226 }
215227
216228
@@ -225,16 +237,16 @@ namespace DataManager
225237 {
226238 auto & container = geode::Mod::get ()->getSaveContainer ();
227239
228- if (auto res = container.get (values::ARRAY_KEY_TO_NAME. at ( key)); res.isOk ())
240+ if (auto res = container.get (values::getKeyString< key>( )); res.isOk ())
229241 if (auto resv = res.unwrap ().asArray (); resv.isOkAnd ([](auto && vec) {
230242 return vec.size () == values::ARRAY_TO_SAI.at (key).size &&
231243 std::all_of (vec.begin (), vec.end (), [](auto & v) { return v.asBool ().isOk (); });
232244 }))
233245 return resv.unwrap ();
234246
235- container.set (values::ARRAY_KEY_TO_NAME. at ( key), values::ARRAY_TO_SAI.at (key).default_value );
247+ container.set (values::getKeyString< key>( ), values::ARRAY_TO_SAI.at (key).default_value );
236248
237- return container.get (values::ARRAY_KEY_TO_NAME. at ( key)).unwrap ().asArray ().unwrap ();
249+ return container.get (values::getKeyString< key>( )).unwrap ().asArray ().unwrap ();
238250 }
239251
240252 /* *
@@ -255,11 +267,11 @@ namespace DataManager
255267 {
256268 auto & container = geode::Mod::get ()->getSaveContainer ();
257269
258- if (auto res = container.get (values::MISC_KEY_TO_NAME. at ( key)); res.isOk ())
259- if (auto resv = res.unwrap ().as <save_container_t >(); resv.isOk ())
270+ if (auto res = container.get (values::getKeyString< key>( )); res.isOk ())
271+ if (auto resv = res.unwrap ().template as <save_container_t >(); resv.isOk ())
260272 return resv.unwrap ();
261273
262- container.set (values::MISC_KEY_TO_NAME. at ( key), value_t {});
274+ container.set (values::getKeyString< key>( ), value_t {});
263275
264276 return value_t {};
265277 }
0 commit comments