home *** CD-ROM | disk | FTP | other *** search
-
- <HTML>
- <HEAD>
- <TITLE>Set::Object - set of objects</TITLE>
- <LINK REL="stylesheet" HREF="../../../Active.css" TYPE="text/css">
- <LINK REV="made" HREF="mailto:">
- </HEAD>
-
- <BODY>
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
- <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
- <STRONG><P CLASS=block> Set::Object - set of objects</P></STRONG>
- </TD></TR>
- </TABLE>
-
- <A NAME="__index__"></A>
- <!-- INDEX BEGIN -->
-
- <UL>
-
- <LI><A HREF="#name">NAME</A></LI><LI><A HREF="#supportedplatforms">SUPPORTED PLATFORMS</A></LI>
-
- <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
- <LI><A HREF="#description">DESCRIPTION</A></LI>
- <LI><A HREF="#class methods">CLASS METHODS</A></LI>
- <UL>
-
- <LI><A HREF="#new( [list] )">new( [<EM>list</EM>] )</A></LI>
- </UL>
-
- <LI><A HREF="#instance methods">INSTANCE METHODS</A></LI>
- <UL>
-
- <LI><A HREF="#insert( [list] )">insert( [<EM>list</EM>] )</A></LI>
- <LI><A HREF="#includes( [list] )">includes( [<EM>list</EM>] )</A></LI>
- <LI><A HREF="#members">members</A></LI>
- <LI><A HREF="#size">size</A></LI>
- <LI><A HREF="#remove( [list] )">remove( [<EM>list</EM>] )</A></LI>
- <LI><A HREF="#clear">clear</A></LI>
- <LI><A HREF="#as_string">as_string</A></LI>
- <LI><A HREF="#intersection( [list] )">intersection( [<EM>list</EM>] )</A></LI>
- <LI><A HREF="#union( [list] )">union( [<EM>list</EM>] )</A></LI>
- <LI><A HREF="#subset( set )">subset( <EM>set</EM> )</A></LI>
- <LI><A HREF="#proper_subset( set )">proper_subset( <EM>set</EM> )</A></LI>
- <LI><A HREF="#superset( set )">superset( <EM>set</EM> )</A></LI>
- <LI><A HREF="#proper_superset( set )">proper_superset( <EM>set</EM> )</A></LI>
- </UL>
-
- <LI><A HREF="#installation">INSTALLATION</A></LI>
- <LI><A HREF="#performance">PERFORMANCE</A></LI>
- <LI><A HREF="#author">AUTHOR</A></LI>
- <LI><A HREF="#licence">LICENCE</A></LI>
- <LI><A HREF="#see also">SEE ALSO</A></LI>
- </UL>
- <!-- INDEX END -->
-
- <HR>
- <P>
- <H1><A NAME="name">NAME</A></H1>
- <P>Set::Object - set of objects</P>
- <P>
- <HR>
- <H1><A NAME="supportedplatforms">SUPPORTED PLATFORMS</A></H1>
- <UL>
- <LI>Linux</LI>
- <LI>Solaris</LI>
- <LI>Windows</LI>
- </UL>
- <HR>
- <H1><A NAME="synopsis">SYNOPSIS</A></H1>
- <PRE>
- use Set::Object;
- $set = Set::Object->new();</PRE>
- <P>
- <HR>
- <H1><A NAME="description">DESCRIPTION</A></H1>
- <P>This modules implements a set of objects, that is, an unordered
- collection of objects without duplication.</P>
- <P>
- <HR>
- <H1><A NAME="class methods">CLASS METHODS</A></H1>
- <P>
- <H2><A NAME="new( [list] )">new( [<EM>list</EM>] )</A></H2>
- <P>Return a new <CODE>Set::Object</CODE> containing the elements passed in <EM>list</EM>.
- The elements must be objects.</P>
- <P>
- <HR>
- <H1><A NAME="instance methods">INSTANCE METHODS</A></H1>
- <P>
- <H2><A NAME="insert( [list] )">insert( [<EM>list</EM>] )</A></H2>
- <P>Add objects to the <CODE>Set::Object</CODE>.
- Adding the same object several times is not an error,
- but any <CODE>Set::Object</CODE> will contain at most one occurence of the
- same object.
- Returns the number of elements that were actually added.</P>
- <P>
- <H2><A NAME="includes( [list] )">includes( [<EM>list</EM>] )</A></H2>
- <P>Return <CODE>true</CODE> if all the objects in <EM>list</EM> are members of the <CODE>Set::Object</CODE>.
- <EM>list</EM> may be empty, in which case <CODE>true</CODE> is returned.</P>
- <P>
- <H2><A NAME="members">members</A></H2>
- <P>Return the objects contained in the <CODE>Set::Object</CODE>.</P>
- <P>
- <H2><A NAME="size">size</A></H2>
- <P>Return the number of elements in the <CODE>Set::Object</CODE>.</P>
- <P>
- <H2><A NAME="remove( [list] )">remove( [<EM>list</EM>] )</A></H2>
- <P>Remove objects from a <CODE>Set::Object</CODE>.
- Removing the same object more than once, or removing an object
- absent from the <CODE>Set::Object</CODE> is not an error.
- Returns the number of elements that were actually removed.</P>
- <P>
- <H2><A NAME="clear">clear</A></H2>
- <P>Empty this <CODE>Set::Object</CODE>.</P>
- <P>
- <H2><A NAME="as_string">as_string</A></H2>
- <P>Return a textual Smalltalk-ish representation of the <CODE>Set::Object</CODE>.
- Also available as overloaded operator ``''.</P>
- <P>
- <H2><A NAME="intersection( [list] )">intersection( [<EM>list</EM>] )</A></H2>
- <P>Return a new <CODE>Set::Object</CODE> containing the intersection of the
- <CODE>Set::Object</CODE>s passed as arguments.
- Also available as overloaded operator *.</P>
- <P>
- <H2><A NAME="union( [list] )">union( [<EM>list</EM>] )</A></H2>
- <P>Return a new <CODE>Set::Object</CODE> containing the union of the
- <CODE>Set::Object</CODE>s passed as arguments.
- Also available as overloaded operator +.</P>
- <P>
- <H2><A NAME="subset( set )">subset( <EM>set</EM> )</A></H2>
- <P>Return <CODE>true</CODE> if this <CODE>Set::Object</CODE> is a subset of <EM>set</EM>.
- Also available as operator <=.</P>
- <P>
- <H2><A NAME="proper_subset( set )">proper_subset( <EM>set</EM> )</A></H2>
- <P>Return <CODE>true</CODE> if this <CODE>Set::Object</CODE> is a proper subset of <EM>set</EM>
- Also available as operator <.</P>
- <P>
- <H2><A NAME="superset( set )">superset( <EM>set</EM> )</A></H2>
- <P>Return <CODE>true</CODE> if this <CODE>Set::Object</CODE> is a superset of <EM>set</EM>.
- Also available as operator >=.</P>
- <P>
- <H2><A NAME="proper_superset( set )">proper_superset( <EM>set</EM> )</A></H2>
- <P>Return <CODE>true</CODE> if this <CODE>Set::Object</CODE> is a proper superset of <EM>set</EM>
- Also available as operator >.</P>
- <P>
- <HR>
- <H1><A NAME="installation">INSTALLATION</A></H1>
- <P>This module is partly written in C, so you'll need a C compiler to install it.
- Use the familiar sequence:</P>
- <PRE>
- perl Makefile.PL
- make
- make test
- make install</PRE>
- <P>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.</P>
- <P>
- <HR>
- <H1><A NAME="performance">PERFORMANCE</A></H1>
- <P>The following benchmark compares <CODE>Set::Object</CODE> with using a hash to
- emulate a set-like collection:</P>
- <PRE>
- use Set::Object;</PRE>
- <PRE>
- package Obj;
- sub new { bless { } }</PRE>
- <PRE>
- @els = map { Obj->new() } 1..1000;</PRE>
- <PRE>
- require Benchmark;</PRE>
- <PRE>
- Benchmark::timethese(100, {
- 'Control' => sub { },
- 'H insert' => sub { my %h = (); @h{@els} = @els; },
- 'S insert' => sub { my $s = Set::Object->new(); $s->insert(@els) },
- } );</PRE>
- <PRE>
- %gh = ();
- @gh{@els} = @els;</PRE>
- <PRE>
- $gs = Set::Object->new(@els);
- $el = $els[33];</PRE>
- <PRE>
- Benchmark::timethese(100_000, {
- 'H lookup' => sub { exists $gh{33} },
- 'S lookup' => sub { $gs->includes($el) }
- } );</PRE>
- <P>On my computer the results are:</P>
- <PRE>
- 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)</PRE>
- <P>
- <HR>
- <H1><A NAME="author">AUTHOR</A></H1>
- <P>Jean-Louis Leroy, <A HREF="mailto:jll@skynet.be">jll@skynet.be</A></P>
- <P>
- <HR>
- <H1><A NAME="licence">LICENCE</A></H1>
- <P>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</P>
- <P>
- <HR>
- <H1><A NAME="see also">SEE ALSO</A></H1>
- <P>perl(1).
- overload.pm</P>
- <TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=100%>
- <TR><TD CLASS=block VALIGN=MIDDLE WIDTH=100% BGCOLOR="#cccccc">
- <STRONG><P CLASS=block> Set::Object - set of objects</P></STRONG>
- </TD></TR>
- </TABLE>
-
- </BODY>
-
- </HTML>
-