1 // Copyright Daniel Wallin 2008. Use, modification and distribution is
2 // subject to the Boost Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 
5 #ifndef LUABIND_CONVERSION_STORAGE_080930_HPP
6 # define LUABIND_CONVERSION_STORAGE_080930_HPP
7 
8 # include <luabind/config.hpp>
9 # include <boost/aligned_storage.hpp>
10 
11 namespace luabind { namespace detail {
12 
13 typedef void(*destruction_function)(void*);
14 
15 // This is used by the converters in policy.hpp, and
16 // class_rep::convert_to as temporary storage when constructing
17 // holders.
18 
19 struct conversion_storage
20 {
conversion_storageluabind::detail::conversion_storage21     conversion_storage()
22       : destructor(0)
23     {}
24 
~conversion_storageluabind::detail::conversion_storage25     ~conversion_storage()
26     {
27         if (destructor)
28             destructor(&data);
29     }
30 
31     // Unfortunately the converters currently doesn't have access to
32     // the actual type being converted when this is instantiated, so
33     // we have to guess a max size.
34     boost::aligned_storage<128> data;
35     destruction_function destructor;
36 };
37 
38 }} // namespace luabind::detail
39 
40 #endif // LUABIND_CONVERSION_STORAGE_080930_HPP
41 
42