1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #pragma once
7
8 #include <type_traits>
9
10 namespace armnn
11 {
12
13 enum class MemorySource
14 {
15 Undefined = 0,
16 Malloc = 1,
17 DmaBuf = 2,
18 DmaBufProtected = 4
19 };
20
21 using MemorySourceFlags = unsigned int;
22
23 template<typename T>
24 struct IsMemorySource
25 {
26 static const bool value = false;
27 };
28
29 template<>
30 struct IsMemorySource<MemorySource>
31 {
32 static const bool value = true;
33 };
34
35 template <typename Arg, typename std::enable_if<IsMemorySource<Arg>::value>::type* = nullptr>
Combine(Arg sourceA,Arg sourceB)36 MemorySourceFlags Combine(Arg sourceA, Arg sourceB)
37 {
38 return static_cast<MemorySourceFlags>(sourceA) | static_cast<MemorySourceFlags>(sourceB);
39 }
40
41 template <typename Arg, typename ... Args, typename std::enable_if<IsMemorySource<Arg>::value>::type* = nullptr>
Combine(Arg source,Args...rest)42 MemorySourceFlags Combine(Arg source, Args... rest)
43 {
44 return static_cast<MemorySourceFlags>(source) | Combine(rest...);
45 }
46
CheckFlag(MemorySourceFlags flags,MemorySource source)47 inline bool CheckFlag(MemorySourceFlags flags, MemorySource source)
48 {
49 return (static_cast<MemorySourceFlags>(source) & flags) != 0;
50 }
51
52 } //namespace armnn