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)
130#if defined(SPARROW_STD_FIXED_FLOAT_SUPPORT)
145 template <
typename Duration,
typename TimeZonePtr = const date::time_zone*>
146 using timestamp = date::zoned_time<Duration, TimeZonePtr>;
152#if defined(SPARROW_STD_FIXED_FLOAT_SUPPORT)
153 static_assert(std::floating_point<float16_t>);
154 static_assert(std::floating_point<float32_t>);
155 static_assert(std::floating_point<float64_t>);
161 static_assert(CHAR_BIT == 8);
234 [[nodiscard]]
constexpr bool all_digits(
const std::string_view s)
242 return !std::isdigit(c);
255 if (format.size() == 1)
297 else if (format ==
"vu")
301 else if (format ==
"vz")
305 else if (format.starts_with(
"t"))
311 else if (format ==
"tdm")
315 else if (format.starts_with(
"tss:"))
319 else if (format.starts_with(
"tsm:"))
323 else if (format.starts_with(
"tsu:"))
327 else if (format.starts_with(
"tsn:"))
331 else if (format ==
"tDs")
335 else if (format ==
"tDm")
339 else if (format ==
"tDu")
343 else if (format ==
"tDn")
347 else if (format ==
"tiM")
351 else if (format ==
"tiD")
355 else if (format ==
"tin")
359 else if (format ==
"tts")
363 else if (format ==
"ttm")
367 else if (format ==
"ttu")
371 else if (format ==
"ttn")
376 else if (format ==
"+l")
380 else if (format ==
"+L")
384 else if (format ==
"+vl")
388 else if (format ==
"+vL")
392 else if (format.starts_with(
"+w:"))
396 else if (format ==
"+s")
400 else if (format ==
"+m")
404 else if (format.starts_with(
"+ud:"))
408 else if (format.starts_with(
"+us:"))
412 else if (format.starts_with(
"+r"))
416 else if (format.starts_with(
"d:"))
430 throw std::runtime_error(
"Invalid format for decimal");
433 else if (format.starts_with(
"w:"))
444 template <std::
floating_po
int T>
445 requires(
sizeof(T) >= 2 &&
sizeof(T) <= 8)
461#if !defined(SPARROW_STD_FIXED_FLOAT_SUPPORT)
463 template <
typename T>
464 requires std::same_as<T, float16_t>
474 template <std::
integral T>
475 requires(
sizeof(T) >= 1 &&
sizeof(T) <= 8)
478 if constexpr (std::same_as<bool, T>)
482 else if constexpr (std::signed_integral<T>)
498 static_assert(std::unsigned_integral<T>);
631 throw std::runtime_error(
"Unsupported data type");
709 std::chrono::seconds,
710 std::chrono::milliseconds,
711 std::chrono::microseconds,
712 std::chrono::nanoseconds,
777 template <
template <
class>
class>
789 typename T::value_type;
812 template <has_arrow_type_traits T>
848 template <
class C,
bool is_const>
850 : std::conditional<is_const, typename C::inner_const_reference, typename C::inner_reference>
854 template <
class C,
bool is_const>
859 concept layout_offset = std::same_as<T, std::int32_t> || std::same_as<T, std::int64_t>;
862#if defined(__cpp_lib_format)
869 constexpr auto parse(std::format_parse_context& ctx)
910 return "Large string";
914 return "Large binary";
918 return "Date milliseconds";
920 return "Timestamp seconds";
922 return "Timestamp milliseconds";
924 return "Timestamp microseconds";
926 return "Timestamp nanoseconds";
928 return "Duration seconds";
930 return "Duration milliseconds";
932 return "Duration microseconds";
934 return "Duration nanoseconds";
936 return "Interval months";
938 return "Interval days time";
940 return "Interval months days nanoseconds";
942 return "Time seconds";
944 return "Time milliseconds";
946 return "Time microseconds";
948 return "Time nanoseconds";
956 return "Large list view";
958 return "Fixed sized list";
964 return "Dense union";
966 return "Sparse union";
968 return "Run encoded";
978 return "Fixed width binary";
980 return "String view";
982 return "Binary view";
987 return std::format_to(ctx.out(),
"{}", get_enum_name(
data_type));
993struct std::formatter<
sparrow::null_type>
995 constexpr auto parse(std::format_parse_context& ctx)
1000 auto format(
const sparrow::null_type&, std::format_context& ctx)
const
1002 return std::format_to(ctx.out(),
"null_type");
1010 os << std::format(
"{}",
"null");
Half-precision floating-point type.
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.
Main header file for half-precision functionality.
Main namespace for half-precision functionality.
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)
constexpr bool is_signed_v
constexpr bool is_scalar_v
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::ostream & operator<<(std::ostream &os, const nullval_t &)
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
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 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
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
constexpr bool is_floating_point_v
Extensions to the C++ standard library.
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.