31 #ifndef r_code_utils_h
32 #define r_code_utils_h
46 return (
size_t)(
C *)c;
73 static void SetReferenceValues(
uint64_t base_period,
double float_tolerance,
double time_tolerance);
74 static void SetTimeReference(
uint64_t time_reference);
76 static bool Equal(
double l,
double r);
81 static void SetTimestamp(
Code *
object, uint32_t index,
uint64_t t);
83 static const uint64_t MaxTime = 0xFFFFFFFFFFFFFFFF;
88 uint16_t t_index =
object->code(index).asIndex();
89 uint64_t high =
object->code(t_index + 1).atom;
90 return high << 32 |
object->code(t_index + 2).atom;
95 uint16_t t_index =
object->code(index).asIndex();
96 object->code(t_index) = Atom::Timestamp();
97 object->code(t_index + 1).atom = t >> 32;
98 object->code(t_index + 2).atom = t & 0x00000000FFFFFFFF;
101 static std::string GetString(
const Atom *iptr);
102 static void SetString(
Atom *iptr,
const std::string &s);
104 template<
class O>
static std::string
GetString(
const O *
object, uint16_t index) {
106 uint16_t s_index =
object->code(index).asIndex();
108 uint8_t char_count = (
object->code(s_index).atom & 0x000000FF);
109 buffer[char_count] = 0;
110 for (
int i = 0; i < char_count; i += 4) {
111 uint64_t val =
object->code(s_index + 1 + i / 4);
112 buffer[i] = (val & 0x000000ff);
113 buffer[i + 1] = (val & 0x0000ff00) >> 8;
114 buffer[i + 2] = (val & 0x00ff0000) >> 16;
115 buffer[i + 3] = (val & 0xff000000) >> 24;
117 return std::string(buffer);
120 template<
class O>
static void SetString(O *
object, uint16_t index,
const std::string &s) {
122 uint16_t s_index =
object->code(index).asIndex();
123 uint8_t l = (uint8_t)s.length();
124 object->code(s_index) = Atom::String(l);
127 for (uint8_t i = 0; i < l; ++i) {
129 _st |= s[i] << shift;
133 object->code(++s_index) = _st;
139 object->code(++s_index) = _st;
143 static int64_t GetGroupResilience(
double resilience,
double origin_upr,
double destination_upr);
145 static std::string RelativeTime(
uint64_t t);
std::ostream & operator<<(std::ostream &os, RepliStruct *structure)
Definition: replistruct.cpp:718
static void SetTimestamp(O *object, uint16_t index, uint64_t t)
Definition: utils.h:93
bool now(const Context &context, uint16_t &index)
Definition: operator.cpp:55
static double FloatTolerance
Definition: utils.h:66
static uint64_t TimeTolerance
Definition: utils.h:67
#define dll_export
Definition: dll.h:44
size_t operator()(P< C > c) const
Definition: utils.h:45
static uint64_t BasePeriod
Definition: utils.h:65
static void SetString(O *object, uint16_t index, const std::string &s)
Definition: utils.h:120
static uint64_t GetTimestamp(const O *object, uint16_t index)
Definition: utils.h:86
static std::string GetString(const O *object, uint16_t index)
Definition: utils.h:104
static uint64_t TimeReference
Definition: utils.h:64
NullOStream()
Definition: utils.h:54