libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
memdomain.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <promeki/namespace.h>
14#include <promeki/string.h>
15#include <promeki/list.h>
16
17PROMEKI_NAMESPACE_BEGIN
18
43class MemDomain {
44 public:
52 enum ID {
53 Host = 0,
54 CudaDevice = 1,
55 FpgaDevice = 2,
56 Default = Host,
57 UserDefined = 1024
58 };
59
61 using IDList = ::promeki::List<ID>;
62
70 struct Data {
71 ID id;
72 String name;
73 };
74
79 static ID registerType();
80
89 static void registerData(Data &&data);
90
95 static IDList registeredIDs();
96
101 inline MemDomain(ID id = Default);
102
104 const String &name() const { return d->name; }
105
107 ID id() const { return d->id; }
108
110 bool operator==(const MemDomain &o) const { return d == o.d; }
111
113 bool operator!=(const MemDomain &o) const { return d != o.d; }
114
115 private:
116 const Data *d = nullptr;
117 static const Data *lookup(ID id);
118};
119
120inline MemDomain::MemDomain(ID id) : d(lookup(id)) {}
121
122PROMEKI_NAMESPACE_END
123
124#endif // PROMEKI_ENABLE_CORE