| Index: src/ostreams.h
|
| diff --git a/src/ostreams.h b/src/ostreams.h
|
| index 508a88d88698259ffb50d05db53ce9d620dd7251..65ae2ff1ff0218afd0d6ff61f0d354f819e68e48 100644
|
| --- a/src/ostreams.h
|
| +++ b/src/ostreams.h
|
| @@ -5,9 +5,11 @@
|
| #ifndef V8_OSTREAMS_H_
|
| #define V8_OSTREAMS_H_
|
|
|
| -#include <stddef.h>
|
| -#include <stdio.h>
|
| -#include <string.h>
|
| +#include <cstddef>
|
| +#include <cstdio>
|
| +#include <cstring>
|
| +#include <ostream> // NOLINT
|
| +#include <streambuf>
|
|
|
| #include "include/v8config.h"
|
| #include "src/base/macros.h"
|
| @@ -15,104 +17,28 @@
|
| namespace v8 {
|
| namespace internal {
|
|
|
| -// An abstract base class for output streams with a cut-down standard interface.
|
| -class OStream {
|
| - public:
|
| - OStream() : hex_(false) { }
|
| - virtual ~OStream() { }
|
| -
|
| - // For manipulators like 'os << endl' or 'os << flush', etc.
|
| - OStream& operator<<(OStream& (*manipulator)(OStream& os)) {
|
| - return manipulator(*this);
|
| - }
|
| -
|
| - // Numeric conversions.
|
| - OStream& operator<<(short x); // NOLINT(runtime/int)
|
| - OStream& operator<<(unsigned short x); // NOLINT(runtime/int)
|
| - OStream& operator<<(int x);
|
| - OStream& operator<<(unsigned int x);
|
| - OStream& operator<<(long x); // NOLINT(runtime/int)
|
| - OStream& operator<<(unsigned long x); // NOLINT(runtime/int)
|
| - OStream& operator<<(long long x); // NOLINT(runtime/int)
|
| - OStream& operator<<(unsigned long long x); // NOLINT(runtime/int)
|
| - OStream& operator<<(double x);
|
| - OStream& operator<<(void* x);
|
| -
|
| - // Character output.
|
| - OStream& operator<<(char x);
|
| - OStream& operator<<(signed char x);
|
| - OStream& operator<<(unsigned char x);
|
| - OStream& operator<<(const char* s) { return write(s, strlen(s)); }
|
| - OStream& put(char c) { return write(&c, 1); }
|
| -
|
| - // Primitive format flag handling, can be extended if needed.
|
| - OStream& dec();
|
| - OStream& hex();
|
| -
|
| - virtual OStream& write(const char* s, size_t n) = 0;
|
| - virtual OStream& flush() = 0;
|
| -
|
| - private:
|
| - template<class T> OStream& print(const char* format, T x);
|
| -
|
| - bool hex_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(OStream);
|
| -};
|
| -
|
| -
|
| -// Some manipulators.
|
| -OStream& flush(OStream& os); // NOLINT(runtime/references)
|
| -OStream& endl(OStream& os); // NOLINT(runtime/references)
|
| -OStream& dec(OStream& os); // NOLINT(runtime/references)
|
| -OStream& hex(OStream& os); // NOLINT(runtime/references)
|
| -
|
| -
|
| -// An output stream writing to a character buffer.
|
| -class OStringStream: public OStream {
|
| - public:
|
| - OStringStream() : size_(0), capacity_(32), data_(allocate(capacity_)) {
|
| - data_[0] = '\0';
|
| - }
|
| - ~OStringStream() { deallocate(data_, capacity_); }
|
| -
|
| - size_t size() const { return size_; }
|
| - size_t capacity() const { return capacity_; }
|
| - const char* data() const { return data_; }
|
| -
|
| - // Internally, our character data is always 0-terminated.
|
| - const char* c_str() const { return data(); }
|
| +class OFStreamBase : public std::streambuf {
|
| + protected:
|
| + explicit OFStreamBase(FILE* f);
|
| + virtual ~OFStreamBase();
|
|
|
| - virtual OStringStream& write(const char* s, size_t n) OVERRIDE;
|
| - virtual OStringStream& flush() OVERRIDE;
|
| + virtual int_type sync() FINAL;
|
| + virtual int_type overflow(int_type c) FINAL;
|
|
|
| private:
|
| - // Primitive allocator interface, can be extracted if needed.
|
| - static char* allocate (size_t n) { return new char[n]; }
|
| - static void deallocate (char* s, size_t n) { delete[] s; }
|
| -
|
| - void reserve(size_t requested_capacity);
|
| -
|
| - size_t size_;
|
| - size_t capacity_;
|
| - char* data_;
|
| + FILE* const f_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(OStringStream);
|
| + DISALLOW_COPY_AND_ASSIGN(OFStreamBase);
|
| };
|
|
|
|
|
| // An output stream writing to a file.
|
| -class OFStream: public OStream {
|
| +class OFStream FINAL : private virtual OFStreamBase, public std::ostream {
|
| public:
|
| - explicit OFStream(FILE* f) : f_(f) { }
|
| - virtual ~OFStream() { }
|
| -
|
| - virtual OFStream& write(const char* s, size_t n) OVERRIDE;
|
| - virtual OFStream& flush() OVERRIDE;
|
| + explicit OFStream(FILE* f);
|
| + ~OFStream();
|
|
|
| private:
|
| - FILE* const f_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(OFStream);
|
| };
|
|
|
| @@ -133,11 +59,13 @@ struct AsReversiblyEscapedUC16 {
|
| // Writes the given character to the output escaping everything outside of
|
| // printable/space ASCII range. Additionally escapes '\' making escaping
|
| // reversible.
|
| -OStream& operator<<(OStream& os, const AsReversiblyEscapedUC16& c);
|
| +std::ostream& operator<<(std::ostream& os, const AsReversiblyEscapedUC16& c);
|
|
|
| // Writes the given character to the output escaping everything outside
|
| // of printable ASCII range.
|
| -OStream& operator<<(OStream& os, const AsUC16& c);
|
| -} } // namespace v8::internal
|
| +std::ostream& operator<<(std::ostream& os, const AsUC16& c);
|
| +
|
| +} // namespace internal
|
| +} // namespace v8
|
|
|
| #endif // V8_OSTREAMS_H_
|
|
|