summaryrefslogtreecommitdiff
path: root/core/fxcrt
diff options
context:
space:
mode:
Diffstat (limited to 'core/fxcrt')
-rw-r--r--core/fxcrt/cfx_binarybuf.cpp92
-rw-r--r--core/fxcrt/cfx_binarybuf.h52
-rw-r--r--core/fxcrt/fx_basic.h37
-rw-r--r--core/fxcrt/fx_basic_buffer.cpp82
4 files changed, 145 insertions, 118 deletions
diff --git a/core/fxcrt/cfx_binarybuf.cpp b/core/fxcrt/cfx_binarybuf.cpp
new file mode 100644
index 0000000000..a1388b8d32
--- /dev/null
+++ b/core/fxcrt/cfx_binarybuf.cpp
@@ -0,0 +1,92 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#include "core/fxcrt/cfx_binarybuf.h"
+
+#include <algorithm>
+#include <utility>
+
+CFX_BinaryBuf::CFX_BinaryBuf()
+ : m_AllocStep(0), m_AllocSize(0), m_DataSize(0) {}
+
+CFX_BinaryBuf::CFX_BinaryBuf(FX_STRSIZE size)
+ : m_AllocStep(0), m_AllocSize(size), m_DataSize(size) {
+ m_pBuffer.reset(FX_Alloc(uint8_t, size));
+}
+
+CFX_BinaryBuf::~CFX_BinaryBuf() {}
+
+void CFX_BinaryBuf::Delete(FX_STRSIZE start_index, FX_STRSIZE count) {
+ if (!m_pBuffer || start_index < 0 || count < 0 || count > m_DataSize ||
+ start_index > m_DataSize - count) {
+ return;
+ }
+ memmove(m_pBuffer.get() + start_index, m_pBuffer.get() + start_index + count,
+ m_DataSize - start_index - count);
+ m_DataSize -= count;
+}
+
+void CFX_BinaryBuf::Clear() {
+ m_DataSize = 0;
+}
+
+std::unique_ptr<uint8_t, FxFreeDeleter> CFX_BinaryBuf::DetachBuffer() {
+ m_DataSize = 0;
+ m_AllocSize = 0;
+ return std::move(m_pBuffer);
+}
+
+void CFX_BinaryBuf::EstimateSize(FX_STRSIZE size, FX_STRSIZE step) {
+ m_AllocStep = step;
+ if (m_AllocSize < size)
+ ExpandBuf(size - m_DataSize);
+}
+
+void CFX_BinaryBuf::ExpandBuf(FX_STRSIZE add_size) {
+ FX_SAFE_STRSIZE new_size = m_DataSize;
+ new_size += add_size;
+ if (m_AllocSize >= new_size.ValueOrDie())
+ return;
+
+ int alloc_step = std::max(128, m_AllocStep ? m_AllocStep : m_AllocSize / 4);
+ new_size += alloc_step - 1; // Quantize, don't combine these lines.
+ new_size /= alloc_step;
+ new_size *= alloc_step;
+ m_AllocSize = new_size.ValueOrDie();
+ m_pBuffer.reset(m_pBuffer
+ ? FX_Realloc(uint8_t, m_pBuffer.release(), m_AllocSize)
+ : FX_Alloc(uint8_t, m_AllocSize));
+}
+
+void CFX_BinaryBuf::AppendBlock(const void* pBuf, FX_STRSIZE size) {
+ if (size <= 0)
+ return;
+
+ ExpandBuf(size);
+ if (pBuf) {
+ memcpy(m_pBuffer.get() + m_DataSize, pBuf, size);
+ } else {
+ memset(m_pBuffer.get() + m_DataSize, 0, size);
+ }
+ m_DataSize += size;
+}
+
+void CFX_BinaryBuf::InsertBlock(FX_STRSIZE pos,
+ const void* pBuf,
+ FX_STRSIZE size) {
+ if (size <= 0)
+ return;
+
+ ExpandBuf(size);
+ memmove(m_pBuffer.get() + pos + size, m_pBuffer.get() + pos,
+ m_DataSize - pos);
+ if (pBuf) {
+ memcpy(m_pBuffer.get() + pos, pBuf, size);
+ } else {
+ memset(m_pBuffer.get() + pos, 0, size);
+ }
+ m_DataSize += size;
+}
diff --git a/core/fxcrt/cfx_binarybuf.h b/core/fxcrt/cfx_binarybuf.h
new file mode 100644
index 0000000000..3081d02902
--- /dev/null
+++ b/core/fxcrt/cfx_binarybuf.h
@@ -0,0 +1,52 @@
+// Copyright 2017 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef CORE_FXCRT_CFX_BINARYBUF_H_
+#define CORE_FXCRT_CFX_BINARYBUF_H_
+
+#include <memory>
+
+#include "core/fxcrt/fx_memory.h"
+#include "core/fxcrt/fx_string.h"
+#include "core/fxcrt/fx_system.h"
+
+class CFX_BinaryBuf {
+ public:
+ CFX_BinaryBuf();
+ explicit CFX_BinaryBuf(FX_STRSIZE size);
+ ~CFX_BinaryBuf();
+
+ uint8_t* GetBuffer() const { return m_pBuffer.get(); }
+ FX_STRSIZE GetSize() const { return m_DataSize; }
+
+ void Clear();
+ void EstimateSize(FX_STRSIZE size, FX_STRSIZE alloc_step = 0);
+ void AppendBlock(const void* pBuf, FX_STRSIZE size);
+ void AppendString(const CFX_ByteString& str) {
+ AppendBlock(str.c_str(), str.GetLength());
+ }
+
+ void AppendByte(uint8_t byte) {
+ ExpandBuf(1);
+ m_pBuffer.get()[m_DataSize++] = byte;
+ }
+
+ void InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size);
+ void Delete(FX_STRSIZE start_index, FX_STRSIZE count);
+
+ // Releases ownership of |m_pBuffer| and returns it.
+ std::unique_ptr<uint8_t, FxFreeDeleter> DetachBuffer();
+
+ protected:
+ void ExpandBuf(FX_STRSIZE size);
+
+ FX_STRSIZE m_AllocStep;
+ FX_STRSIZE m_AllocSize;
+ FX_STRSIZE m_DataSize;
+ std::unique_ptr<uint8_t, FxFreeDeleter> m_pBuffer;
+};
+
+#endif // CORE_FXCRT_CFX_BINARYBUF_H_
diff --git a/core/fxcrt/fx_basic.h b/core/fxcrt/fx_basic.h
index 6f676696a2..6052cc84c8 100644
--- a/core/fxcrt/fx_basic.h
+++ b/core/fxcrt/fx_basic.h
@@ -11,6 +11,7 @@
#include <memory>
#include <vector>
+#include "core/fxcrt/cfx_binarybuf.h"
#include "core/fxcrt/cfx_retain_ptr.h"
#include "core/fxcrt/fx_memory.h"
#include "core/fxcrt/fx_stream.h"
@@ -21,42 +22,6 @@
#define FX_IsOdd(a) ((a)&1)
#endif // PDF_ENABLE_XFA
-class CFX_BinaryBuf {
- public:
- CFX_BinaryBuf();
- explicit CFX_BinaryBuf(FX_STRSIZE size);
- ~CFX_BinaryBuf();
-
- uint8_t* GetBuffer() const { return m_pBuffer.get(); }
- FX_STRSIZE GetSize() const { return m_DataSize; }
-
- void Clear();
- void EstimateSize(FX_STRSIZE size, FX_STRSIZE alloc_step = 0);
- void AppendBlock(const void* pBuf, FX_STRSIZE size);
- void AppendString(const CFX_ByteString& str) {
- AppendBlock(str.c_str(), str.GetLength());
- }
-
- void AppendByte(uint8_t byte) {
- ExpandBuf(1);
- m_pBuffer.get()[m_DataSize++] = byte;
- }
-
- void InsertBlock(FX_STRSIZE pos, const void* pBuf, FX_STRSIZE size);
- void Delete(FX_STRSIZE start_index, FX_STRSIZE count);
-
- // Releases ownership of |m_pBuffer| and returns it.
- std::unique_ptr<uint8_t, FxFreeDeleter> DetachBuffer();
-
- protected:
- void ExpandBuf(FX_STRSIZE size);
-
- FX_STRSIZE m_AllocStep;
- FX_STRSIZE m_AllocSize;
- FX_STRSIZE m_DataSize;
- std::unique_ptr<uint8_t, FxFreeDeleter> m_pBuffer;
-};
-
class CFX_WideTextBuf : public CFX_BinaryBuf {
public:
void AppendChar(wchar_t wch);
diff --git a/core/fxcrt/fx_basic_buffer.cpp b/core/fxcrt/fx_basic_buffer.cpp
index b93c1bc9da..e282aa4247 100644
--- a/core/fxcrt/fx_basic_buffer.cpp
+++ b/core/fxcrt/fx_basic_buffer.cpp
@@ -13,88 +13,6 @@
#include "core/fxcrt/fx_safe_types.h"
#include "third_party/base/numerics/safe_conversions.h"
-CFX_BinaryBuf::CFX_BinaryBuf()
- : m_AllocStep(0), m_AllocSize(0), m_DataSize(0) {}
-
-CFX_BinaryBuf::CFX_BinaryBuf(FX_STRSIZE size)
- : m_AllocStep(0), m_AllocSize(size), m_DataSize(size) {
- m_pBuffer.reset(FX_Alloc(uint8_t, size));
-}
-
-CFX_BinaryBuf::~CFX_BinaryBuf() {}
-
-void CFX_BinaryBuf::Delete(FX_STRSIZE start_index, FX_STRSIZE count) {
- if (!m_pBuffer || start_index < 0 || count < 0 || count > m_DataSize ||
- start_index > m_DataSize - count) {
- return;
- }
- memmove(m_pBuffer.get() + start_index, m_pBuffer.get() + start_index + count,
- m_DataSize - start_index - count);
- m_DataSize -= count;
-}
-
-void CFX_BinaryBuf::Clear() {
- m_DataSize = 0;
-}
-
-std::unique_ptr<uint8_t, FxFreeDeleter> CFX_BinaryBuf::DetachBuffer() {
- m_DataSize = 0;
- m_AllocSize = 0;
- return std::move(m_pBuffer);
-}
-
-void CFX_BinaryBuf::EstimateSize(FX_STRSIZE size, FX_STRSIZE step) {
- m_AllocStep = step;
- if (m_AllocSize < size)
- ExpandBuf(size - m_DataSize);
-}
-
-void CFX_BinaryBuf::ExpandBuf(FX_STRSIZE add_size) {
- FX_SAFE_STRSIZE new_size = m_DataSize;
- new_size += add_size;
- if (m_AllocSize >= new_size.ValueOrDie())
- return;
-
- int alloc_step = std::max(128, m_AllocStep ? m_AllocStep : m_AllocSize / 4);
- new_size += alloc_step - 1; // Quantize, don't combine these lines.
- new_size /= alloc_step;
- new_size *= alloc_step;
- m_AllocSize = new_size.ValueOrDie();
- m_pBuffer.reset(m_pBuffer
- ? FX_Realloc(uint8_t, m_pBuffer.release(), m_AllocSize)
- : FX_Alloc(uint8_t, m_AllocSize));
-}
-
-void CFX_BinaryBuf::AppendBlock(const void* pBuf, FX_STRSIZE size) {
- if (size <= 0)
- return;
-
- ExpandBuf(size);
- if (pBuf) {
- memcpy(m_pBuffer.get() + m_DataSize, pBuf, size);
- } else {
- memset(m_pBuffer.get() + m_DataSize, 0, size);
- }
- m_DataSize += size;
-}
-
-void CFX_BinaryBuf::InsertBlock(FX_STRSIZE pos,
- const void* pBuf,
- FX_STRSIZE size) {
- if (size <= 0)
- return;
-
- ExpandBuf(size);
- memmove(m_pBuffer.get() + pos + size, m_pBuffer.get() + pos,
- m_DataSize - pos);
- if (pBuf) {
- memcpy(m_pBuffer.get() + pos, pBuf, size);
- } else {
- memset(m_pBuffer.get() + pos, 0, size);
- }
- m_DataSize += size;
-}
-
void CFX_WideTextBuf::AppendChar(wchar_t ch) {
ExpandBuf(sizeof(wchar_t));
*(wchar_t*)(m_pBuffer.get() + m_DataSize) = ch;