libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
mediaioparams.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
13#include <promeki/namespace.h>
14#include <promeki/variant.h>
15#include <promeki/error.h>
16#include <promeki/list.h>
17#include <promeki/result.h>
19
20PROMEKI_NAMESPACE_BEGIN
21
26enum class MediaIOParamOp {
27 Get,
28 Set
29};
30
55struct MediaIOParamAction {
57 StringRegistry<"MediaIOParams">::Item id;
59 MediaIOParamOp op = MediaIOParamOp::Get;
61 Variant value;
63 Error error = Error::Ok;
64};
65
107class MediaIOParams {
108 public:
110 using ID = StringRegistry<"MediaIOParams">::Item;
112 using ActionList = List<MediaIOParamAction>;
113
115 MediaIOParams() = default;
116
122 MediaIOParams &get(ID id) {
123 _actions.pushToBack(MediaIOParamAction{id, MediaIOParamOp::Get, Variant(), Error::Ok});
124 return *this;
125 }
126
133 MediaIOParams &set(ID id, const Variant &value) {
134 _actions.pushToBack(MediaIOParamAction{id, MediaIOParamOp::Set, value, Error::Ok});
135 return *this;
136 }
137
139 void setAtomic(bool on) { _atomic = on; }
140
142 bool isAtomic() const { return _atomic; }
143
145 int count() const { return static_cast<int>(_actions.size()); }
146
148 bool isEmpty() const { return _actions.isEmpty(); }
149
151 const MediaIOParamAction &action(int i) const { return _actions.at(i); }
152
154 MediaIOParamAction &action(int i) { return _actions[i]; }
155
157 const ActionList &actions() const { return _actions; }
158
160 ActionList &actions() { return _actions; }
161
172 Result<Variant> result(int i) const {
173 const MediaIOParamAction &a = _actions.at(i);
174 return Result<Variant>(a.value, a.error);
175 }
176
177 private:
178 ActionList _actions;
179 bool _atomic = false;
180};
181
189using MediaIOParamsID = MediaIOParams::ID;
190
191PROMEKI_NAMESPACE_END
192
193#endif // PROMEKI_ENABLE_PROAV