Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'util/string_stream.hh')
-rw-r--r--util/string_stream.hh44
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