XJ music engine  1.9.6
In-game runtime engine for XJ music.
MemeTaxonomy.h
Go to the documentation of this file.
1 
2 // Copyright (c) XJ Music Inc. (https://xjmusic.com) All Rights Reserved.
3 
4 #ifndef XJMUSIC_ENTITIES_MEME_TAXONOMY_H
5 #define XJMUSIC_ENTITIES_MEME_TAXONOMY_H
6 
7 #include <map>
8 #include <string>
9 #include <variant>
10 
12 #include "MemeConstellation.h"
13 
14 namespace XJ {
15 
16  using MapStringToOneOrManyString = std::map<std::string, std::variant<std::string, std::set<std::string>>>;
17 
21  class MemeCategory {
22  private:
23  std::string name;
24  std::set<std::string> memes;
25  static std::regex rgx;
26  static std::string MEME_SEPARATOR;
27  static std::string KEY_NAME;
28  static std::string KEY_MEMES;
29  static std::string DEFAULT_CATEGORY_NAME;
30 
31  static std::set<std::string>
32  parseMemeList(const MapStringToOneOrManyString &data);
33 
34  public:
35  MemeCategory() = default;
36 
41  explicit MemeCategory(const std::string *raw);
42 
47  explicit MemeCategory(const MapStringToOneOrManyString &data);
48 
55  friend bool operator<(const MemeCategory& lhs, const MemeCategory& rhs) {
56  return lhs.name < rhs.name;
57  }
58 
63  [[nodiscard]] std::string getName() const;
64 
69  [[nodiscard]] std::set<std::string> getMemes() const;
70 
76  bool isAllowed(std::set<std::string> &targets) const;
77 
82  [[nodiscard]] bool hasMemes() const;
83 
88  [[nodiscard]] MapStringToOneOrManyString toMap() const;
89 
94  [[nodiscard]] std::string toString() const;
95  };
96 
112  class MemeTaxonomy {
113  std::set<MemeCategory> categories;
114  static char CATEGORY_SEPARATOR;
115 
116  public:
117  MemeTaxonomy() = default;
118 
123  explicit MemeTaxonomy(const std::string &raw);
124 
129  explicit MemeTaxonomy(const std::set<MapStringToOneOrManyString> &data);
130 
134  static MemeTaxonomy empty();
135 
140  static MemeTaxonomy fromSet(std::set<MapStringToOneOrManyString> &data);
141 
146  static MemeTaxonomy fromList(const std::vector<std::map<std::string, std::variant<std::string, std::vector<std::string>>>>& list);
147 
151  static MemeTaxonomy fromString(const std::string &raw);
152 
157  [[nodiscard]] std::string toString() const;
158 
163  std::set<MapStringToOneOrManyString> toList() const;
164 
169  [[nodiscard]] std::map<std::string, std::vector<std::string>> toMap() const;
170 
175  std::set<MemeCategory> getCategories();
176 
182  [[nodiscard]] bool isAllowed(std::set<std::string> memes) const;
183 
184  };
185 
186 }// namespace XJ
187 
188 #endif//XJMUSIC_ENTITIES_MEME_TAXONOMY_H
Definition: MemeTaxonomy.h:21
friend bool operator<(const MemeCategory &lhs, const MemeCategory &rhs)
Definition: MemeTaxonomy.h:55
std::string toString() const
Definition: MemeTaxonomy.cpp:113
bool isAllowed(std::set< std::string > &targets) const
Definition: MemeTaxonomy.cpp:97
MemeCategory()=default
MapStringToOneOrManyString toMap() const
Definition: MemeTaxonomy.cpp:120
bool hasMemes() const
Definition: MemeTaxonomy.cpp:108
std::string getName() const
Definition: MemeTaxonomy.cpp:87
std::set< std::string > getMemes() const
Definition: MemeTaxonomy.cpp:92
Definition: MemeTaxonomy.h:112
std::string toString() const
Definition: MemeTaxonomy.cpp:153
bool isAllowed(std::set< std::string > memes) const
Definition: MemeTaxonomy.cpp:190
MemeTaxonomy()=default
std::set< MemeCategory > getCategories()
Definition: MemeTaxonomy.cpp:185
std::set< MapStringToOneOrManyString > toList() const
Definition: MemeTaxonomy.cpp:164
static MemeTaxonomy empty()
Definition: MemeTaxonomy.cpp:200
std::map< std::string, std::vector< std::string > > toMap() const
Definition: MemeTaxonomy.cpp:173
static MemeTaxonomy fromList(const std::vector< std::map< std::string, std::variant< std::string, std::vector< std::string >>>> &list)
Definition: MemeTaxonomy.cpp:215
static MemeTaxonomy fromSet(std::set< MapStringToOneOrManyString > &data)
Definition: MemeTaxonomy.cpp:205
static MemeTaxonomy fromString(const std::string &raw)
Definition: MemeTaxonomy.cpp:210
Definition: ActiveAudio.h:11
std::map< std::string, std::variant< std::string, std::set< std::string > >> MapStringToOneOrManyString
Definition: MemeTaxonomy.h:16