/
AutoFilterArgument.h
61 lines (54 loc) · 1.17 KB
/
AutoFilterArgument.h
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// Copyright (C) 2012-2018 Leap Motion, Inc. All rights reserved.
#pragma once
#include <typeinfo>
namespace autowiring {
template<class T>
class auto_arg;
/// <summary>
/// AutoFilter argument disposition
/// </summary>
struct AutoFilterArgument {
AutoFilterArgument(void) = default;
protected:
AutoFilterArgument(
bool is_input,
bool is_output,
bool is_rvalue,
bool is_shared,
bool is_multi,
auto_id id
) :
is_input(is_input),
is_output(is_output),
is_rvalue(is_rvalue),
is_shared(is_shared),
is_multi(is_multi),
id(id)
{}
public:
const bool is_input = false;
const bool is_output = false;
const bool is_rvalue = false;
const bool is_shared = false;
const bool is_multi = false;
const auto_id id = auto_id_t<void>{};
explicit operator bool(void) const {
return static_cast<bool>(id);
}
};
template<typename T>
struct AutoFilterArgumentT:
AutoFilterArgument
{
AutoFilterArgumentT(void) :
AutoFilterArgument(
auto_arg<T>::is_input,
auto_arg<T>::is_output,
auto_arg<T>::is_rvalue,
auto_arg<T>::is_shared,
auto_arg<T>::is_multi,
typename auto_arg<T>::id_type()
)
{}
};
}