11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
19PROMEKI_NAMESPACE_BEGIN
81 using ID = StringRegistry<
"ClockDomain">::Item;
84 using IDList = ::promeki::List<ID>;
96 static const ID Synthetic;
99 static const ID SystemMonotonic;
114 static ID registerDomain(
const String &name,
const String &description,
115 const ClockEpoch &epoch = ClockEpoch::Correlated);
125 static void setDomainMetadata(
const ID &
id,
const Metadata &metadata);
131 static IDList registeredIDs();
138 static ClockDomain lookup(
const String &name);
141 ClockDomain() =
default;
147 ClockDomain(
const ID &
id);
153 bool isValid()
const;
165 const String &name()
const;
171 const String &description()
const;
178 const ClockEpoch &epoch()
const;
187 const Metadata &metadata()
const;
195 bool isCrossStreamComparable()
const;
203 bool isCrossMachineComparable()
const;
213 String toString()
const;
223 const Data *data()
const {
return d; }
226 bool operator==(
const ClockDomain &other)
const {
return d == other.d; }
229 bool operator!=(
const ClockDomain &other)
const {
return d != other.d; }
232 const Data *d =
nullptr;
233 static const Data *lookupData(
const ID &
id);
238PROMEKI_FORMAT_VIA_TOSTRING(promeki::ClockDomain);