Antkeeper  0.0.1
settings.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef ANTKEEPER_GAME_SETTINGS_HPP
21 #define ANTKEEPER_GAME_SETTINGS_HPP
22 
23 #include "game/game.hpp"
24 #include <engine/debug/log.hpp>
25 
26 
38 template <class T>
39 bool read_or_write_setting(::game& ctx, hash::fnv1a32_t key, T& value)
40 {
41  if (auto i = ctx.settings->find(key); i != ctx.settings->end())
42  {
43  try
44  {
45  value = std::any_cast<T>(i->second);
46  }
47  catch (const std::bad_any_cast&)
48  {
49  debug::log_error("Setting type mismatch ({:x}={})", key.value, value);
50  i->second = value;
51  return false;
52  }
53  }
54  else
55  {
56  debug::log_trace("Setting key not found ({:x}={})", key.value, value);
57  (*ctx.settings)[key] = value;
58  return false;
59  }
60 
61  return true;
62 }
63 
64 
65 #endif // ANTKEEPER_GAME_SETTINGS_HPP
Definition: game.hpp:121
std::shared_ptr< dict< hash::fnv1a32_t > > settings
Definition: game.hpp:162
log_message< log_message_severity::trace, Args... > log_trace
Formats and logs a trace message.
Definition: log.hpp:88
log_message< log_message_severity::error, Args... > log_error
Formats and logs an error message.
Definition: log.hpp:144
bool read_or_write_setting(::game &ctx, hash::fnv1a32_t key, T &value)
Reads a setting if found, inserts a setting if not found, and overwrites a setting if a type mismatch...
Definition: settings.hpp:39
32-bit FNV-1a hash value.
Definition: fnv1a.hpp:117