1 // 2 // Copyright © 2020 Arm Ltd. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #include "SampleMemoryManager.hpp" 7 8 #include <algorithm> 9 10 namespace sdb // sample dynamic backend 11 { 12 SampleMemoryManager()13SampleMemoryManager::SampleMemoryManager() 14 {} 15 ~SampleMemoryManager()16SampleMemoryManager::~SampleMemoryManager() 17 {} 18 Manage(unsigned int numBytes)19SampleMemoryManager::Pool* SampleMemoryManager::Manage(unsigned int numBytes) 20 { 21 if (!m_FreePools.empty()) 22 { 23 Pool* res = m_FreePools.back(); 24 m_FreePools.pop_back(); 25 res->Reserve(numBytes); 26 return res; 27 } 28 else 29 { 30 m_Pools.push_front(Pool(numBytes)); 31 return &m_Pools.front(); 32 } 33 } 34 Allocate(SampleMemoryManager::Pool * pool)35void SampleMemoryManager::Allocate(SampleMemoryManager::Pool* pool) 36 { 37 m_FreePools.push_back(pool); 38 } 39 GetPointer(SampleMemoryManager::Pool * pool)40void* SampleMemoryManager::GetPointer(SampleMemoryManager::Pool* pool) 41 { 42 return pool->GetPointer(); 43 } 44 Acquire()45void SampleMemoryManager::Acquire() 46 { 47 for (Pool &pool: m_Pools) 48 { 49 pool.Acquire(); 50 } 51 } 52 Release()53void SampleMemoryManager::Release() 54 { 55 for (Pool &pool: m_Pools) 56 { 57 pool.Release(); 58 } 59 } 60 Pool(unsigned int numBytes)61SampleMemoryManager::Pool::Pool(unsigned int numBytes) 62 : m_Size(numBytes), 63 m_Pointer(nullptr) 64 {} 65 ~Pool()66SampleMemoryManager::Pool::~Pool() 67 { 68 if (m_Pointer) 69 { 70 Release(); 71 } 72 } 73 GetPointer()74void* SampleMemoryManager::Pool::GetPointer() 75 { 76 return m_Pointer; 77 } 78 Reserve(unsigned int numBytes)79void SampleMemoryManager::Pool::Reserve(unsigned int numBytes) 80 { 81 m_Size = std::max(m_Size, numBytes); 82 } 83 Acquire()84void SampleMemoryManager::Pool::Acquire() 85 { 86 m_Pointer = ::operator new(size_t(m_Size)); 87 } 88 Release()89void SampleMemoryManager::Pool::Release() 90 { 91 ::operator delete(m_Pointer); 92 m_Pointer = nullptr; 93 } 94 95 } // namespace sdb 96