31#if defined(__cpp_lib_format)
65 return lhs.m_index == rhs.m_index;
80 const char* m_current;
81 std::string_view m_key;
82 std::string_view m_value;
105 int32_t m_num_pairs = 0;
107 friend key_value_view_iterator;
110 template <
typename T>
112 && std::same_as<std::ranges::range_value_t<T>,
metadata_pair>;
114 template <input_metadata_container T>
117 const auto number_of_key_values =
static_cast<int32_t
>(metadata.size());
118 const size_t metadata_size = std::accumulate(
122 [](
size_t acc,
const auto& pair)
124 return acc + sizeof(int32_t)
127 + pair.second.size();
130 const size_t total_size =
sizeof(int32_t) + metadata_size;
131 std::string metadata_buf(total_size,
'\0');
132 char* metadata_ptr = metadata_buf.data();
133 std::memcpy(metadata_ptr, &number_of_key_values,
sizeof(int32_t));
134 metadata_ptr +=
sizeof(int32_t);
135 for (
const auto& [key, value] : metadata)
140 const auto key_size =
static_cast<int32_t
>(key.size());
141 std::memcpy(metadata_ptr, &key_size,
sizeof(int32_t));
142 metadata_ptr +=
sizeof(int32_t);
145 metadata_ptr += key.size();
147 const auto value_size =
static_cast<int32_t
>(value.size());
148 std::memcpy(metadata_ptr, &value_size,
sizeof(int32_t));
149 metadata_ptr +=
sizeof(int32_t);
152 metadata_ptr += value.size();
159#if defined(__cpp_lib_format) && !defined(__cpp_lib_format_ranges)
162struct std::formatter<
sparrow::key_value_view>
164 constexpr auto parse(std::format_parse_context& ctx)
169 auto format(
const sparrow::key_value_view& array, std::format_context& ctx)
const
171 auto out = ctx.out();
175 for (
const auto& elem : array)
182 out = std::format_to(out,
"({}:{})", elem.first, elem.second);
193 os << std::format(
"{}", value);
friend bool operator!=(const key_value_view_iterator &lhs, const key_value_view_iterator &rhs)
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 &)