1d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Copyright 2017 PDFium Authors. All rights reserved. 2d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Use of this source code is governed by a BSD-style license that can be 3d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// found in the LICENSE file. 4d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 5d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 6d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 7d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#ifndef CORE_FXCRT_CFX_FIXEDBUFGROW_H_ 8d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#define CORE_FXCRT_CFX_FIXEDBUFGROW_H_ 9d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 10d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include <memory> 11d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 12d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#include "core/fxcrt/fx_memory.h" 13d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 14d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmanntemplate <class DataType, int FixedSize> 15d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmannclass CFX_FixedBufGrow { 16d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann public: 17d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann explicit CFX_FixedBufGrow(int data_size) { 18d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann if (data_size > FixedSize) { 19d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann m_pGrowData.reset(FX_Alloc(DataType, data_size)); 20d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann return; 21d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 22d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann memset(m_FixedData, 0, sizeof(DataType) * FixedSize); 23d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann } 24d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann operator DataType*() { return m_pGrowData ? m_pGrowData.get() : m_FixedData; } 25d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 26d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann private: 27d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann DataType m_FixedData[FixedSize]; 28d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann std::unique_ptr<DataType, FxFreeDeleter> m_pGrowData; 29d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann}; 30d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann 31d904c1ec7e8d1d86ed56f0dd252435d12cd345aePhilip P. Moltmann#endif // CORE_FXCRT_CFX_FIXEDBUFGROW_H_ 32