• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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