class cfg_edge_set

A set of ( point , edge_label ).

Return type for CFG-related queries on point : point.cfg_inter_targets(), point.cfg_targets()

Use a cfg_edge_set_iterator to iterate over a cfg_edge_set . For example:

for e in my_cfg_edge_set:
    print('cfg_edge: ', e)

cfg_edge_set Details

class cs.cfg_edge_set

A set of ( point , edge_label ).

__init__(other)

Copy constructor.

Parameters:other (cfg_edge_set) –
>>> v0 = project.current()
>>> v1 = v0.procedures_vector()
>>> v2 = v1[3].entry_point()
>>> v3 = v2.cfg_targets()
>>> cfg_edge_set(v3)
<cs.cfg_edge_set {(<cs.point [call-site] whoknows(int)>, <cs.edge_label T>)}>
__contains__(elt)

Check: does the set contain the specified element?

Parameters:elt ((point, edge_label)) – The element to check.
Return type:bool
Returns:True if elt is present in the set, False otherwise.
>>> v0 = edge_label(True)
>>> v1 = project.current()
>>> v2 = v1.procedures_vector()
>>> v3 = v2[4].call_sites_vector()
>>> v4 = v3[0].cfg_targets()
>>> v5 = v2[3].exit_point()
>>> (v5, v0) in v4
False
__eq__(__y)

Equality operator for cfg_edge_set .

Parameters:__y (cfg_edge_set) – The set to compare against.
Return type:bool
Returns:True if self == __y, False otherwise.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> cs = b.call_sites_vector()
>>> cs[0].cfg_targets() == cs[1].cfg_targets()
False
__hash__()

Get a hash of the set.

Return type:int
Returns:The hash value for the set.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> ep = b.entry_point()
>>> eptargs = ep.cfg_targets()
>>> hash(eptargs)
1926813223
__iter__()

Get an iterator over the set elements.

Return type:cfg_edge_set_iterator
Returns:An iterator over the set elements.
>>> v0 = project.current()
>>> b = v0.find_procedure('bar(int, void *, int)')
>>> ctrl_pt = next(pt for pt in b.points() if pt.get_kind()==point_kind.CONTROL_POINT)
>>> ctrl_pt
<cs.point [control-point] i == 0>
>>> for target in ctrl_pt.cfg_targets(): # cfg_edge_set.__iter__() and cfg_edge_set_iterator.__next__() underlyingly manage iteration
...    print(target)
...
(<cs.point [expression] $temp3 = i>, <cs.edge_label T>)
(<cs.point [expression] $temp4 = i>, <cs.edge_label F>)
__len__()

Get the set cardinality.

Return type:int
Returns:The number of elements in the set.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> for cs in b.call_sites():
...    print(cs, len(cs.cfg_targets()))
...
[call-site] bar(int, void *, int) 1
[call-site] mymalloc(int) 1
__ne__(__y)

Inequality operator for cfg_edge_set .

Parameters:__y (cfg_edge_set) – The set to compare against.
Return type:bool
Returns:False if self == __y according to cfg_edge_set.__eq__(), True otherwise.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> ep = b.entry_point()
>>> cs = next(s for s in b.call_sites())
>>> cs.cfg_targets() != ep.cfg_targets()
True
__repr__()

Get a representation of a set that includes information useful for debugging.

Return type:str
Returns:The string representation.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> cs = next(s for s in b.call_sites())
>>> repr(cs.cfg_targets())
'<cs.cfg_edge_set {(<cs.point [actual-in] $param_3 = 2>, <cs.edge_label T>)}>'
__str__()

Get a simple string representation of a set.

Return type:str
Returns:The string representation.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> cs = next(s for s in b.call_sites())
>>> str(cs.cfg_targets())
'{(<cs.point [actual-in] $param_3 = 2>, <cs.edge_label T>)}'
empty()

Check: is the set empty?

Return type:bool
Returns:True if the set is empty, False otherwise.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> b.entry_point().cfg_targets().empty()
False
>>> b.exit_point().cfg_targets().empty()
True
to_vector()

Get a list of all the elements in the set.

Return type:[(point, edge_label)]
Returns:A list containing all the elements in the set.
>>> b = project.current().find_procedure('bar(int, void *, int)')
>>> b.entry_point().cfg_targets().to_vector()
((<cs.point [control-point] i == 0>, <cs.edge_label T>),)