XJ music engine  1.9.6
In-game runtime engine for XJ music.
ConfigParser.h
Go to the documentation of this file.
1 // Copyright (c) XJ Music Inc. (https://xjmusic.com) All Rights Reserved.
2 
3 #ifndef XJMUSIC_CONFIG_PARSER_H
4 #define XJMUSIC_CONFIG_PARSER_H
5 
6 #include <map>
7 #include <set>
8 #include <string>
9 #include <utility>
10 #include <variant>
11 #include <vector>
12 
13 namespace XJ {
14 
18  class ConfigValue {
19  public:
20  virtual ~ConfigValue() = default;
21  };
22 
26  class ConfigSingleValue final : public ConfigValue {
27  std::variant<std::string, int, float, bool> value;
28 
29  public:
30  ConfigSingleValue() = default;
31 
36  explicit ConfigSingleValue(const std::variant<std::string, int, float, bool> &value);
37 
42  [[nodiscard]] std::string getString() const;
43 
48  [[nodiscard]] float getFloat() const;
49 
54  [[nodiscard]] int getInt() const;
55 
60  bool getBool() const;
61 
67  bool operator==(const ConfigSingleValue &other) const;
68 
74  bool operator!=(const ConfigSingleValue &other) const;
75  };
76 
80  class ConfigObjectValue final : public ConfigValue {
81  std::map<std::string, std::variant<ConfigSingleValue, std::vector<ConfigSingleValue>>> data;
82 
83  public:
88  unsigned long size() const;
89 
95  ConfigSingleValue atSingle(const std::string &index);
96 
102  std::vector<ConfigSingleValue> atList(const std::string &index);
103 
109  void set(const std::string &key, const std::variant<ConfigSingleValue, std::vector<ConfigSingleValue>> &value);
110 
115  std::map<std::string, std::variant<ConfigSingleValue, std::vector<ConfigSingleValue>>> asMapOfSingleOrList();
116 
121  std::map<std::string, std::variant<std::string, std::vector<std::string>>> asMapOfStringsOrListsOfStrings() const;
122 
128  bool operator==(const ConfigObjectValue &other) const;
129 
135  bool operator!=(const ConfigObjectValue &other) const;
136  };
137 
141  class ConfigListValue final : public ConfigValue {
142  std::vector<std::variant<ConfigSingleValue, ConfigObjectValue>> data;
143 
144  public:
149  unsigned long size() const;
150 
155  [[nodiscard]] std::vector<std::string> asListOfStrings() const;
156 
161  [[nodiscard]] std::set<std::string> asSetOfStrings() const;
162 
163  /*
164  * Get the list as a vector of maps of strings to strings
165  * @return The list as a vector of maps of strings to strings
166  */
167  std::vector<std::map<std::string, std::variant<std::string, std::vector<std::string>>>> asListOfMapsOfStrings();
168 
174  ConfigSingleValue atSingle(const unsigned long &index);
175 
181  ConfigObjectValue atObject(const unsigned long &index);
182 
187  void add(const std::variant<ConfigSingleValue, ConfigObjectValue> &value);
188 
194  bool operator==(const ConfigListValue &other) const;
195 
201  bool operator!=(const ConfigListValue &other) const;
202  };
203 
207  class ConfigException final : public std::exception {
208  private:
209  std::string message;
210 
211  public:
212  explicit ConfigException(std::string msg) : message(std::move(msg)) {}
213 
214  [[nodiscard]] const char *what() const noexcept override {
215  return message.c_str();
216  }
217  };
218 
222  class ConfigParser {
223  std::map<std::string, std::variant<ConfigSingleValue, ConfigObjectValue, ConfigListValue>> config;
224 
225  public:
231  explicit ConfigParser(const std::string &input);
232 
239  ConfigParser(const std::string &input, const ConfigParser &defaults);
240 
246  ConfigSingleValue getSingleValue(const std::string &key);
247 
253  ConfigListValue getListValue(const std::string &key);
254 
260  ConfigObjectValue getObjectValue(const std::string &key);
261 
267  static std::string format(const bool &value);
268 
274  static std::string format(const int &value);
275 
281  static std::string format(const float &value);
282 
288  static std::string format(const std::string &value);
289 
295  static std::string format(const std::vector<std::string> &values);
296 
302  static std::string format(const std::set<std::string> &values);
303 
309  static std::vector<std::string> splitCsvTopLevel(const std::string& basicString);
310 
316  bool operator==(const ConfigParser &other) const;
317 
321  void operator=(const ConfigParser &other);
322  };
323 
324 }// namespace XJ
325 
326 #endif//XJMUSIC_CONFIG_PARSER_H
Definition: ConfigParser.h:207
ConfigException(std::string msg)
Definition: ConfigParser.h:212
const char * what() const noexcept override
Definition: ConfigParser.h:214
Definition: ConfigParser.h:141
std::vector< std::string > asListOfStrings() const
Definition: ConfigParser.cpp:512
ConfigObjectValue atObject(const unsigned long &index)
Definition: ConfigParser.cpp:491
unsigned long size() const
Definition: ConfigParser.cpp:481
void add(const std::variant< ConfigSingleValue, ConfigObjectValue > &value)
Definition: ConfigParser.cpp:496
ConfigSingleValue atSingle(const unsigned long &index)
Definition: ConfigParser.cpp:486
bool operator!=(const ConfigListValue &other) const
Definition: ConfigParser.cpp:508
std::vector< std::map< std::string, std::variant< std::string, std::vector< std::string > > > > asListOfMapsOfStrings()
Definition: ConfigParser.cpp:537
std::set< std::string > asSetOfStrings() const
Definition: ConfigParser.cpp:524
bool operator==(const ConfigListValue &other) const
Definition: ConfigParser.cpp:500
Definition: ConfigParser.h:80
ConfigSingleValue atSingle(const std::string &index)
Definition: ConfigParser.cpp:422
std::map< std::string, std::variant< std::string, std::vector< std::string > > > asMapOfStringsOrListsOfStrings() const
Definition: ConfigParser.cpp:451
bool operator==(const ConfigObjectValue &other) const
Definition: ConfigParser.cpp:467
std::map< std::string, std::variant< ConfigSingleValue, std::vector< ConfigSingleValue > > > asMapOfSingleOrList()
Definition: ConfigParser.cpp:445
void set(const std::string &key, const std::variant< ConfigSingleValue, std::vector< ConfigSingleValue >> &value)
Definition: ConfigParser.cpp:438
bool operator!=(const ConfigObjectValue &other) const
Definition: ConfigParser.cpp:476
unsigned long size() const
Definition: ConfigParser.cpp:417
std::vector< ConfigSingleValue > atList(const std::string &index)
Definition: ConfigParser.cpp:433
Definition: ConfigParser.h:222
bool operator==(const ConfigParser &other) const
Definition: ConfigParser.cpp:399
ConfigObjectValue getObjectValue(const std::string &key)
Definition: ConfigParser.cpp:347
static std::vector< std::string > splitCsvTopLevel(const std::string &basicString)
Definition: ConfigParser.cpp:148
static std::string format(const bool &value)
Definition: ConfigParser.cpp:358
ConfigSingleValue getSingleValue(const std::string &key)
Definition: ConfigParser.cpp:317
ConfigListValue getListValue(const std::string &key)
Definition: ConfigParser.cpp:328
void operator=(const ConfigParser &other)
Definition: ConfigParser.cpp:409
ConfigParser(const std::string &input)
Definition: ConfigParser.cpp:228
Definition: ConfigParser.h:26
int getInt() const
Definition: ConfigParser.cpp:291
std::string getString() const
Definition: ConfigParser.cpp:275
float getFloat() const
Definition: ConfigParser.cpp:283
ConfigSingleValue()=default
bool getBool() const
Definition: ConfigParser.cpp:299
bool operator!=(const ConfigSingleValue &other) const
Definition: ConfigParser.cpp:310
bool operator==(const ConfigSingleValue &other) const
Definition: ConfigParser.cpp:306
Definition: ConfigParser.h:18
virtual ~ConfigValue()=default
Definition: ActiveAudio.h:11