3#include "clang/AST/AST.h" 
    5#include "cling/Interpreter/Interpreter.h" 
   26   clang::TranslationUnitDecl *
translUnitDecl = C.getTranslationUnitDecl();
 
   30      cling::Interpreter::PushTransactionRAII 
RAII(&
interp);
 
 
   64      const std::string &className)
 
   71   if (
nNs < 3) 
return false;
 
   88   if (className != 
"" &&
 
   89         (className.find(
"MemberAttributes") == 0 ||
 
   90          className.find(
"ClassAttributes") == 0 || className.find(
"Keep") == 0))
 
 
  101const clang::TemplateArgumentList *
 
  104   const clang::ClassTemplateSpecializationDecl *
tmplSpecDecl =
 
  105      llvm::dyn_cast<clang::ClassTemplateSpecializationDecl>(&
cxxRcrdDecl);
 
 
  122      const std::string &pattern)
 
  127      llvm::dyn_cast<clang::CXXRecordDecl>(
rcrdDecl);
 
  134   if (std::string::npos == 
cxxRcrdDecl->getNameAsString().find(pattern))
 
  137   return tmplArgs->get(0).getAsIntegral().getLimitedValue();
 
 
  153                                       const std::string &className,
 
  157   std::string pattern = className.substr(0, className.find_first_of(
"<"));
 
  175            csr.AddFieldSelectionRule(
vsr);
 
  186            csr.AddFieldSelectionRule(
vsr);
 
 
  218                                       const std::string &className,
 
  222   clang::ASTContext &C = 
cxxRcrdDecl.getASTContext();
 
  226         std::string pattern =
 
  227            className.substr(0, className.find_first_of(
"<"));
 
  235         auto qt = base.getType();
 
 
  252   std::string className;
 
  257   className.replace(0, 23, 
"");
 
  269   const size_t lWedgePos(className.find_first_of(
"<"));
 
  272         llvm::isa<clang::ClassTemplateSpecializationDecl>(
recordDecl)) {
 
 
  314   std::string className;
 
  323      std::string typeName;
 
  324      clang::ASTContext &C = 
recordDecl.getASTContext();
 
  325      for (clang::RecordDecl::field_iterator 
filedsIt =
 
  335         GetFullyQualifiedTypeName(typeName, 
filedsIt->getType(), C);
 
  337         aSelCsr.SetAttributeValue(propNames::name, typeName);
 
  351         if (className.find(pattern) != 0) 
continue;
 
  355         if (
tInfo.fArgsToKeep != -1 && 
ctd) {
 
  360         if (
tInfo.fTransientMembers.empty() && 
tInfo.fUnsplittableMembers.empty()) 
continue;
 
  361         clang::ASTContext &C = 
recordDecl.getASTContext();
 
 
  401   return className.substr(0, className.find_first_of(
"<")) + 
"<*>";
 
 
  412   while (typeName[typeName.size() - 1] == 
'*' ||
 
  413          typeName[typeName.size() - 1] == 
'&') {
 
  414      typeName = typeName.substr(0, typeName.size() - 1);
 
 
Select classes and assign properties using C++ syntax.
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
bool fIsFirstPass
Keep trance of the number of passes through the AST.
llvm::StringMap< ClassSelectionRule > fClassNameSelectionRuleMap
Map of the already built sel rules.
void ManageFields(const clang::RecordDecl &, const std::string &, ClassSelectionRule &, bool)
Take care of the class fields.
ROOT::TMetaUtils::TNormalizedCtxt & fNormCtxt
The reference to the normalized context.
llvm::StringMap< std::set< std::string > > fNoAutoSelectedClassFieldNames
Collect the autoexcluded classes.
llvm::StringMap< std::set< std::string > > fAutoSelectedClassFieldNames
Collect the autoselected classes.
void ManageBaseClasses(const clang::CXXRecordDecl &, const std::string &, bool &)
Take care of the class bases.
bool VisitRecordDecl(clang::RecordDecl *)
Visit the entities that needs to be selected.
const clang::TemplateArgumentList * GetTmplArgList(const clang::CXXRecordDecl &)
Get the template arguments list if any.
std::set< const clang::RecordDecl * > fSelectedRecordDecls
The pointers of the selected RecordDecls.
std::string PatternifyName(const std::string &className)
Transform instance name in pattern for selection.
DictSelectionReader(cling::Interpreter &interp, SelectionRules &, const clang::ASTContext &, ROOT::TMetaUtils::TNormalizedCtxt &)
Take the selection rules as input (for consistency w/ other selector interfaces)
SelectionRules & fSelectionRules
The selection rules to be filled.
void GetPointeeType(std::string &typeName)
Get name of the pointee type.
unsigned int ExtractTemplateArgValue(const T &, const std::string &)
Extract the value of the template parameter.
bool InSelectionNamespace(const clang::RecordDecl &, const std::string &str="")
Check if in the ROOT::Meta::Selection namespace.
std::unordered_map< std::string, TemplateInfo > fTemplateInfoMap
List template name - properties map.
bool FirstPass(const clang::RecordDecl &)
First pass on the AST.
bool SecondPass(const clang::RecordDecl &)
Second pass on the AST, using the information of the first one.
The class representing the collection of selection rules.
void AddClassSelectionRule(const ClassSelectionRule &classSel)
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...