30#if defined(__cpp_lib_format)
172 return lhs.m_index == rhs.m_index;
188 SPARROW_API std::string_view extract_string_view();
204 const char* m_current;
205 std::string_view m_key;
206 std::string_view m_value;
303 int32_t m_num_pairs = 0;
305 friend key_value_view_iterator;
331 template <
typename T>
333 && std::same_as<std::ranges::range_value_t<T>,
metadata_pair>)
334 || std::same_as<T, key_value_view>;
366 template <input_metadata_container T>
371 const auto number_of_key_values =
static_cast<int32_t
>(metadata.size());
373 const size_t metadata_size = std::accumulate(
377 [](
size_t acc,
const auto& pair)
379 return acc + sizeof(int32_t)
382 + pair.second.size();
385 const size_t total_size =
sizeof(int32_t) + metadata_size;
386 std::string metadata_buf(total_size,
'\0');
389 auto metadata_iter = metadata_buf.begin();
390 std::memcpy(&(*metadata_iter), &number_of_key_values,
sizeof(int32_t));
391 std::advance(metadata_iter,
sizeof(int32_t));
393 for (
const auto& [key, value] : metadata)
398 const auto key_size =
static_cast<int32_t
>(key.size());
399 std::memcpy(&(*metadata_iter), &key_size,
sizeof(int32_t));
400 std::advance(metadata_iter,
sizeof(int32_t));
403 std::advance(metadata_iter, key.size());
405 const auto value_size =
static_cast<int32_t
>(value.size());
406 std::memcpy(&(*metadata_iter), &value_size,
sizeof(int32_t));
407 std::advance(metadata_iter,
sizeof(int32_t));
410 std::advance(metadata_iter, value.size());
417#if defined(__cpp_lib_format)
421struct std::formatter<
sparrow::key_value_view>
423 constexpr auto parse(std::format_parse_context& ctx)
428 auto format(
const sparrow::key_value_view& array, std::format_context& ctx)
const
430 auto out = ctx.out();
434 for (
const auto& elem : array)
441 out = std::format_to(out,
"({}:{})", elem.first, elem.second);
454 os << std::format(
"{}", value);
SPARROW_API key_value_view_iterator operator++(int)
Advances the iterator to the next key-value pair.
std::forward_iterator_tag iterator_concept
std::ptrdiff_t difference_type
SPARROW_API key_value_view_iterator & operator++()
Advances the iterator to the next key-value pair.
metadata_pair_const_reference value_type
friend bool operator==(const key_value_view_iterator &lhs, const key_value_view_iterator &rhs)
Equality comparison operator for iterators.
std::forward_iterator_tag iterator_category
SPARROW_API key_value_view_iterator(const key_value_view &parent, int32_t index)
Constructs an iterator for the given view at the specified index.
SPARROW_API value_type operator*() const
Dereferences the iterator to get the current key-value pair.
key_value_view_iterator()
Custom view for lazily extracting key-value pairs from a binary buffer.
SPARROW_API key_value_view_iterator begin() const
Gets iterator to the beginning of the metadata pairs.
SPARROW_API bool empty() const
SPARROW_API size_t size() const
Gets the number of key-value pairs in the metadata.
SPARROW_API key_value_view_iterator find(std::string_view key) const
SPARROW_API key_value_view_iterator end() const
Gets iterator to the end of the metadata pairs.
SPARROW_API key_value_view_iterator cend() const
Gets const iterator to the end of the metadata pairs.
SPARROW_API key_value_view(const char *ptr)
Constructs a view over the given binary metadata buffer.
SPARROW_API key_value_view_iterator cbegin() const
Gets const iterator to the beginning of the metadata pairs.
#define SPARROW_ASSERT_TRUE(expr__)
constexpr std::ranges::copy_result< std::ranges::borrowed_iterator_t< R >, O > copy(R &&r, O result)
SPARROW_API bool operator==(const array &lhs, const array &rhs)
Compares the content of two arrays.
SPARROW_API int32_t extract_int32(const char *&ptr)
Helper function to extract a 32-bit integer from a character buffer.
std::pair< metadata_key_const_reference, metadata_value_const_reference > metadata_pair_const_reference
std::string get_metadata_from_key_values(const T &metadata)
Converts a container of key-value pairs to binary metadata format.
std::string_view metadata_value_const_reference
std::string_view metadata_key_const_reference
std::ostream & operator<<(std::ostream &os, const nullval_t &)
std::pair< metadata_key, metadata_value > metadata_pair
Type alias for metadata key-value pairs.
std::string metadata_key
Type alias for metadata keys.
std::string metadata_value
Type alias for metadata values.