home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 May
/
Chip_2000-05_cd1.bin
/
zkuste
/
Perl
/
ActivePerl-5.6.0.613.msi
/
䆊䌷䈹䈙䏵-䞅䞆䞀㡆䞃䄦䠥
/
_9f92c6369a3f81bb0bc78fcb9777b3d0
< prev
next >
Wrap
Text File
|
2000-03-23
|
8KB
|
223 lines
<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>