summaryrefslogtreecommitdiff
path: root/libodb/odb/details/function-wrapper.ixx
diff options
context:
space:
mode:
Diffstat (limited to 'libodb/odb/details/function-wrapper.ixx')
-rw-r--r--libodb/odb/details/function-wrapper.ixx49
1 files changed, 49 insertions, 0 deletions
diff --git a/libodb/odb/details/function-wrapper.ixx b/libodb/odb/details/function-wrapper.ixx
new file mode 100644
index 0000000..5b83b96
--- /dev/null
+++ b/libodb/odb/details/function-wrapper.ixx
@@ -0,0 +1,49 @@
+// file : odb/details/function-wrapper.ixx
+// license : GNU GPL v2; see accompanying LICENSE file
+
+namespace odb
+{
+ namespace details
+ {
+ template <typename F>
+ inline function_wrapper<F>::
+ ~function_wrapper ()
+ {
+ if (deleter != 0)
+ deleter (std_function);
+ }
+
+ template <typename F>
+ inline function_wrapper<F>::
+ function_wrapper (F* f)
+ : function (f), deleter (0), std_function (0)
+ {
+ }
+
+ template <typename F>
+ inline function_wrapper<F>::
+ function_wrapper (const function_wrapper<F>& x)
+ : function (0), deleter (0), std_function (0)
+ {
+ swap (const_cast<function_wrapper<F>&> (x));
+ }
+
+ template <typename F>
+ inline function_wrapper<F>& function_wrapper<F>::
+ operator= (const function_wrapper<F>& x)
+ {
+ swap (const_cast<function_wrapper<F>&> (x));
+ return *this;
+ }
+
+ template <typename F>
+ template <typename R>
+ inline R function_wrapper<F>::
+ cast () const
+ {
+ union { F* f; R r; } r;
+ r.f = function;
+ return r.r;
+ }
+ }
+}