![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/include/boost/dll/detail/ |
Upload File : |
// Copyright 2016 Klemens Morgenstern, Antony Polukhin // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt // or copy at http://www.boost.org/LICENSE_1_0.txt) // For more information, see http://www.boost.org #ifndef BOOST_DLL_DETAIL_TYPE_INFO_HPP_ #define BOOST_DLL_DETAIL_TYPE_INFO_HPP_ #include <typeinfo> #include <cstring> #include <boost/dll/config.hpp> #if defined(BOOST_MSVC) || defined(BOOST_MSVC_VER) #include <boost/winapi/basic_types.hpp> #endif namespace boost { namespace dll { namespace detail { #if defined(BOOST_MSVC) || defined(BOOST_MSVC_VER) #if defined ( _WIN64 ) template<typename Class, typename Lib, typename Storage> const std::type_info& load_type_info(Lib & lib, Storage & storage) { struct RTTICompleteObjectLocator { boost::winapi::DWORD_ signature; //always zero ? boost::winapi::DWORD_ offset; //offset of this vtable in the complete class boost::winapi::DWORD_ cdOffset; //constructor displacement offset boost::winapi::DWORD_ pTypeDescriptorOffset; //TypeDescriptor of the complete class boost::winapi::DWORD_ pClassDescriptorOffset; //describes inheritance hierarchy (ignored) }; RTTICompleteObjectLocator** vtable_p = &lib.template get<RTTICompleteObjectLocator*>(storage.template get_vtable<Class>()); vtable_p--; auto vtable = *vtable_p; auto nat = reinterpret_cast<const char*>(lib.native()); nat += vtable->pTypeDescriptorOffset; return *reinterpret_cast<const std::type_info*>(nat); } #else template<typename Class, typename Lib, typename Storage> const std::type_info& load_type_info(Lib & lib, Storage & storage) { struct RTTICompleteObjectLocator { boost::winapi::DWORD_ signature; //always zero ? boost::winapi::DWORD_ offset; //offset of this vtable in the complete class boost::winapi::DWORD_ cdOffset; //constructor displacement offset const std::type_info* pTypeDescriptor; //TypeDescriptor of the complete class void* pClassDescriptor; //describes inheritance hierarchy (ignored) }; RTTICompleteObjectLocator** vtable_p = &lib.template get<RTTICompleteObjectLocator*>(storage.template get_vtable<Class>()); vtable_p--; auto vtable = *vtable_p; return *vtable->pTypeDescriptor; } #endif //_WIN64 #else template<typename Class, typename Lib, typename Storage> const std::type_info& load_type_info(Lib & lib, Storage & storage) { return lib.template get<const std::type_info>(storage.template get_type_info<Class>()); } #endif }}} #endif /* BOOST_DLL_DETAIL_TYPE_INFO_HPP_ */