Set::Object - set of objects |
Set::Object - set of objects
use Set::Object; $set = Set::Object->new();
This modules implements a set of objects, that is, an unordered collection of objects without duplication.
Return a new Set::Object
containing the elements passed in list.
The elements must be objects.
Add objects to the Set::Object
.
Adding the same object several times is not an error,
but any Set::Object
will contain at most one occurence of the
same object.
Returns the number of elements that were actually added.
Return true
if all the objects in list are members of the Set::Object
.
list may be empty, in which case true
is returned.
Return the objects contained in the Set::Object
.
Return the number of elements in the Set::Object
.
Remove objects from a Set::Object
.
Removing the same object more than once, or removing an object
absent from the Set::Object
is not an error.
Returns the number of elements that were actually removed.
Empty this Set::Object
.
Return a textual Smalltalk-ish representation of the Set::Object
.
Also available as overloaded operator ``''.
Return a new Set::Object
containing the intersection of the
Set::Object
s passed as arguments.
Also available as overloaded operator *.
Return a new Set::Object
containing the union of the
Set::Object
s passed as arguments.
Also available as overloaded operator +.
Return true
if this Set::Object
is a subset of set.
Also available as operator <=.
Return true
if this Set::Object
is a proper subset of set
Also available as operator <.
Return true
if this Set::Object
is a superset of set.
Also available as operator >=.
Return true
if this Set::Object
is a proper superset of set
Also available as operator >.
The following functions are defined by the Set::Object XS code for convenience; they are largely identical to the versions in the Scalar::Util module, but there are a couple that provide functions not catered to by that module.
ref
function, but returns the type
of reference; ie, if the reference is blessed then it returns what
ref
would have if it were not blessed. Useful for ``seeing through''
blessed references.
This function returns the ``p'' versions of the macro (SvIOKp, etc); use with caution.
But wait, you say - Set::Object has no indices, one of the fundamental properties of a Set is that it is an unordered collection. Which means no indices. Stay tuned for the answer.
This module is partly written in C, so you'll need a C compiler to install it. Use the familiar sequence:
perl Makefile.PL make make test make install
This module was developed on Windows NT 4.0, using the Visual C++ compiler with Service Pack 2. It was also tested on AIX using IBM's xlc compiler.
The following benchmark compares Set::Object
with using a hash to
emulate a set-like collection:
use Set::Object;
package Obj; sub new { bless { } }
@els = map { Obj->new() } 1..1000;
require Benchmark;
Benchmark::timethese(100, { 'Control' => sub { }, 'H insert' => sub { my %h = (); @h{@els} = @els; }, 'S insert' => sub { my $s = Set::Object->new(); $s->insert(@els) }, } );
%gh = (); @gh{@els} = @els;
$gs = Set::Object->new(@els); $el = $els[33];
Benchmark::timethese(100_000, { 'H lookup' => sub { exists $gh{33} }, 'S lookup' => sub { $gs->includes($el) } } );
On my computer the results are:
Benchmark: timing 100 iterations of Control, H insert, S insert... Control: 0 secs ( 0.01 usr 0.00 sys = 0.01 cpu) (warning: too few iterations for a reliable count) H insert: 68 secs (67.81 usr 0.00 sys = 67.81 cpu) S insert: 9 secs ( 8.81 usr 0.00 sys = 8.81 cpu) Benchmark: timing 100000 iterations of H lookup, S lookup... H lookup: 7 secs ( 7.14 usr 0.00 sys = 7.14 cpu) S lookup: 6 secs ( 5.94 usr 0.00 sys = 5.94 cpu)
Original Set::Object module by Jean-Louis Leroy, <jll@skynet.be>
Copyright (c) 1998-1999, Jean-Louis Leroy. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License
Portions Copyright (c) 2003, Sam Vilain. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License
perl(1), perltie(1), overload.pm
Set::Object - set of objects |