sparrow 2.4.0
C++20 idiomatic APIs for the Apache Arrow Columnar Format
Loading...
Searching...
No Matches
timestamp_array.hpp
Go to the documentation of this file.
1// Copyright 2024 Man Group Operations Limited
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15#pragma once
16
28#include "sparrow/u8_buffer.hpp"
34
35// tts : timestamp<std::chrono::seconds>
36// tsm : timestamp<std::chrono::milliseconds>
37// tsu : timestamp<std::chrono::microseconds>
38// tsn : timestamp<std::chrono::nanoseconds>
39
40namespace sparrow
41{
42 template <timestamp_type T>
43 class timestamp_array;
44
45 namespace copy_tracker
46 {
47 template <typename T>
49 std::string key()
50 {
51 return "timestamp_array";
52 }
53 }
54
55 template <timestamp_type T>
71
77 template <typename T>
78 struct is_timestamp_array : std::false_type
79 {
80 };
81
87 template <typename T>
88 struct is_timestamp_array<timestamp_array<T>> : std::true_type
89 {
90 };
91
97 template <typename T>
99
107
115
116 namespace detail
117 {
118 template <>
120 {
121 [[nodiscard]] static constexpr sparrow::data_type get()
122 {
124 }
125 };
126
127 template <>
129 {
130 [[nodiscard]] static constexpr sparrow::data_type get()
131 {
133 }
134 };
135
136 template <>
138 {
139 [[nodiscard]] static constexpr sparrow::data_type get()
140 {
142 }
143 };
144
145 template <>
147 {
148 [[nodiscard]] static constexpr sparrow::data_type get()
149 {
151 }
152 };
153 }
154
207 template <timestamp_type T>
208 class timestamp_array final : public mutable_array_bitmap_base<timestamp_array<T>>
209 {
210 public:
211
214
216 using inner_value_type = typename inner_types::inner_value_type;
217 using inner_reference = typename inner_types::inner_reference;
218 using inner_const_reference = typename inner_types::inner_const_reference;
219
221 using bitmap_reference = typename base_type::bitmap_reference;
225 using bitmap_range = typename base_type::bitmap_range;
227
231
235
236 using value_iterator = typename base_type::value_iterator;
237 using const_value_iterator = typename base_type::const_value_iterator;
238
239 using iterator = typename base_type::iterator;
240 using const_iterator = typename base_type::const_iterator;
241
242 using functor_type = typename inner_types::functor_type;
243 using const_functor_type = typename inner_types::const_functor_type;
244
245 using inner_value_type_duration = inner_value_type::duration;
246 using buffer_inner_value_type = inner_value_type_duration::rep;
249
263
303 template <class... Args>
305 constexpr explicit timestamp_array(Args&&... args)
306 : base_type(create_proxy(std::forward<Args>(args)...))
307 , m_timezone(get_timezone(this->get_arrow_proxy()))
308 , m_data_access(this->get_arrow_proxy(), DATA_BUFFER_INDEX)
309 {
310 }
311
326 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
328 const date::time_zone* timezone,
329 std::initializer_list<inner_value_type> init,
330 std::optional<std::string_view> name = std::nullopt,
331 std::optional<METADATA_RANGE> metadata = std::nullopt
332 )
333 : base_type(create_proxy(timezone, init, std::move(name), std::move(metadata)))
334 , m_timezone(timezone)
335 , m_data_access(this->get_arrow_proxy(), DATA_BUFFER_INDEX)
336 {
337 }
338
349 constexpr timestamp_array(const timestamp_array& rhs);
350
363
373 constexpr timestamp_array(timestamp_array&& rhs) noexcept;
374
385 constexpr timestamp_array& operator=(timestamp_array&& rhs) noexcept;
386
387 private:
388
400 [[nodiscard]] constexpr inner_reference value(size_type i);
401
414 [[nodiscard]] constexpr inner_const_reference value(size_type i) const;
415
423 [[nodiscard]] constexpr value_iterator value_begin();
424
432 [[nodiscard]] constexpr value_iterator value_end();
433
441 [[nodiscard]] constexpr const_value_iterator value_cbegin() const;
442
450 [[nodiscard]] constexpr const_value_iterator value_cend() const;
451
453
490 template <input_metadata_container METADATA_RANGE>
491 [[nodiscard]] static arrow_proxy create_proxy(
492 const date::time_zone* timezone,
493 size_type n,
494 std::optional<std::string_view> name = std::nullopt,
495 std::optional<METADATA_RANGE> metadata = std::nullopt
496 );
497
498 //
526 template <
528 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
529 [[nodiscard]] static auto create_proxy(
530 const date::time_zone* timezone,
533 std::optional<std::string_view> name = std::nullopt,
534 std::optional<METADATA_RANGE> metadata = std::nullopt
535 ) -> arrow_proxy;
536
565 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
566 requires std::convertible_to<std::ranges::range_value_t<R>, T>
567 [[nodiscard]] static auto create_proxy(
568 const date::time_zone* timezone,
569 R&& range,
570 bool nullable = true,
571 std::optional<std::string_view> name = std::nullopt,
572 std::optional<METADATA_RANGE> metadata = std::nullopt
573 ) -> arrow_proxy;
574
575
601 template <typename U, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
602 requires std::convertible_to<U, T>
603 [[nodiscard]] static arrow_proxy create_proxy(
604 const date::time_zone* timezone,
605 size_type n,
606 const U& value = U{},
607 std::optional<std::string_view> name = std::nullopt,
608 std::optional<METADATA_RANGE> metadata = std::nullopt
609 );
610
641 template <
642 std::ranges::input_range VALUE_RANGE,
643 validity_bitmap_input VALIDITY_RANGE,
644 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
645 requires(std::convertible_to<std::ranges::range_value_t<VALUE_RANGE>, T>)
646 [[nodiscard]] static arrow_proxy create_proxy(
647 const date::time_zone* timezone,
648 VALUE_RANGE&&,
649 VALIDITY_RANGE&&,
650 std::optional<std::string_view> name = std::nullopt,
651 std::optional<METADATA_RANGE> metadata = std::nullopt
652 );
653
682 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
683 requires std::is_same_v<std::ranges::range_value_t<R>, nullable<T>>
684 [[nodiscard]] static arrow_proxy create_proxy(
685 const date::time_zone* timezone,
686 R&&,
687 std::optional<std::string_view> name = std::nullopt,
688 std::optional<METADATA_RANGE> metadata = std::nullopt
689 );
690
732 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
733 [[nodiscard]] static arrow_proxy create_proxy_impl(
734 const date::time_zone* timezone,
735 u8_buffer<buffer_inner_value_type>&& data_buffer,
736 std::optional<validity_bitmap>&& bitmap,
737 std::optional<std::string_view> name = std::nullopt,
738 std::optional<METADATA_RANGE> metadata = std::nullopt
739 );
740
742
743 // Modifiers
744
756 constexpr void resize_values(size_type new_length, inner_value_type value);
757
772 constexpr value_iterator
773 insert_value(const_value_iterator pos, inner_value_type value, size_type count);
774
792 template <mpl::iterator_of_type<typename timestamp_array<T>::inner_value_type> InputIt>
793 constexpr auto insert_values(const_value_iterator pos, InputIt first, InputIt last) -> value_iterator
794 {
795 const auto input_range = std::ranges::subrange(first, last);
796 const auto values = input_range | std::views::transform(extract_duration);
797 const size_t idx = static_cast<size_t>(std::distance(value_cbegin(), pos));
798 m_data_access.insert_values(idx, values.begin(), values.end());
799 return sparrow::next(value_begin(), idx);
800 }
801
817 constexpr value_iterator erase_values(const_value_iterator pos, size_type count);
818
832 constexpr void assign(const T& rhs, size_type index);
833
847 constexpr void assign(T&& rhs, size_type index);
848
855 [[nodiscard]] static constexpr auto extract_duration(const inner_value_type& timestamp)
857 {
858 return timestamp.get_sys_time().time_since_epoch();
859 }
860
861 const date::time_zone* m_timezone;
862 details::primitive_data_access<inner_value_type_duration> m_data_access;
863
864 static constexpr size_type DATA_BUFFER_INDEX = 1;
865 friend class timestamp_reference<self_type>;
866 friend base_type;
869 friend functor_type;
870 friend const_functor_type;
871 };
872
873 template <timestamp_type T>
875 : base_type(rhs)
876 , m_timezone(rhs.m_timezone)
877 , m_data_access(this->get_arrow_proxy(), DATA_BUFFER_INDEX)
878 {
880 }
881
882 template <timestamp_type T>
884 {
887 m_timezone = rhs.m_timezone;
888 m_data_access.reset_proxy(this->get_arrow_proxy());
889 return *this;
890 }
891
892 template <timestamp_type T>
894 : base_type(std::move(rhs))
895 , m_timezone(rhs.m_timezone)
896 , m_data_access(this->get_arrow_proxy(), DATA_BUFFER_INDEX)
897 {
898 }
899
900 template <timestamp_type T>
902 {
903 base_type::operator=(std::move(rhs));
904 m_timezone = rhs.m_timezone;
905 m_data_access.reset_proxy(this->get_arrow_proxy());
906 return *this;
907 }
908
909 template <timestamp_type T>
911 : base_type(std::move(proxy))
912 , m_timezone(get_timezone(this->get_arrow_proxy()))
913 , m_data_access(this->get_arrow_proxy(), DATA_BUFFER_INDEX)
914 {
915 }
916
917 template <timestamp_type T>
918 template <validity_bitmap_input R, input_metadata_container METADATA_RANGE>
919 auto timestamp_array<T>::create_proxy(
920 const date::time_zone* timezone,
922 R&& bitmap_input,
923 std::optional<std::string_view> name,
924 std::optional<METADATA_RANGE> metadata
925 ) -> arrow_proxy
926 {
927 const auto size = data_buffer.size();
928 validity_bitmap bitmap = ensure_validity_bitmap(size, std::forward<R>(bitmap_input));
929 return create_proxy_impl(
930 timezone,
931 std::forward<u8_buffer<buffer_inner_value_type>>(data_buffer),
932 std::move(bitmap),
933 std::move(name),
934 std::move(metadata)
935 );
936 }
937
938 template <timestamp_type T>
939 template <std::ranges::input_range VALUE_RANGE, validity_bitmap_input VALIDITY_RANGE, input_metadata_container METADATA_RANGE>
940 requires(std::convertible_to<std::ranges::range_value_t<VALUE_RANGE>, T>)
941 arrow_proxy timestamp_array<T>::create_proxy(
942 const date::time_zone* timezone,
943 VALUE_RANGE&& values,
944 VALIDITY_RANGE&& validity_input,
945 std::optional<std::string_view> name,
946 std::optional<METADATA_RANGE> metadata
947 )
948 {
949 constexpr auto extract_duration_count = [](const auto& v)
950 {
951 return v.get_sys_time().time_since_epoch().count();
952 };
953
954 const auto range = values | std::views::transform(extract_duration_count);
955
956 u8_buffer<buffer_inner_value_type> data_buffer(range);
957 return create_proxy(
958 timezone,
959 std::move(data_buffer),
960 std::forward<VALIDITY_RANGE>(validity_input),
961 std::move(name),
962 std::move(metadata)
963 );
964 }
965
966 template <timestamp_type T>
967 template <typename U, input_metadata_container METADATA_RANGE>
968 requires std::convertible_to<U, T>
969 arrow_proxy timestamp_array<T>::create_proxy(
970 const date::time_zone* timezone,
971 size_type n,
972 const U& value,
973 std::optional<std::string_view> name,
974 std::optional<METADATA_RANGE> metadata
975 )
976 {
977 // Extract duration count from the timestamp value
978 const auto duration_count = value.get_sys_time().time_since_epoch().count();
979 u8_buffer<buffer_inner_value_type> data_buffer(n, duration_count);
980 return create_proxy(timezone, std::move(data_buffer), std::move(name), std::move(metadata));
981 }
982
983 template <timestamp_type T>
984 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE>
985 requires std::convertible_to<std::ranges::range_value_t<R>, T>
986 arrow_proxy timestamp_array<T>::create_proxy(
987 const date::time_zone* timezone,
988 R&& range,
989 bool nullable,
990 std::optional<std::string_view> name,
991 std::optional<METADATA_RANGE> metadata
992 )
993 {
994 constexpr auto extract_duration_count = [](const auto& v)
995 {
996 return v.get_sys_time().time_since_epoch().count();
997 };
998
999 std::optional<validity_bitmap> bitmap = nullable ? std::make_optional<validity_bitmap>(
1000 nullptr,
1001 0,
1003 )
1004 : std::nullopt;
1005 const auto values = range | std::views::transform(extract_duration_count);
1006 u8_buffer<buffer_inner_value_type> data_buffer(values);
1007 return self_type::create_proxy_impl(
1008 timezone,
1009 std::move(data_buffer),
1010 std::move(bitmap),
1011 std::move(name),
1012 std::move(metadata)
1013 );
1014 }
1015
1016 // range of nullable values
1017 template <timestamp_type T>
1018 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE>
1019 requires std::is_same_v<std::ranges::range_value_t<R>, nullable<T>>
1020 arrow_proxy timestamp_array<T>::create_proxy(
1021 const date::time_zone* timezone,
1022 R&& range,
1023 std::optional<std::string_view> name,
1024 std::optional<METADATA_RANGE> metadata
1025 )
1026 { // split into values and is_non_null ranges
1027 auto values = range | std::views::transform(nullable_get);
1028 auto is_non_null = range
1029 | std::views::transform(
1030 [](const auto& v)
1031 {
1032 return v.has_value();
1033 }
1034 );
1035 return self_type::create_proxy(timezone, values, is_non_null, std::move(name), std::move(metadata));
1036 }
1037
1038 template <timestamp_type T>
1039 template <input_metadata_container METADATA_RANGE>
1040 arrow_proxy timestamp_array<T>::create_proxy_impl(
1041 const date::time_zone* timezone,
1043 std::optional<validity_bitmap>&& bitmap,
1044 std::optional<std::string_view> name,
1045 std::optional<METADATA_RANGE> metadata
1046 )
1047 {
1048 const auto size = data_buffer.size();
1049 const auto null_count = bitmap.has_value() ? bitmap->null_count() : 0;
1050
1052 format += timezone->name();
1053
1055
1056 const std::optional<std::unordered_set<sparrow::ArrowFlag>>
1057 flags = bitmap.has_value()
1058 ? std::make_optional<std::unordered_set<sparrow::ArrowFlag>>({ArrowFlag::NULLABLE})
1059 : std::nullopt;
1060
1061 // create arrow schema and array
1062 ArrowSchema schema = make_arrow_schema(
1063 std::move(format), // format
1064 std::move(name), // name
1065 std::move(metadata), // metadata
1066 flags, // flags
1067 nullptr, // children
1068 children_ownership, // children ownership
1069 nullptr, // dictionary,
1070 true // dictionary ownership
1071 );
1072
1073 std::vector<buffer<uint8_t>> buffers;
1074 buffers.reserve(2);
1075 buffers.emplace_back(
1076 bitmap.has_value() ? std::move(bitmap.value()).extract_storage()
1077 : buffer<uint8_t>{nullptr, 0, buffer<uint8_t>::default_allocator()}
1078 );
1079 buffers.emplace_back(std::move(data_buffer).extract_storage());
1080
1081 // create arrow array
1082 ArrowArray arr = make_arrow_array(
1083 static_cast<std::int64_t>(size), // length
1084 static_cast<int64_t>(null_count),
1085 0, // offset
1086 std::move(buffers),
1087 nullptr, // children
1088 children_ownership, // children ownership
1089 nullptr, // dictionary
1090 true // dicitonary ownership
1091 );
1092 return arrow_proxy(std::move(arr), std::move(schema));
1093 }
1094
1095 template <timestamp_type T>
1096 constexpr void timestamp_array<T>::assign(const T& rhs, size_type index)
1097 {
1098 SPARROW_ASSERT_TRUE(index < this->size());
1099 m_data_access.value(index) = extract_duration(rhs);
1100 }
1101
1102 template <timestamp_type T>
1103 constexpr void timestamp_array<T>::assign(T&& rhs, size_type index)
1104 {
1105 SPARROW_ASSERT_TRUE(index < this->size());
1106 m_data_access.value(index) = extract_duration(rhs);
1107 }
1108
1109 template <timestamp_type T>
1110 constexpr auto timestamp_array<T>::value(size_type i) -> inner_reference
1111 {
1112 SPARROW_ASSERT_TRUE(i < this->size());
1113 return inner_reference(this, i);
1114 }
1115
1116 template <timestamp_type T>
1117 constexpr auto timestamp_array<T>::value(size_type i) const -> inner_const_reference
1118 {
1119 SPARROW_ASSERT_TRUE(i < this->size());
1120 const auto& val = m_data_access.value(i);
1121 using time_duration = typename T::duration;
1122 const auto sys_time = std::chrono::sys_time<time_duration>{val};
1123 return T{m_timezone, sys_time};
1124 }
1125
1126 template <timestamp_type T>
1127 constexpr auto timestamp_array<T>::value_begin() -> value_iterator
1128 {
1129 return value_iterator(functor_type(this), 0);
1130 }
1131
1132 template <timestamp_type T>
1133 constexpr auto timestamp_array<T>::value_end() -> value_iterator
1134 {
1135 return value_iterator(functor_type(this), this->size());
1136 }
1137
1138 template <timestamp_type T>
1139 constexpr auto timestamp_array<T>::value_cbegin() const -> const_value_iterator
1140 {
1141 return const_value_iterator(const_functor_type(this), 0);
1142 }
1143
1144 template <timestamp_type T>
1145 constexpr auto timestamp_array<T>::value_cend() const -> const_value_iterator
1146 {
1147 return const_value_iterator(const_functor_type(this), this->size());
1148 }
1149
1150 template <timestamp_type T>
1151 constexpr void timestamp_array<T>::resize_values(size_type new_length, inner_value_type value)
1152 {
1153 m_data_access.resize_values(new_length, extract_duration(value));
1154 }
1155
1156 template <timestamp_type T>
1157 constexpr auto
1158 timestamp_array<T>::insert_value(const_value_iterator pos, inner_value_type value, size_type count)
1159 -> value_iterator
1160 {
1161 SPARROW_ASSERT_TRUE(pos <= value_cend());
1162 const size_t idx = static_cast<size_t>(std::distance(value_cbegin(), pos));
1163 m_data_access.insert_value(idx, extract_duration(value), count);
1164 return value_iterator(functor_type(this), idx);
1165 }
1166
1167 template <timestamp_type T>
1168 constexpr auto timestamp_array<T>::erase_values(const_value_iterator pos, size_type count) -> value_iterator
1169 {
1170 SPARROW_ASSERT_TRUE(pos < value_cend());
1171 const size_t idx = static_cast<size_t>(std::distance(value_cbegin(), pos));
1172 m_data_access.erase_values(idx, count);
1173 return value_iterator(functor_type(this), idx);
1174 }
1175}
typename base_type::const_bitmap_range const_bitmap_range
typename base_type::bitmap_iterator bitmap_iterator
typename base_type::iterator_tag iterator_tag
typename base_type::const_bitmap_iterator const_bitmap_iterator
constexpr array_bitmap_base_impl & operator=(const array_bitmap_base_impl &)
std::conditional_t< is_mutable, mutable_array_base< D >, array_crtp_base< D > > base_type
typename base_type::bitmap_const_reference bitmap_const_reference
typename base_type::bitmap_type bitmap_type
typename base_type::difference_type difference_type
Object that owns a piece of contiguous memory.
Definition buffer.hpp:131
constexpr auto insert_values(const_value_iterator pos, InputIt first, InputIt last) -> value_iterator
storage_type extract_storage() noexcept
Extracts the underlying storage (move operation).
constexpr size_type null_count() const noexcept
Returns the number of bits set to false (null/invalid).
typename storage_type::default_allocator default_allocator
A view that repeats a value a given number of times.
Array implementation for storing timestamp values with timezone information.
mutable_array_bitmap_base< self_type > base_type
typename inner_types::inner_reference inner_reference
constexpr timestamp_array(const timestamp_array &rhs)
Copy constructor.
timestamp_array(arrow_proxy)
Constructs timestamp array from Arrow proxy.
typename base_type::const_bitmap_iterator const_bitmap_iterator
constexpr timestamp_array(timestamp_array &&rhs) noexcept
Move constructor.
typename base_type::const_value_iterator const_value_iterator
pointer_iterator< const buffer_inner_value_type * > buffer_inner_const_value_iterator
typename base_type::bitmap_const_reference bitmap_const_reference
constexpr timestamp_array & operator=(const timestamp_array &rhs)
Copy assignment operator.
constexpr timestamp_array & operator=(timestamp_array &&rhs) noexcept
Move assignment operator.
pointer_iterator< buffer_inner_value_type * > buffer_inner_value_iterator
typename base_type::const_bitmap_range const_bitmap_range
constexpr timestamp_array(Args &&... args)
Generic constructor for creating timestamp arrays from various inputs.
nullable< inner_const_reference, bitmap_const_reference > const_reference
typename inner_types::inner_const_reference inner_const_reference
nullable< inner_reference, bitmap_reference > reference
typename base_type::bitmap_reference bitmap_reference
constexpr timestamp_array(const date::time_zone *timezone, std::initializer_list< inner_value_type > init, std::optional< std::string_view > name=std::nullopt, std::optional< METADATA_RANGE > metadata=std::nullopt)
Constructs timestamp array from initializer list.
typename inner_types::const_functor_type const_functor_type
typename inner_types::inner_value_type inner_value_type
Implementation of reference to inner type used for layout L.
This buffer class is used as storage buffer for all sparrow arrays.
Concept for input containers that can provide metadata pairs.
Definition metadata.hpp:332
Concept defining valid input types for validity bitmap creation.
#define SPARROW_ASSERT_TRUE(expr__)
SPARROW_API void increase(const std::string &key)
std::string key()
Definition buffer.hpp:49
constexpr std::size_t size(typelist< T... >={})
Gets the count of types contained in a typelist.
Definition mp_utils.hpp:216
constexpr bool excludes_copy_and_move_ctor_v
Convenience variable template for excludes_copy_and_move_ctor.
constexpr bool is_type_instance_of_v
Variable template for convenient access to is_type_instance_of.
Definition mp_utils.hpp:102
array_bitmap_base_impl< D, true > mutable_array_bitmap_base
Convenient alias for arrays with mutable validity bitmaps.
ArrowSchema make_arrow_schema(F format, N name, std::optional< M > metadata, std::optional< std::unordered_set< ArrowFlag > > flags, ArrowSchema **children, const CHILDREN_OWNERSHIP &children_ownership, ArrowSchema *dictionary, bool dictionary_ownership)
Creates an ArrowSchema owned by a unique_ptr and holding the provided data.
timestamp< std::chrono::microseconds > timestamp_microsecond
constexpr std::string_view data_type_to_format(data_type type)
timestamp< std::chrono::nanoseconds > timestamp_nanosecond
constexpr InputIt next(InputIt it, Distance n)
Definition iterator.hpp:605
SPARROW_API const date::time_zone * get_timezone(const arrow_proxy &proxy)
timestamp_array< timestamp_second > timestamp_seconds_array
Type aliases for timestamp arrays with common durations.
constexpr nullable_get_fn nullable_get
Definition nullable.hpp:102
date::zoned_time< Duration, TimeZonePtr > timestamp
constexpr bool is_timestamp_array_v
Variable template for convenient access to is_timestamp_array.
ArrowArray make_arrow_array(int64_t length, int64_t null_count, int64_t offset, B buffers, ArrowArray **children, const CHILDREN_OWNERSHIP &children_ownership, ArrowArray *dictionary, bool dictionary_ownership)
Creates an ArrowArray.
dynamic_bitset< std::uint8_t > validity_bitmap
Type alias for a validity bitmap using 8-bit storage blocks.
timestamp_array< timestamp_nanosecond > timestamp_nanoseconds_array
timestamp< std::chrono::seconds > timestamp_second
Type aliases for common timestamp durations.
validity_bitmap ensure_validity_bitmap(std::size_t size, R &&validity_input)
Ensures a validity bitmap of the specified size from various input types.
timestamp< std::chrono::milliseconds > timestamp_millisecond
data_type
Runtime identifier of arrow data types, usually associated with raw bytes with the associated value.
timestamp_array< timestamp_microsecond > timestamp_microseconds_array
timestamp_array< timestamp_millisecond > timestamp_milliseconds_array
Extensions to the C++ standard library.
functor_index_iterator< functor_type > value_iterator
functor_index_iterator< const_functor_type > const_value_iterator
detail::layout_value_functor< self_type, inner_reference > functor_type
detail::layout_value_functor< const self_type, inner_const_reference > const_functor_type
Base class for array_inner_types specializations.
Traits class that must be specialized by array implementations.
Metafunction for retrieving the data_type of a typed array.
Type trait to check if a type is a timestamp_array.