27 std::list<std::string>& result,
32 std::string::size_type curr;
33 std::string::size_type last = 0;
34 std::string::size_type
size;
39 while( last != source.size() ) {
40 curr = source.find( delimiter, last );
42 if( curr == std::string::npos ) {
43 curr = source.size()-1;
46 else size = curr-last;
48 elem =
Trim( source.substr( last,
size ) );
50 result.push_back( elem );
57 std::list<std::pair<ROOT::Internal::TSchemaType,std::string> >& result)
63 std::string::size_type curr;
64 std::string::size_type last = 0;
65 std::string::size_type
size;
72 while( last != source.size() ) {
74 curr = source.find(
';', last );
76 if( curr == std::string::npos ) {
77 curr = source.size()-1;
80 else size = curr-last;
83 elem =
Trim( source.substr( last,
size ) );
85 unsigned int level = 0;
90 for(std::string::size_type j=elem.size(); j>0; --j) {
91 std::string::size_type i = j-1;
92 if (elem[i]==
'<') { ++level; }
93 else if (elem[i]==
'>') {
if (level==0) {
continue; } ; --level; }
94 else if (level == 0 && isspace(elem[i])) {
95 type = elem.substr( 0, i );
97 while( elem[i]==
'*' || elem[i]==
'&' || isspace(elem[i]) ) {
99 if (strcmp(
"const",elem.c_str()+i)==0 && (i+5)>elem.size()
100 && ( elem[i+5]==
'*' || elem[i+5]==
'&' || isspace(elem[i+5])) ) {
103 }
else if (elem[i]==
'*' || elem[i]==
'&') {
107 std::string::size_type endvar = i;
108 while( endvar!=elem.size() && elem[endvar] !=
'[' ) {
111 if (endvar != elem.size() ) {
112 dims =
Trim( elem.substr(endvar, elem.size()-endvar) );
114 elem =
Trim( elem.substr(i, endvar-i) );
160 std::pair<Int_t, Int_t>& result )
171 std::string::size_type hyphenI;
175 std::string version =
Trim( source );
177 if( version.empty() )
183 if( version ==
"*" ) {
185 result.second = 50000;
193 hyphenI = version.find(
'-' );
194 if( hyphenI == std::string::npos &&
IsANumber( version ) ) {
195 result.first = result.second = atoi( version.c_str() );
203 second =
Trim( version.substr( 1 ) );
206 result.second = atoi( second.c_str() );
214 if( hyphenI == version.size()-1 ) {
215 first =
Trim( version.substr( 0, version.size()-1 ) );
217 result.first = atoi( first.c_str() );
218 result.second = 50000;
226 first =
Trim( version.substr( 0, hyphenI ) );
227 second =
Trim( version.substr( hyphenI+1, version.size()-hyphenI-1 ) );
229 result.first = atoi( first.c_str() );
230 result.second = atoi( second.c_str() );
239 static bool IsANumber(
const std::string& source,
bool acceptHex =
false )
244 if( acceptHex && source.size() > 2 && source[0] ==
'0' && source[1] ==
'x'
245 && std::all_of(source.begin()+2, source.end(), [](
unsigned char c){return std::isxdigit(c);}) )
248 return std::all_of(source.begin(), source.end(), [](
unsigned char c){return std::isdigit(c);});