diff options
author | Karen Arutyunov <karen@codesynthesis.com> | 2024-01-24 17:03:38 +0300 |
---|---|---|
committer | Karen Arutyunov <karen@codesynthesis.com> | 2024-01-24 17:03:38 +0300 |
commit | 0f1f6841ce5a50d5b315c24d796a2d8e2627d136 (patch) | |
tree | e16bbf9e23ca75a88b8af032c4e3ed299ca8db66 /libodb/odb/details/function-wrapper.ixx | |
parent | 823026b58211a4166de06ac243d978dcb9930271 (diff) | |
parent | 26e36b3a9d7b49d46ecfa69b447482251acba8ac (diff) |
Merge branch 'libodb' into multi-package
Diffstat (limited to 'libodb/odb/details/function-wrapper.ixx')
-rw-r--r-- | libodb/odb/details/function-wrapper.ixx | 49 |
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; + } + } +} |