summaryrefslogtreecommitdiff
path: root/abseil-cpp/absl/strings/internal/ostringstream.h
diff options
context:
space:
mode:
authorKrzysztof KosiƄski <krzysio@google.com>2024-01-17 19:55:08 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2024-01-17 19:55:08 +0000
commit5fef89cdb032016850e30ab588bdb7263ee636c8 (patch)
treefb22bbbde0c615b678d2d293a510e985be516a0f /abseil-cpp/absl/strings/internal/ostringstream.h
parenta873048cfe491bbe28f26ac9fa155afcb628ab1a (diff)
parent6f56677b3f8b18c6e63c5779bf3dceea75685c12 (diff)
downloadlibtextclassifier-5fef89cdb032016850e30ab588bdb7263ee636c8.tar.gz
Upgrade the guerrilla import of ABSL. am: 6f56677b3f
Original change: https://android-review.googlesource.com/c/platform/external/libtextclassifier/+/2908817 Change-Id: I7f0bc80c68d9c92c98edd41ce84d574d83c6db84 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'abseil-cpp/absl/strings/internal/ostringstream.h')
-rw-r--r--abseil-cpp/absl/strings/internal/ostringstream.h45
1 files changed, 35 insertions, 10 deletions
diff --git a/abseil-cpp/absl/strings/internal/ostringstream.h b/abseil-cpp/absl/strings/internal/ostringstream.h
index d25d604..c0e237d 100644
--- a/abseil-cpp/absl/strings/internal/ostringstream.h
+++ b/abseil-cpp/absl/strings/internal/ostringstream.h
@@ -16,11 +16,13 @@
#define ABSL_STRINGS_INTERNAL_OSTRINGSTREAM_H_
#include <cassert>
+#include <ios>
#include <ostream>
#include <streambuf>
#include <string>
+#include <utility>
-#include "absl/base/port.h"
+#include "absl/base/config.h"
namespace absl {
ABSL_NAMESPACE_BEGIN
@@ -60,26 +62,49 @@ namespace strings_internal {
// strm << 3.14;
//
// Note: flush() has no effect. No reason to call it.
-class OStringStream : private std::basic_streambuf<char>, public std::ostream {
+class OStringStream final : public std::ostream {
public:
// The argument can be null, in which case you'll need to call str(p) with a
// non-null argument before you can write to the stream.
//
// The destructor of OStringStream doesn't use the std::string. It's OK to
// destroy the std::string before the stream.
- explicit OStringStream(std::string* s) : std::ostream(this), s_(s) {}
+ explicit OStringStream(std::string* str)
+ : std::ostream(&buf_), buf_(str) {}
+ OStringStream(OStringStream&& that)
+ : std::ostream(std::move(static_cast<std::ostream&>(that))),
+ buf_(that.buf_) {
+ rdbuf(&buf_);
+ }
+ OStringStream& operator=(OStringStream&& that) {
+ std::ostream::operator=(std::move(static_cast<std::ostream&>(that)));
+ buf_ = that.buf_;
+ rdbuf(&buf_);
+ return *this;
+ }
- std::string* str() { return s_; }
- const std::string* str() const { return s_; }
- void str(std::string* s) { s_ = s; }
+ std::string* str() { return buf_.str(); }
+ const std::string* str() const { return buf_.str(); }
+ void str(std::string* str) { buf_.str(str); }
private:
- using Buf = std::basic_streambuf<char>;
+ class Streambuf final : public std::streambuf {
+ public:
+ explicit Streambuf(std::string* str) : str_(str) {}
+ Streambuf(const Streambuf&) = default;
+ Streambuf& operator=(const Streambuf&) = default;
- Buf::int_type overflow(int c) override;
- std::streamsize xsputn(const char* s, std::streamsize n) override;
+ std::string* str() { return str_; }
+ const std::string* str() const { return str_; }
+ void str(std::string* str) { str_ = str; }
- std::string* s_;
+ protected:
+ int_type overflow(int c) override;
+ std::streamsize xsputn(const char* s, std::streamsize n) override;
+
+ private:
+ std::string* str_;
+ } buf_;
};
} // namespace strings_internal