my $rulemap = Games::Go::Cinderblock::Rulemap::Rect->new ( h => 19, w => 19 ); #initialize two empty nodesets my $ns1 = $rulemap->nodeset; my $ns2 = $ns1->copy; #add two opposite corners. $ns1->add([0,0], [18,18]); # add 4 nodes to $ns2, each adjacent to the 2 nodes in $ns1 $ns2->add($ns1->adjacent); # let ns2 have the original 2 corners. $ns2->add($ns1); # split ns2 into its 2 connected subsets my @foo = $ns2->disjoint_split; # compare equality my $false = $ns1 == $ns2;
A set of nodes :|
insertion, lookup, removal of a single node is O(1). Nodesets are mutable, but union & intersect do not affect the invocant. Nodes are topology-implementation-dependent. In ::Rect instances, nodes are defined as a
[$row,$col] array ref. In future instances, a node may be defined as a number, with an entry in an adjacency matrix.
Set operations unclude union, intersect,
==, count, add, remove, copy, has_node, disjoint_split
Returns the number of nodes in the nodeset.
remove each may take either a nodeset or a list of nodes
$set->add([3,3]) my $true = $set->has_node([3,3]) $set->remove([3,3]) my $false = $set->has_node([3,3])
my $result = $set1->union($set2)
Return the set of nodes in either the invocant or operand.
my $result = $set1->intersect($set2)
Return the set of nodes in both invocant and operand.
Compare two sets. Returns true or false.
Returns a nodeset of nodes adjacent to the nodes of the invocant. The result excludes any nodes of the invocant.
Return an arrayref of disconnected regions. Use this with Games::Go::Cinderblock::State's grep functionality to uncover distinct, disconnected regions of a particular attribute (color, etc.)