6 #include "base/pod_array.h" 7 #include "strings/range.h" 12 base::PODArray<uint8> data_;
13 std::vector<uint32> len_;
21 Iterator(
const uint8* pv,
const uint32_t* pl) : pval_(pv), plen_(pl) {
24 strings::ByteRange operator*()
const {
return strings::ByteRange(pval_, *plen_); }
32 bool operator==(
const Iterator& o)
const {
33 return pval_ == o.pval_;
36 bool operator!=(
const Iterator& o)
const {
43 template<
typename U> uint32 Add(
const U* s,
const U* e) {
44 static_assert(
sizeof(U) == 1,
"");
45 uint32 res = len_.size();
47 len_.push_back(e - s);
51 const base::PODArray<uint8>& data()
const {
return data_; }
53 bool empty()
const {
return len_.empty(); }
54 void reserve(
size_t sz) { data_.reserve(sz); }
56 size_t data_size()
const {
return data_.size(); }
57 const std::vector<uint32>& len_array()
const {
return len_; }
64 const_iterator begin()
const {
return Iterator(data_.begin(), len_.data()); }
65 const_iterator end()
const {
return Iterator(data_.end(),
nullptr); }
67 size_t GetMaxSerializedSize()
const;
68 size_t SerializeTo(uint8* dest)
const;
69 void SerializeFrom(
const uint8_t* src, uint32_t count);