hobbes
a language, embedded compiler, and runtime for efficient dynamic expression evaluation, data storage and analysis
func.H
Go to the documentation of this file.
1 
2 #ifndef HOBBES_UTIL_FUNC_HPP_INCLUDED
3 #define HOBBES_UTIL_FUNC_HPP_INCLUDED
4 
5 namespace hobbes {
6 
7 template <typename T>
8  struct func {
9  };
10 
11 template <typename R, typename ... Args>
12  struct func<R(Args...)> {
13  static const std::size_t arity = sizeof...(Args);
14  typedef R (*type)(Args...);
15  typedef R result_type;
16  };
17 
18 template <typename R, typename C, typename ... Args>
19  struct func<R(C::*)(Args...)> {
20  static const std::size_t arity = sizeof...(Args);
21  typedef R (*type)(C*, Args...);
22  typedef R result_type;
23  };
24 
25 template <typename T>
26  struct mfnTraits {
27  };
28 
29 template <typename R, typename C, typename ... Args>
30  struct mfnTraits<R(C::*)(Args...)const> {
31  static const int arity = sizeof...(Args);
32  typedef R result_type;
33  typedef C class_type;
34  };
35 
36 template <typename R, typename C, typename ... Args>
37  struct mfnTraits<R(C::*)(Args...)> {
38  static const int arity = sizeof...(Args);
39  typedef R result_type;
40  typedef C class_type;
41  };
42 
43 template <typename X, typename T, T f>
44  struct mfnThunk {
45  };
46 
47 template <typename R, typename C, typename ... Args, typename T, T f>
48  struct mfnThunk<R(C::*)(Args...), T, f> {
49  static R fn(C* c, Args... args) {
50  return (c->*f)(args...);
51  }
52  };
53 template <typename R, typename C, typename ... Args, typename T, T f>
54  struct mfnThunk<R(C::*)(Args...)const, T, f> {
55  static R fn(C* c, Args... args) {
56  return (c->*f)(args...);
57  }
58  };
59 template <typename C, typename ... Args, typename T, T f>
60  struct mfnThunk<void(C::*)(Args...), T, f> {
61  static void fn(C* c, Args... args) {
62  (c->*f)(args...);
63  }
64  };
65 template <typename C, typename ... Args, typename T, T f>
66  struct mfnThunk<void(C::*)(Args...)const, T, f> {
67  static void fn(C* c, Args... args) {
68  (c->*f)(args...);
69  }
70  };
71 
72 }
73 
74 #endif
R result_type
Definition: func.H:39
Definition: func.H:8
R result_type
Definition: func.H:22
Definition: func.H:44
Definition: boot.H:7
static R fn(C *c, Args... args)
Definition: func.H:55
R result_type
Definition: func.H:15
static void fn(C *c, Args... args)
Definition: func.H:61
static R fn(C *c, Args... args)
Definition: func.H:49
static void fn(C *c, Args... args)
Definition: func.H:67
std::map< std::string, llvm::Value * > Args
Definition: dfa.C:1276
Definition: func.H:26
C class_type
Definition: func.H:40