]>
Commit | Line | Data |
---|---|---|
20effc67 TL |
1 | // Copyright 2019 Lichao Xia |
2 | // | |
3 | // Distributed under the Boost Software License, Version 1.0. | |
4 | // (See accompanying file LICENSE_1_0.txt | |
5 | // or copy at http://www.boost.org/LICENSE_1_0.txt) | |
6 | ||
7 | // For more information, see http://www.boost.org | |
8 | ||
9 | #include <boost/config.hpp> | |
10 | ||
11 | #if (__cplusplus >= 201402L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201402L) | |
12 | #include "../example/b2_workarounds.hpp" | |
13 | ||
14 | #include <boost/core/lightweight_test.hpp> | |
15 | #include <boost/dll/smart_library.hpp> | |
16 | #include <boost/filesystem.hpp> | |
17 | ||
18 | #include <iostream> | |
19 | #include <string> | |
20 | ||
21 | class alias; | |
22 | ||
23 | namespace space { | |
24 | template<typename... T> | |
25 | class test_template_class | |
26 | {}; | |
27 | ||
28 | template<typename T1, | |
29 | typename T2 = char, | |
30 | typename T3 = test_template_class<int>> | |
31 | class test_template_class_have_default_args | |
32 | {}; | |
33 | } // namespace space | |
34 | ||
35 | int | |
36 | main(int argc, char* argv[]) | |
37 | { | |
38 | using mangled_storage = boost::dll::detail::mangled_storage_impl; | |
39 | using library = boost::dll::experimental::smart_library; | |
40 | ||
41 | boost::dll::fs::path pt = b2_workarounds::first_lib_from_argv(argc, argv); | |
42 | ||
43 | std::cout << "Library: " << pt << std::endl; | |
44 | // boost::dll::library_info lib{pt}; | |
45 | ||
46 | library lib(pt); | |
47 | mangled_storage ms = lib.symbol_storage(); | |
48 | // mangled_storage ms(lib); | |
49 | ||
50 | std::cout << "Symbols: " << std::endl; | |
51 | ||
52 | for (auto& s : ms.get_storage()) { | |
53 | std::cout << s.demangled << std::endl; | |
54 | std::cout << s.mangled << std::endl; | |
55 | std::cout << std::endl; | |
56 | } | |
57 | ||
58 | std::string v; | |
59 | ||
60 | ms.add_alias<alias>("space::cpp_plugin_type_pasrser"); | |
61 | ||
62 | auto ctor1 = ms.get_constructor<alias()>(); | |
63 | BOOST_TEST(!ctor1.empty()); | |
64 | ||
65 | auto ctor2 = ms.get_constructor<alias(int*)>(); | |
66 | BOOST_TEST(!ctor2.empty()); | |
67 | ||
68 | auto ctor3 = ms.get_constructor<alias(const int*)>(); | |
69 | BOOST_TEST(!ctor3.empty()); | |
70 | ||
71 | auto ctor4 = ms.get_constructor<alias(const volatile int*)>(); | |
72 | BOOST_TEST(!ctor4.empty()); | |
73 | ||
74 | auto ctor5 = ms.get_constructor<alias(const std::string&)>(); | |
75 | BOOST_TEST(!ctor5.empty()); | |
76 | ||
77 | auto ctor6 = ms.get_constructor<alias(const volatile std::string*)>(); | |
78 | BOOST_TEST(!ctor6.empty()); | |
79 | ||
80 | v = ms.get_mem_fn<alias, void(int*)>("type_test"); | |
81 | BOOST_TEST(!v.empty()); | |
82 | ||
83 | v = ms.get_mem_fn<alias, void(const int*)>("type_test"); | |
84 | BOOST_TEST(!v.empty()); | |
85 | ||
86 | v = ms.get_mem_fn<alias, void(const volatile int*)>("type_test"); | |
87 | BOOST_TEST(!v.empty()); | |
88 | ||
89 | v = ms.get_mem_fn<alias, void(std::string*)>("type_test"); | |
90 | BOOST_TEST(!v.empty()); | |
91 | ||
92 | v = ms.get_mem_fn<alias, void(const std::string*)>("type_test"); | |
93 | BOOST_TEST(!v.empty()); | |
94 | ||
95 | v = ms.get_mem_fn<alias, void(const volatile std::string*)>("type_test"); | |
96 | BOOST_TEST(!v.empty()); | |
97 | ||
98 | v = ms.get_mem_fn<alias, void(const std::string&)>("type_test"); | |
99 | BOOST_TEST(!v.empty()); | |
100 | ||
101 | v = ms.get_mem_fn<alias, void(void (*)(const char* volatile))>("type_test"); | |
102 | BOOST_TEST(!v.empty()); | |
103 | ||
104 | v = ms.get_mem_fn<alias, void(const volatile char* const* volatile*&&)>( | |
105 | "type_test"); | |
106 | BOOST_TEST(!v.empty()); | |
107 | ||
108 | v = ms.get_mem_fn<const alias, void(const char*)>("type_test"); | |
109 | BOOST_TEST(!v.empty()); | |
110 | ||
111 | v = ms.get_mem_fn<volatile alias, void(const char*)>("type_test"); | |
112 | BOOST_TEST(!v.empty()); | |
113 | ||
114 | v = ms.get_mem_fn<const volatile alias, void(const char*)>("type_test"); | |
115 | BOOST_TEST(!v.empty()); | |
116 | ||
117 | v = ms.get_mem_fn<alias, void(const space::test_template_class<>&)>( | |
118 | "type_test"); | |
119 | BOOST_TEST(!v.empty()); | |
120 | ||
121 | v = ms.get_mem_fn<alias, void(const space::test_template_class<void(int)>&)>( | |
122 | "type_test"); | |
123 | BOOST_TEST(!v.empty()); | |
124 | ||
125 | v = ms.get_mem_fn<alias, void(const space::test_template_class<int>&)>( | |
126 | "type_test"); | |
127 | BOOST_TEST(!v.empty()); | |
128 | ||
129 | v = | |
130 | ms.get_mem_fn<alias, void(const space::test_template_class<std::string>&)>( | |
131 | "type_test"); | |
132 | BOOST_TEST(!v.empty()); | |
133 | ||
134 | v = | |
135 | ms.get_mem_fn<alias, | |
136 | void( | |
137 | const space::test_template_class<char, int, std::string>&)>( | |
138 | "type_test"); | |
139 | BOOST_TEST(!v.empty()); | |
140 | ||
141 | v = | |
142 | ms.get_mem_fn<alias, | |
143 | void( | |
144 | const space::test_template_class_have_default_args<int>&)>( | |
145 | "type_test"); | |
146 | BOOST_TEST(!v.empty()); | |
147 | ||
148 | v = ms.get_mem_fn< | |
149 | alias, | |
150 | void(const space::test_template_class_have_default_args<int, double>&)>( | |
151 | "type_test"); | |
152 | BOOST_TEST(!v.empty()); | |
153 | ||
154 | v = ms.get_mem_fn< | |
155 | alias, | |
156 | void(const space:: | |
157 | test_template_class_have_default_args<int, double, std::string>&)>( | |
158 | "type_test"); | |
159 | BOOST_TEST(!v.empty()); | |
160 | ||
161 | auto dtor = ms.get_destructor<alias>(); | |
162 | ||
163 | BOOST_TEST(!dtor.empty()); | |
164 | ||
165 | return boost::report_errors(); | |
166 | } | |
167 | ||
168 | #else | |
169 | int | |
170 | main() | |
171 | { | |
172 | return 0; | |
173 | } | |
174 | #endif |