blob: 730403d705285c2f60d24e9ecfeafb9ceaf2374a [file] [log] [blame]
#ifndef UTIL_STRING_STREAM_H
#define UTIL_STRING_STREAM_H
#include "util/fake_ostream.hh"
#include <cassert>
#include <string>
namespace util {
class StringStream : public FakeOStream<StringStream> {
public:
// Semantics: appends to string. Remember to clear first!
explicit StringStream(std::string &out)
: out_(out) {}
StringStream &flush() { return *this; }
StringStream &write(const void *data, std::size_t length) {
out_.append(static_cast<const char*>(data), length);
return *this;
}
protected:
friend class FakeOStream<StringStream>;
char *Ensure(std::size_t amount) {
std::size_t current = out_.size();
out_.resize(out_.size() + amount);
return &out_[current];
}
void AdvanceTo(char *to) {
assert(to <= &*out_.end());
assert(to >= &*out_.begin());
out_.resize(to - &*out_.begin());
}
private:
std::string &out_;
};
} // namespace
#endif // UTIL_STRING_STREAM_H