blob: 9431663e4e2eb5fca3b5db20f71f94f6eed30014 [file] [log] [blame]
Georgios Pinitas99d40952018-04-23 16:26:46 +01001/*
Michele Di Giorgiod9eaf612020-07-08 11:12:57 +01002 * Copyright (c) 2018-2020 Arm Limited.
Georgios Pinitas99d40952018-04-23 16:26:46 +01003 *
4 * SPDX-License-Identifier: MIT
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to
8 * deal in the Software without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in all
14 * copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
Michalis Spyrouf4643372019-11-29 16:17:13 +000024#ifndef ARM_COMPUTE_RUNTIME_IMEMORY_REGION_H
25#define ARM_COMPUTE_RUNTIME_IMEMORY_REGION_H
Georgios Pinitas99d40952018-04-23 16:26:46 +010026
27#include <cstddef>
Georgios Pinitasdf310362018-11-14 13:16:56 +000028#include <memory>
Georgios Pinitas99d40952018-04-23 16:26:46 +010029
30namespace arm_compute
31{
32/** Memory region interface */
33class IMemoryRegion
34{
35public:
36 /** Default constructor
37 *
38 * @param[in] size Region size
39 */
Felix Thomasmathibalanafd38f02023-09-27 17:46:17 +010040 explicit IMemoryRegion(size_t size) : _size(size)
Georgios Pinitas99d40952018-04-23 16:26:46 +010041 {
42 }
43 /** Virtual Destructor */
44 virtual ~IMemoryRegion() = default;
Georgios Pinitasdf310362018-11-14 13:16:56 +000045 /** Extract a sub-region from the memory
46 *
47 * @warning Ownership is maintained by the parent memory,
48 * while a wrapped raw memory region is returned by this function.
49 * Thus parent memory should not be released before this.
50 *
51 *
52 * @param[in] offset Offset to the region
53 * @param[in] size Size of the region
54 *
55 * @return A wrapped memory sub-region with no ownership of the underlying memory
56 */
57 virtual std::unique_ptr<IMemoryRegion> extract_subregion(size_t offset, size_t size) = 0;
Georgios Pinitas99d40952018-04-23 16:26:46 +010058 /** Returns the pointer to the allocated data.
59 *
60 * @return Pointer to the allocated data
61 */
62 virtual void *buffer() = 0;
63 /** Returns the pointer to the allocated data.
64 *
65 * @return Pointer to the allocated data
66 */
Georgios Pinitas74ef1db2020-01-20 17:01:15 +000067 virtual const void *buffer() const = 0;
Georgios Pinitas99d40952018-04-23 16:26:46 +010068 /** Memory region size accessor
69 *
70 * @return Memory region size
71 */
Georgios Pinitasdf310362018-11-14 13:16:56 +000072 size_t size() const
Georgios Pinitas99d40952018-04-23 16:26:46 +010073 {
74 return _size;
75 }
76 /** Sets size of region
77 *
78 * @warning This should only be used in correlation with handle
79 *
80 * @param[in] size Size to set
81 */
82 void set_size(size_t size)
83 {
84 _size = size;
85 }
86
87protected:
88 size_t _size;
89};
90} // namespace arm_compute
Michalis Spyrouf4643372019-11-29 16:17:13 +000091#endif /* ARM_COMPUTE_RUNTIME_IMEMORY_REGION_H */