20 x =
static_cast<T
>(x | flag);
26 x =
static_cast<T
>(x & (~flag));
42 template<
typename T,
typename F>
45 return static_cast<uint32_t
>(
static_cast<uint32_t
>(x) & static_cast<uint32_t>(flag)) == static_cast<uint32_t>(flag);
48 template<
typename Base,
typename Derived>
51 virtual std::unique_ptr<Base>
Clone()
const override 53 return std::make_unique<Derived>(*
static_cast<const Derived*
>(
this));
57 template<
typename FunctionType>
64 template<
typename FunctionRef>
65 void Push(FunctionRef&& callback)
67 Push(std::forward<FunctionRef>(callback), 0);
70 template<
typename FunctionRef>
73 if (callback !=
nullptr)
76 entry.callback = std::forward<FunctionRef>(callback);
77 entry.lookupId = lookupId;
79 mLookups.push_back(std::move(entry));
83 template<
typename... Args>
86 for (
const auto& lookup : mLookups)
88 lookup.callback(std::forward<Args>(args)...);
95 auto iter = std::find_if(mLookups.begin(), mLookups.end(), [token](
const LookupEntry& x)
97 return x.lookupId == token;
100 if (iter != mLookups.end())
102 FunctionType callback = std::move(iter->callback);
104 mLookups.erase(iter);
105 return std::move(callback);
113 return mLookups.empty();
159 return client == other;
164 return client != other;
168 template <
typename Arg>
174 template <
typename Arg>
void Push(FunctionRef &&callback)
Definition: coreutilities.h:65
void Push(FunctionRef &&callback, LookupId lookupId)
Definition: coreutilities.h:71
void SetFlag(T &x, T flag, bool value)
Definition: coreutilities.h:30
uint64_t LookupId
Definition: coreutilities.h:61
Definition: coreutilities.h:131
void operator=(const T &val)
Definition: coreutilities.h:151
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
bool HasFlag(T &x, F flag)
Definition: coreutilities.h:43
T server
Definition: coreutilities.h:134
ClientServerValue()
Definition: coreutilities.h:136
Definition: coreutilities.h:58
T client
Definition: coreutilities.h:133
virtual std::unique_ptr< Base > Clone() const override
Definition: coreutilities.h:51
Definition: coreutilities.h:169
bool Empty() const
Definition: coreutilities.h:111
Definition: coreutilities.h:49
void RemoveFlag(T &x, T flag)
Definition: coreutilities.h:24
void Type
Definition: coreutilities.h:171
void AddFlag(T &x, T flag)
Definition: coreutilities.h:18
std::vector< LookupEntry > mLookups
Definition: coreutilities.h:123
LookupId lookupId
Definition: coreutilities.h:120
bool operator==(const T &other)
Definition: coreutilities.h:157
Definition: coreutilities.h:117
typename MakeVoid< Arg >::Type VoidType
Definition: coreutilities.h:175
ClientServerValue(const T &val)
Definition: coreutilities.h:140
FunctionType callback
Definition: coreutilities.h:119
bool operator!=(const T &other)
Definition: coreutilities.h:162
FunctionType Erase(LookupId token)
Definition: coreutilities.h:93
void Flush(Args &&... args)
Definition: coreutilities.h:84