12#ifndef __DICTSELECTIONREADER__
13#define __DICTSELECTIONREADER__
15#include "clang/AST/RecursiveASTVisitor.h"
17#include <llvm/ADT/StringMap.h>
20#include <unordered_set>
22#include <unordered_map>
27 namespace TMetaUtils {
240class DictSelectionReader :
public clang::RecursiveASTVisitor<DictSelectionReader> {
244 DictSelectionReader(cling::Interpreter &interp,
SelectionRules &,
const clang::ASTContext &,
248 bool VisitRecordDecl(clang::RecordDecl *);
250 bool shouldVisitTemplateInstantiations()
const {
257 struct TemplateInfo {
258 TemplateInfo(
int argsToKeep): fArgsToKeep(argsToKeep) {};
260 int fArgsToKeep = -1;
261 std::unordered_set<std::string> fTransientMembers {};
262 std::unordered_set<std::string> fUnsplittableMembers {};
266 InSelectionNamespace(
const clang::RecordDecl &,
267 const std::string &str =
269 inline bool FirstPass(
const clang::RecordDecl &);
270 inline bool SecondPass(
const clang::RecordDecl &);
275 ManageFields(
const clang::RecordDecl &,
280 ManageBaseClasses(
const clang::CXXRecordDecl &,
const std::string &,
bool &);
282 inline unsigned int ExtractTemplateArgValue(
284 const std::string &);
285 inline const clang::TemplateArgumentList *GetTmplArgList(
286 const clang::CXXRecordDecl &);
288 std::string PatternifyName(
const std::string &className);
290 void GetPointeeType(std::string &typeName);
293 std::set<const clang::RecordDecl *>
294 fSelectedRecordDecls;
295 std::set<std::string>
297 llvm::StringMap<std::set<std::string> >
298 fAutoSelectedClassFieldNames;
299 llvm::StringMap<std::set<std::string> >
300 fNoAutoSelectedClassFieldNames;
301 std::unordered_map<std::string, TemplateInfo> fTemplateInfoMap;
302 llvm::StringMap<ClassSelectionRule>
303 fClassNameSelectionRuleMap;
The class representing the collection of selection rules.
tbb::task_arena is an alias of tbb::interface7::task_arena, which doesn't allow to forward declare tb...