diff options
Diffstat (limited to 'util/string_stream.hh')
-rw-r--r-- | util/string_stream.hh | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/util/string_stream.hh b/util/string_stream.hh new file mode 100644 index 000000000..730403d70 --- /dev/null +++ b/util/string_stream.hh @@ -0,0 +1,44 @@ +#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 |