26#if defined(SPARROW_USE_DATE_POLYFILL)
30# if defined(__cpp_lib_format)
34struct std::formatter<date::zoned_time<T>>
36 constexpr auto parse(std::format_parse_context& ctx)
41 auto format(
const date::zoned_time<T>& date, std::format_context& ctx)
const
43 std::ostringstream oss;
45 std::string date_str = oss.str();
46 return std::format_to(ctx.out(),
"{}", date_str);
52namespace date = std::chrono;
69#if __cplusplus > 202002L and defined(__STDCPP_FLOAT16_T__) and defined(__STDCPP_FLOAT32_T__) \
70 and defined(__STDCPP_FLOAT64_T__)
71# define SPARROW_STD_FIXED_FLOAT_SUPPORT
76#if defined(SPARROW_STD_FIXED_FLOAT_SUPPORT)
79# include "sparrow/details/3rdparty/float16_t.hpp"
88#if defined(SPARROW_STD_FIXED_FLOAT_SUPPORT)
103 template <
typename Duration,
typename TimeZonePtr = const date::time_zone*>
104 using timestamp = date::zoned_time<Duration, TimeZonePtr>;
110 static_assert(std::is_floating_point_v<float16_t>);
111 static_assert(std::is_floating_point_v<float32_t>);
112 static_assert(std::is_floating_point_v<float64_t>);
113 static_assert(CHAR_BIT == 8);
188 [[nodiscard]]
constexpr bool all_digits(
const std::string_view s)
196 return !std::isdigit(c);
211 if (format.size() == 1)
253 else if (format ==
"vu")
257 else if (format ==
"vz")
262 else if (format.starts_with(
"t"))
268 else if (format ==
"tdm")
272 else if (format.starts_with(
"tss:"))
276 else if (format.starts_with(
"tsm:"))
280 else if (format.starts_with(
"tsu:"))
284 else if (format.starts_with(
"tsn:"))
288 else if (format ==
"tDs")
292 else if (format ==
"tDm")
296 else if (format ==
"tDu")
300 else if (format ==
"tDn")
304 else if (format ==
"tiM")
308 else if (format ==
"tiD")
312 else if (format ==
"tin")
316 else if (format ==
"tts")
320 else if (format ==
"ttm")
324 else if (format ==
"ttu")
328 else if (format ==
"ttn")
333 else if (format ==
"+l")
337 else if (format ==
"+L")
341 else if (format ==
"+vl")
345 else if (format ==
"+vL")
349 else if (format.starts_with(
"+w:"))
353 else if (format ==
"+s")
357 else if (format ==
"+m")
361 else if (format.starts_with(
"+ud:"))
365 else if (format.starts_with(
"+us:"))
369 else if (format.starts_with(
"+r"))
373 else if (format.starts_with(
"d:"))
387 throw std::runtime_error(
"Invalid format for decimal");
390 else if (format.starts_with(
"w:"))
401 template <std::
floating_po
int T>
402 requires(
sizeof(T) >= 2 &&
sizeof(T) <= 8)
422 template <std::
integral T>
423 requires(
sizeof(T) >= 1 &&
sizeof(T) <= 8)
426 if constexpr (std::same_as<bool, T>)
430 else if constexpr (std::signed_integral<T>)
447 static_assert(std::unsigned_integral<T>);
573 throw std::runtime_error(
"Unsupported data type");
651 std::chrono::seconds,
652 std::chrono::milliseconds,
653 std::chrono::microseconds,
654 std::chrono::nanoseconds,
720 template <
template <
class>
class>
732 typename T::value_type;
755 template <has_arrow_type_traits T>
791 template <
class C,
bool is_const>
793 : std::conditional<is_const, typename C::inner_const_reference, typename C::inner_reference>
797 template <
class C,
bool is_const>
802 concept layout_offset = std::same_as<T, std::int32_t> || std::same_as<T, std::int64_t>;
805#if defined(__cpp_lib_format)
812 constexpr auto parse(std::format_parse_context& ctx)
853 return "Large string";
857 return "Large binary";
861 return "Date milliseconds";
863 return "Timestamp seconds";
865 return "Timestamp milliseconds";
867 return "Timestamp microseconds";
869 return "Timestamp nanoseconds";
871 return "Duration seconds";
873 return "Duration milliseconds";
875 return "Duration microseconds";
877 return "Duration nanoseconds";
879 return "Interval months";
881 return "Interval days time";
883 return "Interval months days nanoseconds";
885 return "Time seconds";
887 return "Time milliseconds";
889 return "Time microseconds";
891 return "Time nanoseconds";
899 return "Large list view";
901 return "Fixed sized list";
907 return "Dense union";
909 return "Sparse union";
911 return "Run encoded";
921 return "Fixed width binary";
923 return "String view";
925 return "Binary view";
930 return std::format_to(ctx.out(),
"{}", get_enum_name(
data_type));
936struct std::formatter<
sparrow::null_type>
938 constexpr auto parse(std::format_parse_context& ctx)
943 auto format(
const sparrow::null_type&, std::format_context& ctx)
const
945 return std::format_to(ctx.out(),
"null_type");
951 os << std::format(
"{}",
"null");
956struct std::formatter<
std::byte>
958 constexpr auto parse(std::format_parse_context& ctx)
963 auto format(
const std::byte& b, std::format_context& ctx)
const
965 return std::format_to(ctx.out(),
"{}",
static_cast<int>(b));
constexpr data_type id() const noexcept
constexpr data_descriptor(data_type id) noexcept
constexpr data_descriptor() noexcept
data_descriptor(std::string_view format) noexcept
Matches any type which is one of the base C++ types supported or at least that provides an arrow_trai...
Matches types providing valid and complete arrow_traits specialization.
Checks if a type is an extended base type for Arrow.
Matches C++ representation types which are supported by default.
Matches valid and complete arrow_traits specializations for type T.
std::chrono::duration< int32_t, std::ratio< 2629746 > > months
typename get_inner_reference< C, is_const >::type get_inner_reference_t
decltype(append(TypeList{}, Us{}...)) append_t
Type alias for appending types or typelists to a given typelist.
constexpr bool is_type_instance_of_v
Variable template for convenient access to is_type_instance_of.
void unreachable()
Invokes undefined behavior for optimization purposes.
consteval bool contains()
Checks if a typelist contains a specific type.
constexpr std::string_view data_type_to_format(data_type type)
SPARROW_API bool operator==(const array &lhs, const array &rhs)
Compares the content of two arrays.
constexpr bool data_type_is_primitive(data_type dt) noexcept
half_float::half float16_t
SPARROW_API std::size_t num_bytes_for_decimal(const char *format)
mpl::append_t< all_base_types_t, char, std::string_view > all_base_types_extended_t
is arrow base type or arrow compound type (list<T>, struct<T> etc.)
date::zoned_time< Duration, TimeZonePtr > timestamp
std::conditional_t< std::same_as< T, std::string_view >, std::string, T > get_corresponding_arrow_type_t
Template alias to get the corresponding Arrow type for a given type.
typename arrow_traits< T >::default_layout default_layout_t
Binary layout type to use by default for the given C++ representation T of an arrow value.
constexpr data_type data_type_from_size(T={}) noexcept
constexpr bool all_digits(const std::string_view s)
std::chrono::time_point< std::chrono::system_clock, std::chrono::milliseconds > date_milliseconds
constexpr bool data_type_is_integer(data_type dt) noexcept
mpl::typelist< null_type, bool, std::uint8_t, std::int8_t, std::uint16_t, std::int16_t, std::uint32_t, std::int32_t, std::uint64_t, std::int64_t, float16_t, float32_t, float64_t, std::string, std::vector< byte_t >, date_days, date_milliseconds, timestamp< std::chrono::seconds >, timestamp< std::chrono::milliseconds >, timestamp< std::chrono::microseconds >, timestamp< std::chrono::nanoseconds >, zoned_time_without_timezone_seconds, zoned_time_without_timezone_milliseconds, zoned_time_without_timezone_microseconds, zoned_time_without_timezone_nanoseconds, std::chrono::seconds, std::chrono::milliseconds, std::chrono::microseconds, std::chrono::nanoseconds, chrono::months, days_time_interval, month_day_nanoseconds_interval, chrono::time_seconds, chrono::time_milliseconds, chrono::time_microseconds, chrono::time_nanoseconds, list_value, struct_value, map_value, decimal< std::int32_t >, decimal< std::int64_t >, decimal< int128_t >, decimal< int256_t > > all_base_types_t
C++ types value representation types matching Arrow types.
constexpr data_type format_to_data_type(std::string_view format)
data_type
Runtime identifier of arrow data types, usually associated with raw bytes with the associated value.
@ INTERVAL_MONTHS_DAYS_NANOSECONDS
std::chrono::time_point< std::chrono::system_clock, chrono::days > date_days
std::ostream & operator<<(std::ostream &os, const sparrow::nullval_t &)
Provides compile-time information about Arrow data types.
A duration representing time elapsed since midnight, in microseconds.
A duration representing time elapsed since midnight, in milliseconds.
A duration representing time elapsed since midnight, in nanoseconds.
A duration representing time elapsed since midnight.
Metafunction for retrieving the data_type of a typed array.
A sequence of types used for metaprogramming operations.
A zoned time value without timezone, in microseconds.
A zoned time value without timezone, in milliseconds.
A zoned time value without timezone, in nanoseconds.
A zoned time value without timezone, in seconds.