introspection: return the template parameters of a type
This commit is contained in:
parent
813148ca51
commit
7c92271296
@ -10,6 +10,7 @@
|
||||
|
||||
#include "std.hpp"
|
||||
#include "variadic.hpp"
|
||||
#include "algo/search.hpp"
|
||||
|
||||
#include <cruft/util/preprocessor.hpp>
|
||||
|
||||
@ -63,9 +64,18 @@ namespace cruft {
|
||||
std::end (suffixes)
|
||||
);
|
||||
|
||||
// Find the start of the first template parameter (or the end of the
|
||||
// string otherwise), and the end of the template parameters for this
|
||||
// type.
|
||||
//
|
||||
// This cursor will be used to limit the scope of the namespace removal
|
||||
// we're about to do.
|
||||
auto const first_template = std::find (ns_begin, type_end, '<');
|
||||
auto const end_first_template = cruft::search::balanced (first_template, type_end, '<', '>');
|
||||
|
||||
// Find the end of any namespace symbols
|
||||
auto const ns_symbol = std::find (
|
||||
std::make_reverse_iterator (type_end),
|
||||
std::make_reverse_iterator (first_template),
|
||||
std::make_reverse_iterator (ns_begin),
|
||||
':'
|
||||
);
|
||||
@ -74,7 +84,7 @@ namespace cruft {
|
||||
auto const data = ns_symbol != std::make_reverse_iterator (ns_begin)
|
||||
? &*ns_symbol + 1
|
||||
: ns_begin + prefix.size ();
|
||||
auto const size = std::distance (data, type_end);
|
||||
auto const size = std::distance (data, end_first_template);
|
||||
return std::string_view (data, size);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user