// Copyright 2017 The PDFium Authors // 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_SMALL_BUFFER_H_ #define CORE_FXCRT_SMALL_BUFFER_H_ #include #include #include #include "core/fxcrt/fx_memory_wrappers.h" namespace fxcrt { template class SmallBuffer { public: explicit SmallBuffer(size_t actual_size) : m_pSize(actual_size) { if (actual_size > FixedSize) { m_pDynamicData.reset(FX_Alloc(T, actual_size)); return; } if (actual_size) memset(m_FixedData.data(), 0, sizeof(T) * actual_size); } size_t size() const { return m_pSize; } T* data() { return m_pDynamicData ? m_pDynamicData.get() : m_FixedData.data(); } T* begin() { return data(); } T* end() { return begin() + size(); } // Callers shouldn't need to know these details. T* fixed_for_test() { return m_FixedData.data(); } T* dynamic_for_test() { return m_pDynamicData.get(); } private: const size_t m_pSize; std::unique_ptr m_pDynamicData; std::array m_FixedData; }; } // namespace fxcrt #endif // CORE_FXCRT_SMALL_BUFFER_H_