diff options
-rw-r--r-- | include/erebos/message.h | 2 | ||||
-rw-r--r-- | include/erebos/service.h | 6 | ||||
-rw-r--r-- | include/erebos/storage.h | 29 | ||||
-rw-r--r-- | include/erebos/time.h | 20 | ||||
-rw-r--r-- | include/erebos/uuid.h | 20 | ||||
-rw-r--r-- | src/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/message.h | 1 | ||||
-rw-r--r-- | src/storage.cpp | 52 | ||||
-rw-r--r-- | src/time.cpp | 35 | ||||
-rw-r--r-- | src/uuid.cpp | 31 |
10 files changed, 117 insertions, 81 deletions
diff --git a/include/erebos/message.h b/include/erebos/message.h index 6415f92..0b5e257 100644 --- a/include/erebos/message.h +++ b/include/erebos/message.h @@ -15,7 +15,7 @@ class DirectMessage { public: const Identity & from() const; - const ZonedTime & time() const; + const struct ZonedTime & time() const; const std::string & text() const; private: diff --git a/include/erebos/service.h b/include/erebos/service.h index 7a6f646..2d6fbce 100644 --- a/include/erebos/service.h +++ b/include/erebos/service.h @@ -1,6 +1,8 @@ #pragma once -#include <erebos/storage.h> +#include <erebos/uuid.h> + +#include <memory> namespace erebos { @@ -17,7 +19,7 @@ public: Context(Priv *); Priv & priv(); - const Ref & ref() const; + const class Ref & ref() const; const class Peer & peer() const; private: diff --git a/include/erebos/storage.h b/include/erebos/storage.h index 4d7c691..d5ae45a 100644 --- a/include/erebos/storage.h +++ b/include/erebos/storage.h @@ -1,8 +1,10 @@ #pragma once +#include <erebos/time.h> +#include <erebos/uuid.h> + #include <algorithm> #include <array> -#include <chrono> #include <cstring> #include <filesystem> #include <memory> @@ -11,8 +13,6 @@ #include <variant> #include <vector> -#include <uuid/uuid.h> - namespace erebos { class Storage; @@ -162,29 +162,6 @@ protected: Ref(const std::shared_ptr<const Priv> p): PartialRef(p) {} }; -struct ZonedTime -{ - explicit ZonedTime(std::string); - ZonedTime(std::chrono::system_clock::time_point t): time(t), zone(0) {} - explicit operator std::string() const; - - static ZonedTime now(); - - std::chrono::system_clock::time_point time; - std::chrono::minutes zone; // zone offset -}; - -struct UUID -{ - explicit UUID(std::string); - explicit operator std::string() const; - - bool operator==(const UUID &) const; - bool operator!=(const UUID &) const; - - uuid_t uuid; -}; - template<class S> class RecordT { diff --git a/include/erebos/time.h b/include/erebos/time.h new file mode 100644 index 0000000..d8ff5b1 --- /dev/null +++ b/include/erebos/time.h @@ -0,0 +1,20 @@ +#pragma once + +#include <chrono> +#include <string> + +namespace erebos { + +struct ZonedTime +{ + explicit ZonedTime(std::string); + ZonedTime(std::chrono::system_clock::time_point t): time(t), zone(0) {} + explicit operator std::string() const; + + static ZonedTime now(); + + std::chrono::system_clock::time_point time; + std::chrono::minutes zone; // zone offset +}; + +} diff --git a/include/erebos/uuid.h b/include/erebos/uuid.h new file mode 100644 index 0000000..31322ea --- /dev/null +++ b/include/erebos/uuid.h @@ -0,0 +1,20 @@ +#pragma once + +#include <uuid/uuid.h> + +#include <string> + +namespace erebos { + +struct UUID +{ + explicit UUID(std::string); + explicit operator std::string() const; + + bool operator==(const UUID &) const; + bool operator!=(const UUID &) const; + + uuid_t uuid; +}; + +} diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d6d5441..64c14b5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,4 +10,6 @@ add_library(erebos pubkey service storage + time + uuid ) diff --git a/src/message.h b/src/message.h index 48487ba..7e0f597 100644 --- a/src/message.h +++ b/src/message.h @@ -3,6 +3,7 @@ #include <erebos/identity.h> #include <erebos/message.h> #include <erebos/storage.h> +#include <erebos/time.h> #include <mutex> #include <vector> diff --git a/src/storage.cpp b/src/storage.cpp index 49bac54..81a70e1 100644 --- a/src/storage.cpp +++ b/src/storage.cpp @@ -535,58 +535,6 @@ const Storage & Ref::storage() const } -ZonedTime::ZonedTime(string str) -{ - intmax_t t; - unsigned int h, m; - char sign[2]; - if (sscanf(str.c_str(), "%jd %1[+-]%2u%2u", &t, sign, &h, &m) != 4) - throw runtime_error("invalid zoned time"); - - time = std::chrono::system_clock::time_point(std::chrono::seconds(t)); - zone = std::chrono::minutes((sign[0] == '-' ? -1 : 1) * (60 * h + m)); -} - -ZonedTime::operator string() const -{ - char buf[32]; - unsigned int az = std::chrono::abs(zone).count(); - snprintf(buf, sizeof(buf), "%jd %c%02u%02u", - (intmax_t) std::chrono::duration_cast<std::chrono::seconds>(time.time_since_epoch()).count(), - zone < decltype(zone)::zero() ? '-' : '+', az / 60, az % 60); - return string(buf); -} - -ZonedTime ZonedTime::now() -{ - return ZonedTime(std::chrono::system_clock::now()); -} - - -UUID::UUID(string str) -{ - if (uuid_parse(str.c_str(), uuid) != 0) - throw runtime_error("invalid UUID"); -} - -UUID::operator string() const -{ - string str(UUID_STR_LEN - 1, '\0'); - uuid_unparse_lower(uuid, str.data()); - return str; -} - -bool UUID::operator==(const UUID & other) const -{ - return std::equal(std::begin(uuid), std::end(uuid), std::begin(other.uuid)); -} - -bool UUID::operator!=(const UUID & other) const -{ - return !(*this == other); -} - - template<class S> RecordT<S>::Item::operator bool() const { diff --git a/src/time.cpp b/src/time.cpp new file mode 100644 index 0000000..631e0f8 --- /dev/null +++ b/src/time.cpp @@ -0,0 +1,35 @@ +#include <erebos/time.h> + +#include <stdexcept> + +using namespace erebos; + +using std::runtime_error; +using std::string; + +ZonedTime::ZonedTime(string str) +{ + intmax_t t; + unsigned int h, m; + char sign[2]; + if (sscanf(str.c_str(), "%jd %1[+-]%2u%2u", &t, sign, &h, &m) != 4) + throw runtime_error("invalid zoned time"); + + time = std::chrono::system_clock::time_point(std::chrono::seconds(t)); + zone = std::chrono::minutes((sign[0] == '-' ? -1 : 1) * (60 * h + m)); +} + +ZonedTime::operator string() const +{ + char buf[32]; + unsigned int az = std::chrono::abs(zone).count(); + snprintf(buf, sizeof(buf), "%jd %c%02u%02u", + (intmax_t) std::chrono::duration_cast<std::chrono::seconds>(time.time_since_epoch()).count(), + zone < decltype(zone)::zero() ? '-' : '+', az / 60, az % 60); + return string(buf); +} + +ZonedTime ZonedTime::now() +{ + return ZonedTime(std::chrono::system_clock::now()); +} diff --git a/src/uuid.cpp b/src/uuid.cpp new file mode 100644 index 0000000..e1f044a --- /dev/null +++ b/src/uuid.cpp @@ -0,0 +1,31 @@ +#include <erebos/uuid.h> + +#include <stdexcept> + +using namespace erebos; + +using std::runtime_error; +using std::string; + +UUID::UUID(string str) +{ + if (uuid_parse(str.c_str(), uuid) != 0) + throw runtime_error("invalid UUID"); +} + +UUID::operator string() const +{ + string str(UUID_STR_LEN - 1, '\0'); + uuid_unparse_lower(uuid, str.data()); + return str; +} + +bool UUID::operator==(const UUID & other) const +{ + return std::equal(std::begin(uuid), std::end(uuid), std::begin(other.uuid)); +} + +bool UUID::operator!=(const UUID & other) const +{ + return !(*this == other); +} |