mirror of
https://github.com/ThePhD/sol2.git
synced 2024-03-22 13:10:44 +08:00
Move code that doesn't need to be in a template, out of the template, to reduce duplicated binary code
This commit is contained in:
parent
1ce551e9ee
commit
37c61eb16b
@ -49,11 +49,9 @@ namespace detail {
|
|||||||
|
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
template <typename T, class seperator_mark = int>
|
inline std::string ctti_get_type_name_from_sig(std::string name) {
|
||||||
inline std::string ctti_get_type_name() {
|
|
||||||
// cardinal sins from MINGW
|
// cardinal sins from MINGW
|
||||||
using namespace std;
|
using namespace std;
|
||||||
std::string name = __PRETTY_FUNCTION__;
|
|
||||||
std::size_t start = name.find_first_of('[');
|
std::size_t start = name.find_first_of('[');
|
||||||
start = name.find_first_of('=', start);
|
start = name.find_first_of('=', start);
|
||||||
std::size_t end = name.find_last_of(']');
|
std::size_t end = name.find_last_of(']');
|
||||||
@ -83,10 +81,13 @@ namespace detail {
|
|||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, class seperator_mark = int>
|
||||||
|
inline std::string ctti_get_type_name() {
|
||||||
|
return ctti_get_type_name_from_sig(__PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
template <typename T>
|
inline std::string ctti_get_type_name_from_sig(std::string name) {
|
||||||
std::string ctti_get_type_name() {
|
|
||||||
std::string name = __FUNCSIG__;
|
|
||||||
std::size_t start = name.find("get_type_name");
|
std::size_t start = name.find("get_type_name");
|
||||||
if (start == std::string::npos)
|
if (start == std::string::npos)
|
||||||
start = 0;
|
start = 0;
|
||||||
@ -117,6 +118,11 @@ namespace detail {
|
|||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
std::string ctti_get_type_name() {
|
||||||
|
return ctti_get_type_name_from_sig(__FUNCSIG__);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#error Compiler not supported for demangling
|
#error Compiler not supported for demangling
|
||||||
#endif // compilers
|
#endif // compilers
|
||||||
@ -127,9 +133,7 @@ namespace detail {
|
|||||||
return realname;
|
return realname;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
inline std::string short_demangle_from_type_name(std::string realname) {
|
||||||
std::string short_demangle_once() {
|
|
||||||
std::string realname = ctti_get_type_name<T>();
|
|
||||||
// This isn't the most complete but it'll do for now...?
|
// This isn't the most complete but it'll do for now...?
|
||||||
static const std::array<std::string, 10> ops = {{"operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*"}};
|
static const std::array<std::string, 10> ops = {{"operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*"}};
|
||||||
int level = 0;
|
int level = 0;
|
||||||
@ -165,6 +169,12 @@ namespace detail {
|
|||||||
return realname;
|
return realname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
std::string short_demangle_once() {
|
||||||
|
std::string realname = ctti_get_type_name<T>();
|
||||||
|
return short_demangle_from_type_name(realname);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
const std::string& demangle() {
|
const std::string& demangle() {
|
||||||
static const std::string d = demangle_once<T>();
|
static const std::string d = demangle_once<T>();
|
||||||
@ -176,7 +186,6 @@ namespace detail {
|
|||||||
static const std::string d = short_demangle_once<T>();
|
static const std::string d = short_demangle_once<T>();
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
}
|
}} // namespace sol::detail
|
||||||
} // namespace sol::detail
|
|
||||||
|
|
||||||
#endif // SOL_DEMANGLE_HPP
|
#endif // SOL_DEMANGLE_HPP
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// This file was generated with a script.
|
// This file was generated with a script.
|
||||||
// Generated 2020-06-06 16:05:17.750133 UTC
|
// Generated 2020-06-18 21:54:34.473478 UTC
|
||||||
// This header was generated with sol v3.2.1 (revision e09d2ff)
|
// This header was generated with sol v3.2.1 (revision 62a831cd)
|
||||||
// https://github.com/ThePhD/sol2
|
// https://github.com/ThePhD/sol2
|
||||||
|
|
||||||
#ifndef SOL_SINGLE_INCLUDE_FORWARD_HPP
|
#ifndef SOL_SINGLE_INCLUDE_FORWARD_HPP
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
// This file was generated with a script.
|
// This file was generated with a script.
|
||||||
// Generated 2020-06-06 16:05:12.150007 UTC
|
// Generated 2020-06-18 21:54:34.347814 UTC
|
||||||
// This header was generated with sol v3.2.1 (revision e09d2ff)
|
// This header was generated with sol v3.2.1 (revision 62a831cd)
|
||||||
// https://github.com/ThePhD/sol2
|
// https://github.com/ThePhD/sol2
|
||||||
|
|
||||||
#ifndef SOL_SINGLE_INCLUDE_HPP
|
#ifndef SOL_SINGLE_INCLUDE_HPP
|
||||||
@ -7620,11 +7620,9 @@ namespace detail {
|
|||||||
"`anonymous namespace'" } };
|
"`anonymous namespace'" } };
|
||||||
|
|
||||||
#if defined(__GNUC__) || defined(__clang__)
|
#if defined(__GNUC__) || defined(__clang__)
|
||||||
template <typename T, class seperator_mark = int>
|
inline std::string ctti_get_type_name_from_sig(std::string name) {
|
||||||
inline std::string ctti_get_type_name() {
|
|
||||||
// cardinal sins from MINGW
|
// cardinal sins from MINGW
|
||||||
using namespace std;
|
using namespace std;
|
||||||
std::string name = __PRETTY_FUNCTION__;
|
|
||||||
std::size_t start = name.find_first_of('[');
|
std::size_t start = name.find_first_of('[');
|
||||||
start = name.find_first_of('=', start);
|
start = name.find_first_of('=', start);
|
||||||
std::size_t end = name.find_last_of(']');
|
std::size_t end = name.find_last_of(']');
|
||||||
@ -7654,10 +7652,13 @@ namespace detail {
|
|||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, class seperator_mark = int>
|
||||||
|
inline std::string ctti_get_type_name() {
|
||||||
|
return ctti_get_type_name_from_sig(__PRETTY_FUNCTION__);
|
||||||
|
}
|
||||||
#elif defined(_MSC_VER)
|
#elif defined(_MSC_VER)
|
||||||
template <typename T>
|
inline std::string ctti_get_type_name_from_sig(std::string name) {
|
||||||
std::string ctti_get_type_name() {
|
|
||||||
std::string name = __FUNCSIG__;
|
|
||||||
std::size_t start = name.find("get_type_name");
|
std::size_t start = name.find("get_type_name");
|
||||||
if (start == std::string::npos)
|
if (start == std::string::npos)
|
||||||
start = 0;
|
start = 0;
|
||||||
@ -7688,6 +7689,11 @@ namespace detail {
|
|||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
std::string ctti_get_type_name() {
|
||||||
|
return ctti_get_type_name_from_sig(__FUNCSIG__);
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
#error Compiler not supported for demangling
|
#error Compiler not supported for demangling
|
||||||
#endif // compilers
|
#endif // compilers
|
||||||
@ -7698,9 +7704,7 @@ namespace detail {
|
|||||||
return realname;
|
return realname;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
inline std::string short_demangle_from_type_name(std::string realname) {
|
||||||
std::string short_demangle_once() {
|
|
||||||
std::string realname = ctti_get_type_name<T>();
|
|
||||||
// This isn't the most complete but it'll do for now...?
|
// This isn't the most complete but it'll do for now...?
|
||||||
static const std::array<std::string, 10> ops = {{"operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*"}};
|
static const std::array<std::string, 10> ops = {{"operator<", "operator<<", "operator<<=", "operator<=", "operator>", "operator>>", "operator>>=", "operator>=", "operator->", "operator->*"}};
|
||||||
int level = 0;
|
int level = 0;
|
||||||
@ -7736,6 +7740,12 @@ namespace detail {
|
|||||||
return realname;
|
return realname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
std::string short_demangle_once() {
|
||||||
|
std::string realname = ctti_get_type_name<T>();
|
||||||
|
return short_demangle_from_type_name(realname);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
const std::string& demangle() {
|
const std::string& demangle() {
|
||||||
static const std::string d = demangle_once<T>();
|
static const std::string d = demangle_once<T>();
|
||||||
@ -7747,8 +7757,7 @@ namespace detail {
|
|||||||
static const std::string d = short_demangle_once<T>();
|
static const std::string d = short_demangle_once<T>();
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
}
|
}} // namespace sol::detail
|
||||||
} // namespace sol::detail
|
|
||||||
|
|
||||||
// end of sol/demangle.hpp
|
// end of sol/demangle.hpp
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user