5 #ifndef UTIL_SINKSOURCE_H 6 #define UTIL_SINKSOURCE_H 10 #include "base/integral_types.h" 11 #include "base/pod_array.h" 13 #include "strings/stringpiece.h" 14 #include "util/status.h" 26 typedef strings::MutableByteRange WritableBuffer;
32 virtual Status Append(
const strings::ByteRange& slice) = 0;
52 virtual WritableBuffer GetAppendBuffer(
54 WritableBuffer scratch,
55 size_t desired_capacity_hint = 0);
63 DISALLOW_COPY_AND_ASSIGN(
Sink);
69 explicit ZeroCopySink(
void* dest) : dest_(reinterpret_cast<uint8*>(dest)) {}
71 Status Append(
const strings::ByteRange& slice) {
72 memcpy(dest_ + offset_, slice.data(), slice.size());
73 offset_ += slice.size();
77 size_t written()
const {
return offset_; }
84 std::string contents_;
86 Status Append(
const strings::ByteRange& slice) {
87 contents_.append(strings::charptr(slice.data()), slice.size());
91 std::string& contents() {
return contents_; }
92 const std::string& contents()
const {
return contents_; }
112 void Prepend(
const strings::ByteRange& range) {
113 prepend_buf_.insert(prepend_buf_.begin(), range.begin(), range.end());
124 DISALLOW_COPY_AND_ASSIGN(
Source);
126 base::PODArray<uint8> prepend_buf_;
135 explicit StringSource(
const std::string& input, uint32 block_size = kuint32max)
136 : input_(input), block_size_(block_size) {}
138 size_t Available()
const {
return input_.size();};
150 #endif // UTIL_SINKSOURCE_H
virtual StatusObject< size_t > ReadInternal(const strings::MutableByteRange &range)=0
StatusObject< size_t > Read(const strings::MutableByteRange &range)
Reads source into mutable range.