diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/text/line_ending.cc')
-rw-r--r-- | chromium/third_party/blink/renderer/platform/text/line_ending.cc | 72 |
1 files changed, 9 insertions, 63 deletions
diff --git a/chromium/third_party/blink/renderer/platform/text/line_ending.cc b/chromium/third_party/blink/renderer/platform/text/line_ending.cc index 9182cbd34a6..442f62d6fd8 100644 --- a/chromium/third_party/blink/renderer/platform/text/line_ending.cc +++ b/chromium/third_party/blink/renderer/platform/text/line_ending.cc @@ -41,55 +41,6 @@ namespace blink { namespace { -class OutputBuffer { - STACK_ALLOCATED(); - DISALLOW_COPY_AND_ASSIGN(OutputBuffer); - - public: - OutputBuffer() = default; - virtual char* Allocate(size_t) = 0; - virtual void Copy(const CString&) = 0; - virtual ~OutputBuffer() = default; -}; - -class CStringBuffer final : public OutputBuffer { - public: - CStringBuffer(CString& buffer) : buffer_(buffer) {} - ~CStringBuffer() override = default; - - char* Allocate(size_t size) override { - char* ptr; - buffer_ = CString::CreateUninitialized(size, ptr); - return ptr; - } - - void Copy(const CString& source) override { buffer_ = source; } - - const CString& Buffer() const { return buffer_; } - - private: - CString buffer_; -}; - -class VectorCharAppendBuffer final : public OutputBuffer { - public: - VectorCharAppendBuffer(Vector<char>& buffer) : buffer_(buffer) {} - ~VectorCharAppendBuffer() override = default; - - char* Allocate(size_t size) override { - size_t old_size = buffer_.size(); - buffer_.Grow(old_size + size); - return buffer_.data() + old_size; - } - - void Copy(const CString& source) override { - buffer_.Append(source.data(), source.length()); - } - - private: - Vector<char>& buffer_; -}; - template <typename CharType> size_t RequiredSizeForCRLF(const CharType* data, size_t length) { size_t new_len = 0; @@ -137,19 +88,24 @@ void NormalizeToCRLF(const CharType* src, size_t src_length, CharType* q) { } } +#if defined(OS_WIN) void InternalNormalizeLineEndingsToCRLF(const CString& from, - OutputBuffer& buffer) { + Vector<char>& buffer) { size_t new_len = RequiredSizeForCRLF(from.data(), from.length()); if (new_len < from.length()) return; if (new_len == from.length()) { - buffer.Copy(from); + buffer.Append(from.data(), from.length()); return; } - NormalizeToCRLF(from.data(), from.length(), buffer.Allocate(new_len)); + size_t old_buffer_size = buffer.size(); + buffer.Grow(old_buffer_size + new_len); + char* write_position = buffer.data() + old_buffer_size; + NormalizeToCRLF(from.data(), from.length(), write_position); } +#endif // defined(OS_WIN) } // namespace @@ -202,15 +158,6 @@ void NormalizeLineEndingsToLF(const CString& from, Vector<char>& result) { } } -CString NormalizeLineEndingsToCRLF(const CString& from) { - if (!from.length()) - return from; - CString result; - CStringBuffer buffer(result); - InternalNormalizeLineEndingsToCRLF(from, buffer); - return buffer.Buffer(); -} - String NormalizeLineEndingsToCRLF(const String& src) { size_t length = src.length(); if (length == 0) @@ -233,8 +180,7 @@ String NormalizeLineEndingsToCRLF(const String& src) { void NormalizeLineEndingsToNative(const CString& from, Vector<char>& result) { #if defined(OS_WIN) - VectorCharAppendBuffer buffer(result); - InternalNormalizeLineEndingsToCRLF(from, buffer); + InternalNormalizeLineEndingsToCRLF(from, result); #else NormalizeLineEndingsToLF(from, result); #endif |