32using std::string, std::string_view, std::vector, std::set;
38struct ShuttingDownSignaler :
public T {
41 ShuttingDownSignaler() =
default;
42 ShuttingDownSignaler(T &&
in) : T(std::
move(
in)) {}
55 while (!s.empty() && s[0] ==
' ')
66 if (
name.compare(0, 5,
"std::") == 0) {
72 for (
size_t i = 5; i <
name.length(); ++i) {
91 if (i + 1 <
name.length() &&
name[i + 1] ==
':') {
104 if (i + 1 <
name.length() &&
name[i + 1] ==
':') {
147 if (
name.length() > 2 &&
name[0] ==
':' &&
name[1] ==
':') {
161 return EComplexType::kFloat;
164 return EComplexType::kDouble;
167 return EComplexType::kInt;
170 return EComplexType::kLong;
173 return EComplexType::kNone;
228 if (fElements[0].empty())
return 0;
229 int numb = fElements.size();
230 if (!fElements[
numb-1].empty() && fElements[
numb-1][0]==
'*') --
numb;
232 if ( fNestedLocation ) {
238 int kind =
STLKind(fElements[0]);
255 if (k<0) kind = -kind;
261 if(kind>2) kind = - kind;
281 int narg = fElements.size();
292 if (fElements[
narg-1].empty() ==
false &&
293 (fElements[
narg-1][0]==
'*'
294 || fElements[
narg-1][0]==
'&'
295 || fElements[
narg-1][0]==
'['
296 || 0 == fElements[
narg-1].compare(0,6,
"const*")
297 || 0 == fElements[
narg-1].compare(0,6,
"const&")
298 || 0 == fElements[
narg-1].compare(0,6,
"const[")
299 || 0 == fElements[
narg-1].compare(
"const")
308 if (fNestedLocation)
narg--;
313 const int kind =
STLKind(fElements[0]);
319 if (!fElements[0].empty() &&
tailLoc) {
322 fElements[0].clear();
377 if (
IsDefComp( fElements[
iall].c_str(), fElements[1].c_str() ) ) {
422 if (
IsDefPred( fElements[
iall].c_str(), fElements[1].c_str() ) ) {
429 if (
IsDefHash( fElements[
iall-1].c_str(), fElements[1].c_str() ) ) {
437 unsigned int offset = (0==
strncmp(
"const ",fElements[0].c_str(),6)) ? 6 : 0;
439 if (0 ==
strcmp(fElements[0].c_str()+
offset,
"__shared_ptr"))
442 static const std::string
sharedPtrDef = std::to_string(__gnu_cxx::__default_lock_policy);
444 static const std::string
sharedPtrDef = std::to_string(2);
454 for (
int i=1;i<
narg; i++) {
455 if (!
strchr(fElements[i].c_str(),
'<')) {
460 unsigned int offset = (0==
strncmp(
"const ",fElements[i].c_str(),6)) ? 6 : 0;
487 if (!fElements[0].empty()) {
answ += fElements[0];
answ +=
"<";}
520 {
for (
int i=1;i<
narg-1; i++) {
answ += fElements[i];
answ+=
",";} }
523 if (!fElements[0].empty()) {
524 if (
answ.at(
answ.size()-1) ==
'>') {
530 if (fNestedLocation) {
533 answ += fElements[fNestedLocation];
543 return !fElements[0].empty();
552 if (
type.length() == 0)
555 if (
type.compare(0,6,
"const ")==0) {
offset += 6; }
562 static const char *
stls[] =
563 {
"any",
"vector",
"list",
"deque",
"map",
"multimap",
"set",
"multiset",
"bitset",
564 "forward_list",
"unordered_set",
"unordered_multiset",
"unordered_map",
"unordered_multimap",
nullptr};
565 static const size_t stllen[] =
566 { 3, 6, 4, 5, 3, 8, 3, 8, 6,
567 12, 13, 18, 13, 18, 0};
583 for (
int k = 1;
stls[k]; ++k) {
599 static const char stln[] =
601 { 1, 1, 1, 1, 3, 3, 2, 2, 1,
604 assert(std::size_t(kind) <
sizeof(
stln) &&
"index is out of bounds");
614 for(
size_t i = 0; i < full.length(); ++i) {
616 case '<': { ++level;
break; }
618 if (level == 0)
return i;
623 if (level == 0)
return i;
629 return full.length();
636 return pos +
findNameEnd( {full.data()+pos,full.length()-pos} );
648 constexpr auto length = std::char_traits<char>::length;
655 if (
a==
"alloc")
return true;
656 if (
a==
"__default_alloc_template<true,0>")
return true;
657 if (
a==
"__malloc_alloc_template<0>")
return true;
660 if (
a.compare(0,
alloclen,
"allocator<") != 0) {
668 string_view k = classname;
671 if (
a.compare(0,k.length(),k) != 0) {
684 a.remove_prefix(end);
686 a.remove_prefix(k.length());
691 if (
a.compare(0, 1,
">") != 0) {
712 constexpr auto length = std::char_traits<char>::length;
714 if (
a.compare(0,
alloclen,
"allocator<") != 0) {
723 if (
a.compare(0,
pairlen,
"pair<") != 0) {
729 if (
a.compare(0,
constlen+1,
"const ") == 0) {
738 if (k.compare(0,
constlen+1,
"const ") == 0) {
742 if (
a.compare(0,k.length(),k) != 0) {
763 a.remove_prefix(end);
766 a.remove_prefix(k.length());
768 if (
a.compare(0,
constlen,
"const") == 0) {
782 if (
a.compare(0,
v.length(),
v) != 0) {
795 a.remove_prefix(end);
797 a.remove_prefix(
v.length());
802 if (
a.compare(0, 1,
">") != 0) {
825 string k = classname;
826 if (
c.compare(pos,k.length(),k) != 0) {
846 if (
c.compare(pos,1,
">")!=0 &&
c.compare(pos,2,
" >")!=0) {
929 std::string first, second;
933 if (!second.empty() && second.back() ==
'>')
982 static const char*
ulonglong_s =
"unsigned long long";
1010 else if ( *
cursor ==
':' ) {
1026 const char *t = full.c_str();
1027 const unsigned int tlen( full.size() );
1044 bool isArray = ( (*starloc)==
']' );
1048 isArray = ! ( (*starloc)==
'[' );
1049 }
else if ( (*(
starloc-1))==
't' ) {
1119 if (full.compare(
prefix_offset, 17,
"basic_string<char") == 0) {
1126 if ( full[
offset] ==
'>' ) {
1128 }
else if (full[
offset] ==
',') {
1130 if (full.compare(
offset, 5,
"std::") == 0) {
1139 if ( full[
offset] ==
'>') {
1141 }
else if (full[
offset] ==
' ' && full[
offset+1] ==
'>') {
1144 }
else if (full[
offset] ==
',') {
1146 if (full.compare(
offset, 5,
"std::") == 0) {
1149 static const char*
allocator_s =
"allocator<char>";
1153 if ( full[
offset] ==
'>') {
1155 }
else if (full[
offset] ==
' ' && full[
offset+1] ==
'>') {
1176 output.push_back(
string());
1179 output.push_back(
"const std::string");
1181 output.push_back(
"const string");
1185 output.push_back(
"std::string");
1187 output.push_back(
"string");
1190 if (
offset < full.length()) {
1193 string right( full.substr(
offset) );
1196 output.back().append(right.c_str()+1);
1197 output.push_back(
stars);
1199 output.push_back(
"");
1201 return output.size();
1207 unsigned int offset = (0==
strncmp(
"const ",full.c_str(),6)) ? 6 : 0;
1212 if ( !full.empty() ) {
1216 const char *
c =
strchr(full.c_str(),
'<');
1219 output.push_back(
string(full,0,
c - full.c_str()));
1228 }
else if (*
cursor ==
')') {
1235 case '<': ++level;
break;
1236 case '>': --level;
break;
1239 output.push_back(std::string(
c+1,
cursor));
1246 if (*(
cursor-1) ==
' ') {
1247 output.push_back(std::string(
c+1,
cursor-1));
1249 output.push_back(std::string(
c+1,
cursor));
1256 output.push_back((
cursor+1));
1258 }
else if (level >= 0) {
1260 output.push_back(std::string(
c+1,
cursor));
1264 output.push_back(
string());
1265 output.push_back(full);
1268 if (!output.empty()) output.push_back(
stars);
1269 return output.size();
1291 constexpr static std::array<const char *, 3> remove{
"class",
"const",
"volatile"};
1292 constexpr static auto lengths = []()
constexpr {
1293 std::array<std::size_t, std::size(remove)>
ret{};
1294 for (std::size_t i = 0; i < remove.size(); i++)
1295 ret[i] = std::char_traits<char>::length(remove[i]);
1308 if (!
isalnum(
c[ 1]) &&
c[ 1] !=
'_')
continue;
1312 size_t n = (
mode) ? std::size(remove) : 1;
1315 for (
size_t k = 0; k <
n; k++) {
1329 kbl = (!
isalnum(
c[ 0]) &&
c[ 0]!=
'_' &&
c[ 0]!=
'$' &&
c[0]!=
'[' &&
c[0]!=
']' &&
c[0]!=
'-' &&
c[0]!=
'@');
1333 if (*
c ==
'<' || *
c ==
'(')
1337 if (!
strchr(
"*&:._$ []-@",*
c))
break;
1388 unsigned char offset = 0;
1390 static const char *names[] = {
"CallFunc_t",
"ClassInfo_t",
"BaseClassInfo_t",
1391 "DataMemberInfo_t",
"FuncTempInfo_t",
"MethodInfo_t",
"MethodArgInfo_t",
1392 "TypeInfo_t",
"TypedefInfo_t",
nullptr};
1394 for(
int k=1;names[k];k++) {
if (
strcmp(
type+
offset,names[k])==0)
return true;}
1404 if (
strncmp(classname+
offset,
"bitset<",std::char_traits<char>::length(
"bitset<"))==0)
return true;
1422 if (
type.compare(0,6,
"const ",6) == 0)
1423 type.remove_prefix(6);
1425 while(
type[
type.length()-1]==
'*' ||
1428 type.remove_suffix(1);
1441 auto pos =
type.find(
'<');
1445 for (
decltype(
type.length()) level = 1;
c <
type.length(); ++
c) {
1446 if (
type[
c] ==
'<') ++level;
1447 if (
type[
c] ==
'>') --level;
1448 if (level == 0)
break;
1450 if (
c != (
type.length()-1) ) {
1481 constexpr auto length = std::char_traits<char>::length;
1482 classname +=
StdLen( classname );
1483 if (
strcmp(classname,
"string")==0 )
return true;
1484 if (
strncmp(classname,
"bitset<",
length(
"bitset<"))==0)
return true;
1485 if (
IsStdPair(classname) )
return true;
1486 if (
strcmp(classname,
"allocator")==0)
return true;
1487 if (
strncmp(classname,
"allocator<",
length(
"allocator<"))==0)
return true;
1488 if (
strncmp(classname,
"greater<",
length(
"greater<"))==0)
return true;
1489 if (
strncmp(classname,
"less<",
length(
"less<"))==0)
return true;
1490 if (
strncmp(classname,
"equal_to<",
length(
"equal_to<"))==0)
return true;
1491 if (
strncmp(classname,
"hash<",
length(
"hash<"))==0)
return true;
1492 if (
strncmp(classname,
"auto_ptr<",
length(
"auto_ptr<"))==0)
return true;
1494 if (
strncmp(classname,
"vector<",
length(
"vector<"))==0)
return true;
1495 if (
strncmp(classname,
"list<",
length(
"list<"))==0)
return true;
1496 if (
strncmp(classname,
"forward_list<",
length(
"forward_list<"))==0)
return true;
1497 if (
strncmp(classname,
"deque<",
length(
"deque<"))==0)
return true;
1498 if (
strncmp(classname,
"map<",
length(
"map<"))==0)
return true;
1499 if (
strncmp(classname,
"multimap<",
length(
"multimap<"))==0)
return true;
1500 if (
strncmp(classname,
"set<",
length(
"set<"))==0)
return true;
1501 if (
strncmp(classname,
"multiset<",
length(
"multiset<"))==0)
return true;
1502 if (
strncmp(classname,
"unordered_set<",
length(
"unordered_set<"))==0)
return true;
1503 if (
strncmp(classname,
"unordered_multiset<",
length(
"unordered_multiset<"))==0)
return true;
1504 if (
strncmp(classname,
"unordered_map<",
length(
"unordered_map<"))==0)
return true;
1505 if (
strncmp(classname,
"unordered_multimap<",
length(
"unordered_multimap<"))==0)
return true;
1506 if (
strncmp(classname,
"bitset<",
length(
"bitset<"))==0)
return true;
1507 if (
strncmp(classname,
"ROOT::VecOps::RVec<",
length(
"ROOT::VecOps::RVec<"))==0)
return true;
1684 if (
' ' ==
tname[next]) {
1687 }
else if (
'*' ==
tname[next]) {
1689 }
else if (
')' ==
tname[next]) {
1776 if ((next+5)==
len ||
tname[next+5] ==
',' ||
tname[next+5] ==
'>' ||
tname[next+5] ==
')' ||
tname[next+5] ==
'[') {
1779 }
else if (next!=
len &&
tname[next] !=
'*' &&
tname[next] !=
'&') {
1793 if ((next+5)==
len ||
tname[next+5] ==
' ' ||
tname[next+5] ==
'*' ||
tname[next+5] ==
'&' ||
tname[next+5] ==
',' ||
tname[next+5] ==
'>' ||
tname[next+5] ==
')' ||
tname[next+5] ==
'[') {
1802 if ((next+5)==
len ||
tname[next+5] ==
' ' ||
tname[next+5] ==
'*' ||
tname[next+5] ==
'&' ||
tname[next+5] ==
',' ||
tname[next+5] ==
'>'||
tname[next+5] ==
')' ||
tname[next+5] ==
'[') {
1903 "basic_istringstream",
1906 "basic_ostringstream",
1910 "basic_stringstream",
1939 "istreambuf_iterator",
1948 "localedef utility",
1965 "moneypunct_byname",
1977 "ostreambuf_iterator",
1983 "pointer_to_binary_function",
1984 "pointer_to_unary_function",
1988 "raw_storage_iterator",
2007 "unordered_multimap",
2008 "unordered_multiset",
2070 std::vector<std::unique_ptr<NameCleanerForIO>> fArgumentNodes = {};
2072 bool fHasChanged =
false;
2076 if (!
mother)
return false;
2078 while (
nullptr !=
mother){
2092 if (
clName.back() !=
'>') {
2097 std::vector<std::string>
v;
2105 [](std::string& arg){
return (!arg.empty() && arg.front() ==
':');});
2110 for (
int i=
length-1;i>-1;i--) {
2115 }
else if (
c ==
'>') {
2143 unsigned int nargs =
v.size() - 2;
2144 for (
unsigned int i=0;i<
nargs;++i) {
2153 std::string
name(fName);
2155 if (fArgumentNodes.empty())
return name;
2160 name = fArgumentNodes.front()->ToString();
2172 name = fArgumentNodes.front()->ToString();
2179 for (
auto& node : fArgumentNodes) {
2180 name += node->ToString() +
",";
2181 fHasChanged |= node->HasChanged();
2184 name +=
name.back() ==
'>' ?
" >" :
">";
2189 const std::vector<std::unique_ptr<NameCleanerForIO>>*
GetChildNodes()
const {
return &fArgumentNodes;}
2228 for (ndim = 1;ndim <=5 ; ndim++) {
2255struct FunctionSplitInfo {
2257 std::string fReturnType;
2260 std::string fScopeName;
2263 std::string fFunctionName;
2267 std::vector<std::string> fFunctionTemplateArguments;
2270 std::vector<std::string> fFunctionParameters;
2280 for (std::size_t pos = 0, end =
haystack.length(); pos < end; ++pos) {
2283 if (
needles.find(
c) != std::string_view::npos)
2292 case '<':
expected.emplace(
'>');
break;
2293 case '(':
expected.emplace(
')');
break;
2294 case '[':
expected.emplace(
']');
break;
2297 return std::string_view::npos;
2307 if (
posColumn == std::string_view::npos)
2308 return std::string_view::npos;
2312 return std::string_view::npos;
2320 return std::string_view::npos;
2325 while (!str.empty() && std::isspace(str[0]))
2326 str.remove_prefix(1);
2327 while (!str.empty() && std::isspace(str.back()))
2328 str.remove_suffix(1);
2336 return std::string(
sv.data(),
sv.length());
2356 if (
posWS == std::string_view::npos)
2378 if (
posScope == std::string_view::npos)
2392 result.fFunctionTemplateArguments.clear();
2405 if (
posComma == std::string_view::npos) {
2418 result.fFunctionParameters.clear();
2419 if (
posArgs != std::string_view::npos) {
2421 std::string_view params =
decl.substr(
posArgs + 1);
2428 if (
posComma == std::string_view::npos) {
static const char * ToString(ENameCycleError err)
static void R__FindTrailing(std::string &full, std::string &stars)
static void ResolveTypedefImpl(const char *tname, unsigned int len, unsigned int &cursor, bool &modified, std::string &result)
static size_t findNameEnd(const std::string_view full)
static bool IsDefElement(const char *elementName, const char *defaultElementName, const char *classname)
return whether or not 'elementName' is the STL default Element for type 'classname'
static void ResolveTypedefProcessType(const char *tname, unsigned int, unsigned int cursor, bool constprefix, unsigned int start_of_type, unsigned int end_of_type, unsigned int mod_start_of_type, bool &modified, std::string &result)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t cursor
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h offset
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h length
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize id
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
An helper class to dismount the name and remount it changed whenever necessary.
NameCleanerForIO(const std::string &clName="", TClassEdit::EModType mode=TClassEdit::kNone, NameCleanerForIO *mother=nullptr)
NameCleanerForIO * fMother
const std::string & GetName()
const std::vector< std::unique_ptr< NameCleanerForIO > > * GetChildNodes() const
bool AreAncestorsSTLContOrArray()
A spin mutex-as-code-guard class.
const_iterator begin() const
const_iterator end() const
A RAII helper to remove and readd enclosing _Atomic() It expects no spaces at the beginning or end of...
virtual ~TInterpreterLookupHelper()
ROOT::ESTLType STLKind(std::string_view type)
Converts STL container name to number.
bool IsDefComp(const char *comp, const char *classname)
return whether or not 'compare' is the STL default comparator for type 'classname'
std::string ResolveTypedef(const char *tname, bool resolveAll=false)
bool IsStdArray(std::string_view name)
bool IsStdClass(const char *type)
return true if the class belongs to the std namespace
bool IsDefHash(const char *hashname, const char *classname)
return whether or not 'hashname' is the STL default hash for type 'classname'
bool IsStdPair(std::string_view name)
bool IsInterpreterDetail(const char *type)
Return true if the type is one the interpreter details which are only forward declared (ClassInfo_t e...
std::string InsertStd(const char *tname)
bool SplitFunction(std::string_view decl, FunctionSplitInfo &result)
Split a function declaration into its different parts.
std::string GetLong64_Name(const char *original)
Replace 'long long' and 'unsigned long long' by 'Long64_t' and 'ULong64_t'.
bool IsDefPred(const char *predname, const char *classname)
return whether or not 'predname' is the STL default predicate for type 'classname'
char * DemangleTypeIdName(const std::type_info &ti, int &errorCode)
Demangle in a portable way the type id name.
const char * GetUnqualifiedName(const char *name)
Return the start of the unqualified name include in 'original'.
bool IsVectorBool(const char *name)
void Init(TClassEdit::TInterpreterLookupHelper *helper)
ROOT::ESTLType IsSTLCont(std::string_view type)
type : type name: vector<list<classA,allocator>,allocator> result: 0 : not stl container code of cont...
std::string CleanType(const char *typeDesc, int mode=0, const char **tail=nullptr)
Cleanup type description, redundant blanks removed and redundant tail ignored return *tail = pointer ...
std::string ShortType(const char *typeDesc, int mode)
Return the absolute type of typeDesc.
char * DemangleName(const char *mangled_name, int &errorCode)
bool IsArtificial(std::string_view name)
bool GetStdArrayProperties(const char *typeName, std::string &typeNameBuf, std::array< int, 5 > &maxIndices, int &ndim)
std::string GetNameForIO(const std::string &templateInstanceName, TClassEdit::EModType mode=TClassEdit::kNone, bool *hasChanged=nullptr)
int STLArgs(int kind)
Return number of arguments for STL container before allocator.
int GetSplit(const char *type, std::vector< std::string > &output, int &nestedLoc, EModType mode=TClassEdit::kNone)
Stores in output (after emptying it) the split type.
void GetNormalizedName(std::string &norm_name, std::string_view name)
Return the normalized name.
bool IsDefAlloc(const char *alloc, const char *classname)
return whether or not 'allocname' is the STL default allocator for type 'classname'
bool IsUniquePtr(std::string_view name)
bool IsSTLBitset(const char *type)
Return true is the name is std::bitset<number> or bitset<number>
ROOT::ESTLType UnderlyingIsSTLCont(std::string_view type)
Return the type of STL collection, if any, that is the underlying type of the given type.
EComplexType GetComplexType(const char *)
Result of splitting a function declaration into fReturnType fScopeName::fFunctionName<fFunctionTempla...
bool IsTemplate()
Check if the type is a template.
int IsSTLCont(int testAlloc=0) const
type : type name: vector<list<classA,allocator>,allocator> testAlloc: if true, we test allocator,...
TSplitType(const char *type2split, EModType mode=TClassEdit::kNone)
default constructor
std::vector< std::string > fElements
ROOT::ESTLType IsInSTL() const
type : type name: vector<list<classA,allocator>,allocator>[::iterator] result: 0 : not stl container ...
void ShortType(std::string &answer, int mode)
Return the absolute type of typeDesc into the string answ.