Release 18.08
[platform/upstream/armnn.git] / src / armnn / memory / OffsetMemoryPool.hpp
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // See LICENSE file in the project root for full license information.
4 //
5 #pragma once
6
7 #include "IMemoryPool.hpp"
8
9 #include "arm_compute/runtime/IAllocator.h"
10 #include "arm_compute/runtime/Types.h"
11
12 namespace armnn
13 {
14
15 class OffsetMemoryPool : public IMemoryPool
16 {
17 public:
18     OffsetMemoryPool(arm_compute::IAllocator* allocator, size_t blobSize);
19
20     ~OffsetMemoryPool();
21
22     OffsetMemoryPool(const OffsetMemoryPool&) = delete;
23
24     OffsetMemoryPool& operator=(const OffsetMemoryPool&) = delete;
25
26     OffsetMemoryPool(OffsetMemoryPool&&) = default;
27
28     OffsetMemoryPool& operator=(OffsetMemoryPool &&) = default;
29
30     void acquire(arm_compute::MemoryMappings& handles) override;
31     void release(arm_compute::MemoryMappings& handles) override;
32
33     arm_compute::MappingType mapping_type() const override;
34
35     std::unique_ptr<arm_compute::IMemoryPool> duplicate() override;
36
37     void AllocatePool() override;
38     void ReleasePool() override;
39
40 private:
41     /// Allocator to use for internal allocation
42     arm_compute::IAllocator* m_Allocator;
43
44     /// Memory blob
45     void* m_Blob;
46
47     /// Size of the allocated memory blob
48     size_t m_BlobSize;
49
50     /// Flag indicating whether memory has been allocated for the pool
51     bool m_MemoryAllocated;
52 };
53
54 } // namespace armnn