libpromeki main
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
structdatabase.h
Go to the documentation of this file.
1
8#pragma once
9
11#include <promeki/core/string.h>
12#include <promeki/core/map.h>
13
15
29template<typename KeyType, typename StructType>
31 public:
32 using Database = promeki::Map<KeyType, StructType>;
33 using NameDatabase = promeki::Map<String, KeyType>;
34
36 StructDatabase() = default;
37
40 StructDatabase(const std::initializer_list<StructType> &&list) {
41 load(std::move(list));
42 }
43
46 void add(const StructType &&val) {
47 _db[val.id] = std::move(val);
48 _nameDb[val.name] = val.id;
49 return;
50 }
51
55 const StructType &get(const KeyType &id) const {
56 auto it = _db.find(id);
57 if(it != _db.end()) return it->second;
58 it = _db.find(static_cast<KeyType>(0));
59 if(it != _db.end()) return it->second;
60 static const StructType fallback{};
61 return fallback;
62 }
63
67 KeyType lookupKeyByName(const String &name) const {
68 auto it = _nameDb.find(name);
69 return (it != _nameDb.end()) ?
70 it->second :
71 static_cast<KeyType>(0);
72 }
73
76 void load(const std::initializer_list<StructType> &&list) {
77 for(auto &&item : list) add(std::move(item));
78 return;
79 }
80
82 const Database &database() const { return _db; }
84 Database &database() { return _db; }
85
86 private:
87 Database _db;
88 NameDatabase _nameDb;
89};
90
92
Dynamic array container wrapping std::vector.
Definition list.h:40
List()=default
Default constructor. Creates an empty list.
Encoding-aware string class with copy-on-write semantics.
Definition string.h:35
A database that maps keys to struct entries, initialized from an initializer list.
Definition structdatabase.h:30
void load(const std::initializer_list< StructType > &&list)
Loads all entries from an initializer list.
Definition structdatabase.h:76
KeyType lookupKeyByName(const String &name) const
Looks up a key by the entry's name.
Definition structdatabase.h:67
Database & database()
Returns a mutable reference to the underlying database map.
Definition structdatabase.h:84
const StructType & get(const KeyType &id) const
Retrieves an entry by its key, falling back to key 0 if not found.
Definition structdatabase.h:55
StructDatabase(const std::initializer_list< StructType > &&list)
Constructs a database and populates it from an initializer list.
Definition structdatabase.h:40
StructDatabase()=default
Constructs an empty database.
const Database & database() const
Returns a const reference to the underlying database map.
Definition structdatabase.h:82
void add(const StructType &&val)
Adds a single entry to the database.
Definition structdatabase.h:46
#define PROMEKI_NAMESPACE_BEGIN
Starts a promeki namespace block.
Definition namespace.h:14
#define PROMEKI_NAMESPACE_END
Ends a promeki namespace block.
Definition namespace.h:19