forked from arrayfire/arrayfire
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModuleInterface.hpp
More file actions
46 lines (36 loc) · 1.28 KB
/
ModuleInterface.hpp
File metadata and controls
46 lines (36 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*******************************************************
* Copyright (c) 2020, ArrayFire
* All rights reserved.
*
* This file is distributed under 3-clause BSD license.
* The complete license agreement can be obtained at:
* http://arrayfire.com/licenses/BSD-3-Clause
********************************************************/
#pragma once
namespace common {
/// Instances of this object are stored in jit kernel cache
template<typename ModuleType>
class ModuleInterface {
private:
ModuleType mModuleHandle;
public:
/// \brief Creates an uninitialized Module
ModuleInterface() = default;
/// \brief Creates a module given a backend specific ModuleType
///
/// \param[in] mod The backend specific module
ModuleInterface(ModuleType mod) : mModuleHandle(mod) {}
/// \brief Set module
///
/// \param[in] mod is backend specific module handle
inline void set(ModuleType mod) { mModuleHandle = mod; }
/// \brief Get module
///
/// \returns handle to backend specific module
inline const ModuleType& get() const { return mModuleHandle; }
/// \brief Unload module
virtual void unload() = 0;
/// \brief Returns true if the module mModuleHandle is initialized
virtual operator bool() const = 0;
};
} // namespace common