14 #ifndef __ABG_CORPUS_PRIV_H__
15 #define __ABG_CORPUS_PRIV_H__
17 #include "abg-internal.h"
47 typedef unordered_map<string, std::unordered_set<function_decl*> >
53 std::unordered_set<function_decl*>,
110 fns_suppress_regexps_(fns_suppress_regexps),
111 vars_suppress_regexps_(vars_suppress_regexps),
112 fns_keep_regexps_(fns_keep_regexps),
113 vars_keep_regexps_(vars_keep_regexps),
125 if (compiled_fns_suppress_regexp_.empty())
127 for (vector<string>::const_iterator i =
128 fns_suppress_regexps_.begin();
129 i != fns_suppress_regexps_.end();
134 compiled_fns_suppress_regexp_.push_back(r);
137 return compiled_fns_suppress_regexp_;
147 if (compiled_fns_keep_regexps_.empty())
149 for (vector<string>::const_iterator i =
150 fns_keep_regexps_.begin();
151 i != fns_keep_regexps_.end();
156 compiled_fns_keep_regexps_.push_back(r);
159 return compiled_fns_keep_regexps_;
169 if (compiled_vars_suppress_regexp_.empty())
171 for (vector<string>::const_iterator i =
172 vars_suppress_regexps_.begin();
173 i != vars_suppress_regexps_.end();
178 compiled_vars_suppress_regexp_.push_back(r);
181 return compiled_vars_suppress_regexp_;
191 if (compiled_vars_keep_regexps_.empty())
193 for (vector<string>::const_iterator i =
194 vars_keep_regexps_.begin();
195 i != vars_keep_regexps_.end();
200 compiled_vars_keep_regexps_.push_back(r);
203 return compiled_vars_keep_regexps_;
221 {
return id_fns_map_;}
234 {
return id_fns_map_;}
247 {
return id_var_map_;}
260 {
return id_var_map_;}
289 std::unordered_set<function_decl*>*
293 auto i = m.find(fn_id);
308 std::unordered_set<function_decl*>*
325 const std::unordered_set<function_decl*>& fns)
330 if (fns.find(fn) != fns.end())
333 const string fn_id = fn->
get_id();
334 for (
const auto f : fns)
335 if (f->get_id() == fn_id
361 const std::unordered_set<function_decl*>& fns,
362 string& pretty_representation)
368 const string fn_id = fn->
get_id();
369 for (
const auto f : fns)
370 if (f->get_id() == fn_id
371 && f->get_pretty_representation() == repr)
373 pretty_representation = repr;
408 fns = &(
id_fns_map()[fn_id] = std::unordered_set<function_decl*>());
418 sym_id = sym->get_id_string();
423 fns = &(
id_fns_map()[fn_id] = std::unordered_set<function_decl*>());
426 sym = sym->get_next_alias();
428 while (sym && !sym->is_main_symbol());
443 auto i = m.find(var_id);
483 vars_.push_back(
const_cast<var_decl*
>(var));
495 {
return sym_id_of_fns_to_keep_;}
504 {
return sym_id_of_vars_to_keep_;}
526 for (vector<string>::const_iterator i =
531 string sym_name, sym_version;
535 if (sym_name == sym->get_name()
536 && sym_version == sym->get_version().str())
566 for (regex_t_sptrs_type::const_iterator i =
599 for (regex_t_sptrs_type::const_iterator i =
633 for (vector<string>::const_iterator i =
638 string sym_name, sym_version;
642 if (sym_name == sym->get_name()
643 && sym_version == sym->get_version().str())
673 for (regex_t_sptrs_type::const_iterator i =
707 for (regex_t_sptrs_type::const_iterator i =
726 mutable unordered_map<string, type_base_sptr> canonical_types_;
727 string format_major_version_number_;
728 string format_minor_version_number_;
733 vector<string> regex_patterns_fns_to_suppress;
734 vector<string> regex_patterns_vars_to_suppress;
735 vector<string> regex_patterns_fns_to_keep;
736 vector<string> regex_patterns_vars_to_keep;
737 vector<string> sym_id_fns_to_keep;
738 vector<string> sym_id_vars_to_keep;
740 vector<string> needed;
742 string architecture_name;
745 vector<const function_decl*> fns;
746 vector<const var_decl*> vars;
765 mutable vector<type_base_wptr> types_not_reachable_from_pub_ifaces_;
766 unordered_set<interned_string, hash_interned_string> *pub_type_pretty_reprs_;
784 priv(
const string & p,
788 origin_(ARTIFICIAL_ORIGIN),
790 pub_type_pretty_reprs_(),
830 unordered_set<interned_string, hash_interned_string>*
833 std::unordered_set<function_decl*>*
843 maybe_update_scope_lookup_map(
const decl_base_sptr& member_scope);
std::shared_ptr< symtab > symtab_sptr
Convenience typedef for a shared pointer to a symtab.
#define ABG_ASSERT(cond)
This is a wrapper around the 'assert' glibc call. It allows for its argument to have side effects,...
Declaration of types pertaining to the interned string pool used throughout Libabigail,...
Types of the main internal representation of libabigail.
Wrappers around regex types and functions.
Utilities to ease the wrapping of C types into std::shared_ptr.
This contains the declarations for the symtab reader.
The abstraction of an interned string.
The type of the private data of corpus::exported_decls_builder type.
istr_var_ptr_map_type & id_var_map()
Getter for a map of the IDs of the variables that are present in the set of exported variables.
const istr_fn_ptr_set_map_type & id_fns_map() const
Getter for a map of the IDs of the functions that are present in the set of exported functions.
bool keep_wrt_id_of_fns_to_keep(const function_decl *fn)
Look at the set of functions to keep and tell if if a given function is to be kept,...
interned_string get_id(const var_decl &var)
Returns an ID for a given variable.
regex_t_sptrs_type & compiled_regex_vars_keep()
Getter for the compiled regular expressions that designate the variables to keep in the set of export...
bool keep_wrt_id_of_vars_to_keep(const var_decl *var)
Look at the regular expressions of the variables to keep and tell if if a given variable is to be kep...
const istr_var_ptr_map_type & id_var_map() const
Getter for a map of the IDs of the variables that are present in the set of exported variables.
istr_fn_ptr_set_map_type & id_fns_map()
Getter for a map of the IDs of the functions that are present in the set of exported functions.
std::unordered_set< function_decl * > * fn_id_is_in_id_fns_map(const function_decl *fn)
Test if a a function if the same ID as a given function is present in the id-functions map.
void add_var_to_map(var_decl *var)
Add a given variable to the map of functions that are present in the set of exported functions.
interned_string get_id(const function_decl &fn)
Returns an ID for a given function.
bool keep_wrt_regex_of_vars_to_keep(const var_decl *var)
Look at the regular expressions of the variables to keep and tell if if a given variable is to be kep...
std::unordered_set< function_decl * > * fn_id_is_in_id_fns_map(const interned_string &fn_id)
Test if a given function ID is in the id-functions map.
regex_t_sptrs_type & compiled_regex_fns_suppress()
Getter for the compiled regular expressions that designate the functions to suppress from the set of ...
regex_t_sptrs_type & compiled_regex_fns_keep()
Getter for the compiled regular expressions that designates the functions to keep in the set of expor...
void add_var_to_exported(const var_decl *var)
Add a variable to the set of exported variables.
void add_fn_to_id_fns_map(function_decl *fn)
Add a given function to the map of functions that are present in the set of exported functions.
bool keep_wrt_regex_of_fns_to_keep(const function_decl *fn)
Look at the regular expressions of the functions to keep and tell if if a given function is to be kep...
const strings_type & sym_id_of_fns_to_keep() const
Getter for the set of ids of functions to keep in the set of exported functions.
static bool fn_is_in_fns_by_repr(function_decl *fn, const std::unordered_set< function_decl * > &fns, string &pretty_representation)
Test if a given function is present in a set of functions, by looking at the pretty representation of...
bool var_id_is_in_id_var_map(const interned_string &var_id) const
Test if a given (ID of a) varialble is present in the variable map. In other words,...
bool keep_wrt_regex_of_vars_to_suppress(const var_decl *var)
Look at the set of variables to suppress from the exported variables set and tell if if a given varia...
regex_t_sptrs_type & compiled_regex_vars_suppress()
Getter of the compiled regular expressions that designate the variables to suppress from the set of e...
bool keep_wrt_regex_of_fns_to_suppress(const function_decl *fn)
Look at the set of functions to suppress from the exported functions set and tell if if a given funct...
static bool fn_is_in_fns(function_decl *fn, const std::unordered_set< function_decl * > &fns)
Test if a given function is present in a set of functions.
const strings_type & sym_id_of_vars_to_keep() const
Getter for the set of ids of variables to keep in the set of exported variables.
void add_fn_to_exported(function_decl *fn)
Add a function to the set of exported functions.
bool fn_is_in_id_fns_map(function_decl *fn)
Test if a function is in the id-functions map.
Abstracts the building of the set of exported variables and functions.
Abstraction of a group of corpora.
This is the abstraction of a set of translation units (themselves seen as bundles of unitary abi arte...
origin
This abstracts where the corpus comes from. That is, either it has been read from the native xml form...
vector< const var_decl * > variables
Convenience typedef for std::vector<abigail::ir::var_decl*>
std::unordered_set< const function_decl * > functions_set
Convenience typedef for std::unordered_set<const function_decl*>
shared_ptr< exported_decls_builder > exported_decls_builder_sptr
Convenience typedef for shared_ptr<exported_decls_builder>.
std::unordered_set< const var_decl * > variables_set
Convenience typedef for std::unordered_set<const var_decl*>.
vector< const function_decl * > functions
Convenience typedef for std::vector<abigail::ir::function_decl*>
vector< string > strings_type
A convenience typedef for std::vector<string>.
virtual void get_qualified_name(interned_string &qualified_name, bool internal=false) const
Compute the qualified name of the decl.
static bool get_name_and_version_from_id(const string &id, string &name, string &ver)
Given the ID of a symbol, get the name and the version of said symbol.
This is an abstraction of the set of resources necessary to manage several aspects of the internal re...
Abstraction for a function declaration.
const elf_symbol_sptr & get_symbol() const
Gets the the underlying ELF symbol for the current variable, that was set using function_decl::set_sy...
virtual string get_pretty_representation(bool internal=false, bool qualified_name=true) const
Get the pretty representation of the current instance of function_decl.
interned_string get_id() const
Return an ID that tries to uniquely identify the function inside a program or a library.
Abstraction of a function type.
A declaration that introduces a scope.
This is a type that aggregates maps of all the kinds of types that are supported by libabigail.
Abstracts a variable declaration.
virtual const interned_string & get_qualified_name(bool internal=false) const
Get the qualified name of a given variable or data member.
const elf_symbol_sptr & get_symbol() const
Gets the the underlying ELF symbol for the current variable, that was set using var_decl::set_symbol(...
interned_string get_id() const
Return an ID that tries to uniquely identify the variable inside a program or a library.
shared_ptr< reference_type_def > reference_type_def_sptr
Convenience typedef for a shared pointer on a reference_type_def.
shared_ptr< elf_symbol > elf_symbol_sptr
A convenience typedef for a shared pointer to elf_symbol.
shared_ptr< array_type_def > array_type_def_sptr
Convenience typedef for a shared pointer on a array_type_def.
std::vector< elf_symbol_sptr > elf_symbols
Convenience typedef for a vector of elf_symbol.
shared_ptr< class_decl > class_decl_sptr
Convenience typedef for a shared pointer on a class_decl.
vector< regex_t_sptr > regex_t_sptrs_type
A convenience typedef for std::vector<regex_t_sptr>.
shared_ptr< function_type > function_type_sptr
Convenience typedef for a shared pointer on a function_type.
shared_ptr< typedef_decl > typedef_decl_sptr
Convenience typedef for a shared pointer on a typedef_decl.
shared_ptr< scope_decl > scope_decl_sptr
Convenience typedef for a shared pointer on a scope_decl.
shared_ptr< pointer_type_def > pointer_type_def_sptr
Convenience typedef for a shared pointer on a pointer_type_def.
unordered_map< string, translation_unit_sptr > string_tu_map_type
Convenience typedef for a map that associates a string to a translation unit.
void maybe_update_types_lookup_map(const type_decl_sptr &basic_type)
Update the map that associates the fully qualified name of a basic type with the type itself.
unordered_map< string, std::unordered_set< function_decl * > > str_fn_ptr_set_map_type
Convenience typedef for a hash map which key is a string and which data is a set of abigail::ir::func...
shared_ptr< enum_type_decl > enum_type_decl_sptr
Convenience typedef for shared pointer to a enum_type_decl.
unordered_map< interned_string, std::unordered_set< function_decl * >, hash_interned_string > istr_fn_ptr_set_map_type
Convenience typedef for a hash map which key is an interned_string and which data is a set of abigail...
std::set< translation_unit_sptr, shared_translation_unit_comp > translation_units
Convenience typedef for an ordered set of translation_unit_sptr.
shared_ptr< type_decl > type_decl_sptr
Convenience typedef for a shared pointer on a type_decl.
std::unordered_map< string, elf_symbols > string_elf_symbols_map_type
Convenience typedef for a map which key is a string and which value is a vector of elf_symbol.
unordered_map< string, vector< function_decl * > > str_fn_ptrs_map_type
Convenience typedef for a hash map which key is a string and which data is a vector of abigail::ir::f...
unordered_map< string, var_decl * > str_var_ptr_map_type
Convenience typedef for a hash map which key is a string and which data is an abigail::ir::var_decl*.
unordered_map< interned_string, var_decl *, hash_interned_string > istr_var_ptr_map_type
Convenience typedef for a hash map which key is an interned_string and which data is an abigail::ir::...
bool match(const regex_t_sptr &r, const std::string &str)
See if a string matches a regex.
regex_t_sptr compile(const std::string &str)
Compile a regex from a string.
std::shared_ptr< regex_t > regex_t_sptr
A convenience typedef for a shared pointer of regex_t.
Toplevel namespace for libabigail.
A functor to hash instances of interned_string.
The private data of the corpus type.
const elf_symbols & get_sorted_var_symbols() const
Getter for the sorted vector of variable symbols for this corpus.
const string_elf_symbols_map_type & get_undefined_var_symbol_map() const
Return a map from name to undefined variable symbol for this corpus.
unordered_set< interned_string, hash_interned_string > * get_public_types_pretty_representations()
Getter of the set of pretty representation of types that are reachable from public interfaces (global...
const string_elf_symbols_map_type & get_var_symbol_map() const
Return a map from name to variable symbol for this corpus.
const elf_symbols & get_sorted_fun_symbols() const
Return a sorted vector of function symbols for this corpus.
type_maps & get_types()
Get the maps that associate a name to a certain kind of type.
const elf_symbols & get_sorted_undefined_fun_symbols() const
Getter for a sorted vector of the function symbols undefined in this corpus.
const string_elf_symbols_map_type & get_undefined_fun_symbol_map() const
Return a map from name to undefined function symbol for this corpus.
const string_elf_symbols_map_type & get_fun_symbol_map() const
Return a map from name to function symbol for this corpus.
const elf_symbols & get_unreferenced_function_symbols() const
Return a list of symbols that are not referenced by any function of corpus::get_functions().
const elf_symbols & get_unreferenced_variable_symbols() const
Return a list of symbols that are not referenced by any variable of corpus::get_variables().
const elf_symbols & get_sorted_undefined_var_symbols() const
Getter for a sorted vector of the variable symbols undefined in this corpus.
std::unordered_set< function_decl * > * lookup_functions(const interned_string &id)
Lookup the function which has a given function ID.
~priv()
Destructor of the corpus::priv type.