// Copyright (c) 2019 Laura Lawniczak, Christian Eichler, Bernhard Heinloth // SPDX-License-Identifier: AGPL-3.0-only typedef class __attribute__ ((packed)) tle { private: static const time_t side_mask = 0x7; static const time_t time_mask = ~side_mask; time_t value; public: operator time_t() const { return value; } operator unsigned long() const { static_assert(std::is_same<unsigned long, std::make_unsigned<time_t>::type>::value, "time_t is not a long value"); assert(value >= 0 && "value may not be negative!"); return value; } tle& operator=(const tle &src) { value = src.value; return *this; } void set_side(uint8_t side) { assert(side == (side & side_mask) ); value = get_time() | side; } uint8_t get_side() const { return value & side_mask; } void set_time(time_t ts) { value = (ts & time_mask) | get_side(); } time_t get_time() const { return value & time_mask; } void set_time_to_now() { time_t now; time(&now); set_time(now); } } tle; static_assert(sizeof(time_t) == 4, "sizeof(time_t) must be 4 Bytes"); static_assert(sizeof(tle) == 4, "sizeof(tle) must be 4 Bytes");