36#if FB_CPP_USE_BOOST_MULTIPRECISION != 0
37#include <boost/multiprecision/cpp_int.hpp>
38#include <boost/multiprecision/cpp_dec_float.hpp>
53 bool operator==(
const ScaledNumber&)
const noexcept =
default;
81#if FB_CPP_USE_BOOST_MULTIPRECISION != 0
93#if FB_CPP_USE_BOOST_MULTIPRECISION != 0
97 using BoostDecFloat16 = boost::multiprecision::number<boost::multiprecision::cpp_dec_float<16>>;
102 using BoostDecFloat34 = boost::multiprecision::number<boost::multiprecision::cpp_dec_float<34>>;
108 using Date = std::chrono::year_month_day;
113 using Time = std::chrono::hh_mm_ss<std::chrono::microseconds>;
120 bool operator==(
const Timestamp& o)
const noexcept
130 std::chrono::local_time<std::chrono::microseconds>
toLocalTime() const noexcept
132 return std::chrono::local_days{
date} +
time.to_duration();
140 const auto days = std::chrono::floor<std::chrono::days>(value);
141 const Date dateValue{days};
142 const auto timeOfDay = std::chrono::duration_cast<std::chrono::microseconds>(value - days);
163 bool operator==(
const TimeTz& o)
const noexcept
184 bool operator==(
const TimestampTz&)
const noexcept =
default;
222 bool operator==(
const OpaqueDate&)
const noexcept =
default;
235 bool operator==(
const OpaqueTime&)
const noexcept =
default;
250 return value.timestamp_date == o.
value.timestamp_date &&
value.timestamp_time == o.
value.timestamp_time;
282 return value.utc_timestamp.timestamp_date == o.
value.utc_timestamp.timestamp_date &&
283 value.utc_timestamp.timestamp_time == o.
value.utc_timestamp.timestamp_time &&
297 template <
typename T>
300 os << scaledNumber.
value <<
"e" << scaledNumber.
scale;
311struct std::formatter<
fbcpp::ScaledNumber<T>> : std::formatter<T>
316 constexpr auto parse(format_parse_context& ctx)
318 return std::formatter<T>::parse(ctx);
324 template <
typename FormatContext>
327 return std::format_to(
328 ctx.out(),
"{}e{}", std::formatter<T>::format(scaledNumber.
value, ctx), scaledNumber.
scale);
std::ostream & operator<<(std::ostream &os, const fbcpp::ScaledNumber< T > &scaledNumber)
Stream insertion helper that renders the scaled number as value followed by e and the scale.
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 34 > > BoostDecFloat34
34-digit decimal floating point using Boost.Multiprecision.
FB_DEC16 OpaqueDecFloat16
Opaque 16-digit decimal floating point exposed by the Firebird API.
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 16 > > BoostDecFloat16
16-digit decimal floating point using Boost.Multiprecision.
FB_I128 OpaqueInt128
Opaque 128-bit integer exposed by the Firebird API.
std::chrono::year_month_day Date
Firebird SQL calendar date.
FB_DEC34 OpaqueDecFloat34
Opaque 34-digit decimal floating point exposed by the Firebird API.
boost::multiprecision::int128_t BoostInt128
128-bit integer using Boost.Multiprecision.
std::chrono::hh_mm_ss< std::chrono::microseconds > Time
Firebird SQL time-of-day with microsecond resolution.
Wrapper for Firebird date values.
ISC_DATE value
Raw Firebird date representation.
Wrapper for Firebird time-with-time-zone values.
ISC_TIME_TZ value
Raw Firebird time-with-time-zone representation.
Wrapper for Firebird time values.
ISC_TIME value
Raw Firebird time representation.
Wrapper for Firebird timestamp-with-time-zone values.
ISC_TIMESTAMP_TZ value
Raw Firebird timestamp-with-time-zone representation.
Wrapper for Firebird timestamp values.
ISC_TIMESTAMP value
Raw Firebird timestamp representation.
Represents a numeric value with an explicit decimal scale.
int scale
Decimal scale applied to value.
T value
Unscaled numeric value.
Local time bound to a time zone.
Time utcTime
UTC-normalised time-of-day.
std::string zone
Time zone identifier.
Timestamp bound to a time zone.
Timestamp utcTimestamp
UTC-normalised timestamp.
std::string zone
Time zone identifier.
Combined date and time with microsecond precision.
std::chrono::local_time< std::chrono::microseconds > toLocalTime() const noexcept
Converts to std::chrono::local_time<std::chrono::microseconds>.
Time time
Time-of-day component.
Date date
Calendar date component.
static Timestamp fromLocalTime(std::chrono::local_time< std::chrono::microseconds > value) noexcept
Builds a timestamp from a local-time value.