30#if defined(__cpp_lib_format)
64 return lhs.m_index == rhs.m_index;
74 const char* m_current;
75 std::string_view m_key;
76 std::string_view m_value;
99 int32_t m_num_pairs = 0;
101 friend key_value_view_iterator;
104 template <
typename T>
106 && std::same_as<std::ranges::range_value_t<T>,
metadata_pair>;
108 template <input_metadata_container T>
111 const auto number_of_key_values =
static_cast<int32_t
>(metadata.size());
112 const size_t metadata_size = std::accumulate(
116 [](
size_t acc,
const auto& pair)
118 return acc + sizeof(int32_t)
121 + pair.second.size();
124 const size_t total_size =
sizeof(int32_t) + metadata_size;
125 std::string metadata_buf(total_size,
'\0');
126 char* metadata_ptr = metadata_buf.data();
127 std::memcpy(metadata_ptr, &number_of_key_values,
sizeof(int32_t));
128 metadata_ptr +=
sizeof(int32_t);
129 for (
const auto& [key, value] : metadata)
134 const auto key_size =
static_cast<int32_t
>(key.size());
135 std::memcpy(metadata_ptr, &key_size,
sizeof(int32_t));
136 metadata_ptr +=
sizeof(int32_t);
139 metadata_ptr += key.size();
141 const auto value_size =
static_cast<int32_t
>(value.size());
142 std::memcpy(metadata_ptr, &value_size,
sizeof(int32_t));
143 metadata_ptr +=
sizeof(int32_t);
146 metadata_ptr += value.size();
153#if defined(__cpp_lib_format) && !defined(__cpp_lib_format_ranges)
156struct std::formatter<
sparrow::key_value_view>
158 constexpr auto parse(std::format_parse_context& ctx)
163 auto format(
const sparrow::key_value_view& array, std::format_context& ctx)
const
165 auto out = ctx.out();
169 for (
const auto& elem : array)
176 out = std::format_to(out,
"({}:{})", elem.first, elem.second);
187 os << std::format(
"{}", value);
std::ptrdiff_t difference_type
SPARROW_API key_value_view_iterator & operator++()
friend bool operator==(const key_value_view_iterator &lhs, const key_value_view_iterator &rhs)
SPARROW_API key_value_view_iterator(const key_value_view &parent, int32_t index)
SPARROW_API value_type operator*() const
std::input_iterator_tag iterator_category
SPARROW_API key_value_view_iterator begin() const
SPARROW_API size_t size() const
SPARROW_API key_value_view_iterator end() const
SPARROW_API key_value_view_iterator cend() const
SPARROW_API key_value_view(const char *ptr)
SPARROW_API key_value_view_iterator cbegin() const
#define SPARROW_ASSERT_TRUE(expr__)
constexpr std::ranges::copy_result< std::ranges::borrowed_iterator_t< R >, O > copy(R &&r, O result)
SPARROW_API int32_t extract_int32(const char *&ptr)
std::string get_metadata_from_key_values(const T &metadata)
std::string_view metadata_value
std::string_view metadata_key
std::pair< metadata_key, metadata_value > metadata_pair
std::ostream & operator<<(std::ostream &os, const sparrow::nullval_t &)