libabigail
|
An abstraction of a diff between entities that are of a different kind (disctinct). More...
#include <abg-comparison.h>
Classes | |
struct | priv |
The private data structure for distinct_diff. More... | |
Public Member Functions | |
virtual void | chain_into_hierarchy () |
Populate the vector of children node of the diff base type sub-object of this instance of @distinct_diff. More... | |
const diff_sptr | compatible_child_diff () const |
Getter for the child diff of this distinct_diff instance. More... | |
const type_or_decl_base_sptr | first () const |
Getter for the first subject of the diff. More... | |
virtual const string & | get_pretty_representation () const |
virtual bool | has_changes () const |
virtual enum change_kind | has_local_changes () const |
virtual void | report (ostream &out, const string &indent="") const |
Emit a report about the current diff instance. More... | |
const type_or_decl_base_sptr | second () const |
Getter for the second subject of the diff. More... | |
![]() | |
diff_category | add_to_category (diff_category c) |
Adds the current diff tree node to an additional set of categories. Note that the categories include thoses inherited from the children nodes of this diff node. More... | |
void | add_to_local_and_inherited_categories (diff_category c) |
Adds the current diff tree node to the categories resulting from the local and inherited changes of the current diff node. More... | |
diff_category | add_to_local_category (diff_category c) |
Adds the current diff tree node to the categories resulting from the local changes of the current diff node. More... | |
void | append_child_node (diff_sptr) |
Add a new child node to the vector of children nodes for the current diff node. More... | |
virtual void | chain_into_hierarchy () |
This constructs the relation between this diff node and its detail diff nodes, in the generic view of the diff node. More... | |
const vector< diff * > & | children_nodes () const |
Getter for the children nodes of the current diff node. More... | |
const diff_context_sptr | context () const |
Getter of the context of the current diff. More... | |
void | context (diff_context_sptr c) |
Setter of the context of the current diff. More... | |
bool | currently_reporting () const |
Tests if we are currently in the middle of emitting a report for this diff. More... | |
void | currently_reporting (bool f) const |
Sets a flag saying if we are currently in the middle of emitting a report for this diff. More... | |
type_or_decl_base_sptr | first_subject () const |
Getter of the first subject of the diff. More... | |
diff * | get_canonical_diff () const |
Getter for the canonical diff of the current instance of diff. More... | |
diff_category | get_category () const |
Getter for the category of the current diff tree node. More... | |
diff_category | get_class_of_equiv_category () const |
Getter of the category of the class of equivalence of the current diff tree node. More... | |
diff_category | get_local_category () const |
Getter for the local category of the current diff tree node. More... | |
virtual const string & | get_pretty_representation () const |
Get a pretty representation of the current diff node. More... | |
virtual bool | has_changes () const =0 |
Pure interface to get the length of the changes encapsulated by this diff. A length of zero means that the current instance of diff doesn't carry any change. More... | |
bool | has_descendant_allowed_by_specific_negated_suppression () const |
Test if the current diff node has a descendant node which is specifically allowed by a negated suppression specification. More... | |
virtual enum change_kind | has_local_changes () const =0 |
Pure interface to know if the current instance of @diff carries a local change. A local change is a change that is on the diff object itself, as opposed to a change that is carried by some of its children nodes. More... | |
bool | has_local_changes_to_be_reported () const |
Test if this diff tree node should be reported when considering the categories that were *NOT* inherited from its children nodes. More... | |
bool | has_parent_allowed_by_specific_negated_suppression () const |
Test if the current diff node has a parent node which is specifically allowed by a negated suppression specification. More... | |
bool | is_allowed_by_specific_negated_suppression () const |
Test if this diff node is allowed (prevented from being suppressed) by at least one negated suppression specification. More... | |
bool | is_categorized_as_suppressed () const |
Test if the current diff node has been suppressed by a suppression specification or it has been categorized as suppressed due to category propagation. More... | |
bool | is_filtered_out () const |
Test if this diff tree node is to be filtered out for reporting purposes. More... | |
bool | is_filtered_out_without_looking_at_allowed_changes () const |
Test if this diff tree node is to be filtered out for reporting purposes, but without considering the categories that can /force/ the node to be unfiltered. More... | |
bool | is_filtered_out_wrt_non_inherited_categories () const |
Test if this diff tree node is to be filtered out for reporting purposes, but by considering only the categories that were *NOT* inherited from its children nodes. More... | |
bool | is_suppressed () const |
Test if the current diff node has been suppressed by a user-provided suppression specification. More... | |
bool | is_suppressed (bool &is_private_type) const |
Test if the current diff node has been suppressed by a user-provided suppression specification or by an auto-generated "private type" suppression specification. More... | |
bool | is_traversing () const |
Tell if a given node is being traversed or not. More... | |
const diff * | parent_node () const |
Getter for the parent node of the current diff node. More... | |
diff_category | remove_from_category (diff_category c) |
Remove the current diff tree node from an a existing sef of categories. The categories include those inherited from the children nodes of the current diff node. More... | |
diff_category | remove_from_local_category (diff_category c) |
Remove the current diff tree node from the categories resulting from the local changes. More... | |
virtual void | report (ostream &out, const string &indent="") const =0 |
Pure interface to report the diff in a serialized form that is legible for the user. More... | |
bool | reported_once () const |
Tests if a report has already been emitted for the current diff. More... | |
void | reported_once (bool f) const |
Sets a flag saying if a report has already been emitted for the current diff. More... | |
type_or_decl_base_sptr | second_subject () const |
Getter of the second subject of the diff. More... | |
void | set_category (diff_category c) |
Set the category of the current diff node. This category includes the categories inherited from the children nodes of the current diff node. More... | |
void | set_local_category (diff_category c) |
Set the local category of the current diff node. More... | |
bool | to_be_reported () const |
Test if this diff tree node should be reported. More... | |
virtual bool | traverse (diff_node_visitor &v) |
The generic traversing code that walks a given diff sub-tree. More... | |
virtual bool | traverse (diff_node_visitor &v) |
The default traverse function. More... | |
![]() | |
virtual | ~traversable_base () |
Destructor of the traversable_base type. More... | |
Static Public Member Functions | |
static bool | entities_are_of_distinct_kinds (type_or_decl_base_sptr first, type_or_decl_base_sptr second) |
Test if the two arguments are of different kind, or that are both NULL. More... | |
Protected Member Functions | |
distinct_diff (type_or_decl_base_sptr first, type_or_decl_base_sptr second, diff_context_sptr ctxt=diff_context_sptr()) | |
Constructor for distinct_diff. More... | |
![]() | |
diff (type_or_decl_base_sptr first_subject, type_or_decl_base_sptr second_subject) | |
Constructor for the diff type. More... | |
diff (type_or_decl_base_sptr first_subject, type_or_decl_base_sptr second_subject, diff_context_sptr ctxt) | |
Constructor for the diff type. More... | |
void | begin_traversing () |
Flag a given diff node as being traversed. More... | |
bool | do_log () const |
Test if logging was requested. More... | |
void | do_log (bool) |
Request logging (or not) More... | |
void | end_traversing () |
Flag a given diff node as not being traversed anymore. More... | |
virtual void | finish_diff_type () |
Finish the insertion of a diff tree node into the diff graph. More... | |
void | set_canonical_diff (diff *) |
Setter for the canonical diff of the current instance of diff. More... | |
![]() | |
traversable_base () | |
Default constructor of the traversable_base type. More... | |
bool | visiting () const |
This should returns false before and after the node has been visiting. During the visiting of the node (and of its children) this should return true. More... | |
void | visiting (bool f) |
The traversing code should be responsible of calling this, not the user code. More... | |
Friends | |
distinct_diff_sptr | compute_diff_for_distinct_kinds (const type_or_decl_base_sptr first, const type_or_decl_base_sptr second, diff_context_sptr ctxt) |
Try to diff entities that are of distinct kinds. More... | |
Additional Inherited Members | |
![]() | |
std::unique_ptr< priv > | priv_ |
An abstraction of a diff between entities that are of a different kind (disctinct).
Definition at line 1221 of file abg-comparison.h.
|
protected |
Constructor for distinct_diff.
Note that the two entities considered for the diff (and passed in parameter) must be of different kinds.
first | the first entity to consider for the diff. |
second | the second entity to consider for the diff. |
ctxt | the context of the diff. Note that this context object must stay alive at least during the life time of the current instance of distinct_diff. Otherwise memory corruption issues occur. |
Definition at line 2919 of file abg-comparison.cc.
|
virtual |
Populate the vector of children node of the diff base type sub-object of this instance of @distinct_diff.
The children nodes can then later be retrieved using diff::children_nodes().
Reimplemented from diff.
Definition at line 2898 of file abg-comparison.cc.
const diff_sptr compatible_child_diff | ( | ) | const |
Getter for the child diff of this distinct_diff instance.
When a distinct_diff has two subjects that are different but compatible, then the distinct_diff instance has a child diff node (named the compatible child diff) that is the diff between the two subjects stripped from their typedefs. Otherwise, the compatible child diff is nul.
Note that two diff subjects (that compare different) are considered compatible if stripping typedefs out of them makes them comparing equal.
Definition at line 2954 of file abg-comparison.cc.
|
static |
Test if the two arguments are of different kind, or that are both NULL.
first | the first argument to test for similarity in kind. |
second | the second argument to test for similarity in kind. |
Definition at line 2981 of file abg-comparison.cc.
const type_or_decl_base_sptr first | ( | ) | const |
Getter for the first subject of the diff.
Definition at line 2930 of file abg-comparison.cc.
|
virtual |
Reimplemented from diff.
Definition at line 2871 of file abg-comparison.cc.
|
virtual |
Implements diff.
Definition at line 3000 of file abg-comparison.cc.
|
virtual |
Implements diff.
Definition at line 3007 of file abg-comparison.cc.
|
virtual |
Emit a report about the current diff instance.
out | the output stream to send the diff report to. |
indent | the indentation string to use in the report. |
Implements diff.
Definition at line 3021 of file abg-comparison.cc.
const type_or_decl_base_sptr second | ( | ) | const |
Getter for the second subject of the diff.
Definition at line 2937 of file abg-comparison.cc.
|
friend |
Try to diff entities that are of distinct kinds.
first | the first entity to consider for the diff. |
second | the second entity to consider for the diff. |
ctxt | the context of the diff. |
Definition at line 3037 of file abg-comparison.cc.