| 253 | */ |
| 254 | template <typename Container, typename Size = int64_t> |
| 255 | inline void write_vector_like(const Container& o, buffer_t& bytes, int64_t offset) |
| 256 | { |
| 257 | if constexpr (std::is_standard_layout_v<typename Container::value_type> && |
| 258 | std::is_trivial_v<typename Container::value_type>) { |
| 259 | offset = write(static_cast<Size>(o.size()), bytes, offset); |
| 260 | ASSERT(bytes.size() - offset >= o.size() * sizeof(typename Container::value_type)); |
| 261 | std::memcpy(bytes.data() + offset, o.data(), o.size() * sizeof(typename Container::value_type)); |
| 262 | } else { |
| 263 | write_container(o, bytes, offset); |
| 264 | } |
| 265 | } |
| 266 | |
| 267 | /** |
| 268 | * @brief Utility to write vector like container, which has no known output size. |