/* * Copyright (C) 2015-present ScyllaDB */ /* * SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0 */ #pragma once #include #include #include #include #include "clocks-impl.hh" namespace api { using timestamp_type = int64_t; timestamp_type constexpr missing_timestamp = std::numeric_limits::min(); timestamp_type constexpr min_timestamp = std::numeric_limits::min() + 1; timestamp_type constexpr max_timestamp = std::numeric_limits::max(); // Used for generating server-side mutation timestamps. // Same epoch as Java's System.currentTimeMillis() for compatibility. // Satisfies requirements of Clock. class timestamp_clock final { using base = std::chrono::system_clock; public: using rep = timestamp_type; using duration = std::chrono::microseconds; using period = typename duration::period; using time_point = std::chrono::time_point; static constexpr bool is_steady = base::is_steady; static time_point now() { return time_point(std::chrono::duration_cast(base::now().time_since_epoch())) + get_clocks_offset(); } }; inline timestamp_type new_timestamp() { return timestamp_clock::now().time_since_epoch().count(); } } /* For debugging and log messages. */ std::string format_timestamp(api::timestamp_type);