Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / tools / perl-5.8.0 / man / man3 / Heap.3
CommitLineData
86530b38
AT
1.\" Automatically generated by Pod::Man v1.34, Pod::Parser v1.13
2.\"
3.\" Standard preamble:
4.\" ========================================================================
5.de Sh \" Subsection heading
6.br
7.if t .Sp
8.ne 5
9.PP
10\fB\\$1\fR
11.PP
12..
13.de Sp \" Vertical space (when we can't use .PP)
14.if t .sp .5v
15.if n .sp
16..
17.de Vb \" Begin verbatim text
18.ft CW
19.nf
20.ne \\$1
21..
22.de Ve \" End verbatim text
23.ft R
24.fi
25..
26.\" Set up some character translations and predefined strings. \*(-- will
27.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
28.\" double quote, and \*(R" will give a right double quote. | will give a
29.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to
30.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C'
31.\" expand to `' in nroff, nothing in troff, for use with C<>.
32.tr \(*W-|\(bv\*(Tr
33.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
34.ie n \{\
35. ds -- \(*W-
36. ds PI pi
37. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
38. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
39. ds L" ""
40. ds R" ""
41. ds C` ""
42. ds C' ""
43'br\}
44.el\{\
45. ds -- \|\(em\|
46. ds PI \(*p
47. ds L" ``
48. ds R" ''
49'br\}
50.\"
51.\" If the F register is turned on, we'll generate index entries on stderr for
52.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
53.\" entries marked with X<> in POD. Of course, you'll have to process the
54.\" output yourself in some meaningful fashion.
55.if \nF \{\
56. de IX
57. tm Index:\\$1\t\\n%\t"\\$2"
58..
59. nr % 0
60. rr F
61.\}
62.\"
63.\" For nroff, turn off justification. Always turn off hyphenation; it makes
64.\" way too many mistakes in technical documents.
65.hy 0
66.if n .na
67.\"
68.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69.\" Fear. Run. Save yourself. No user-serviceable parts.
70. \" fudge factors for nroff and troff
71.if n \{\
72. ds #H 0
73. ds #V .8m
74. ds #F .3m
75. ds #[ \f1
76. ds #] \fP
77.\}
78.if t \{\
79. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80. ds #V .6m
81. ds #F 0
82. ds #[ \&
83. ds #] \&
84.\}
85. \" simple accents for nroff and troff
86.if n \{\
87. ds ' \&
88. ds ` \&
89. ds ^ \&
90. ds , \&
91. ds ~ ~
92. ds /
93.\}
94.if t \{\
95. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101.\}
102. \" troff and (daisy-wheel) nroff accents
103.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110.ds ae a\h'-(\w'a'u*4/10)'e
111.ds Ae A\h'-(\w'A'u*4/10)'E
112. \" corrections for vroff
113.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115. \" for low resolution devices (crt and lpr)
116.if \n(.H>23 .if \n(.V>19 \
117\{\
118. ds : e
119. ds 8 ss
120. ds o a
121. ds d- d\h'-1'\(ga
122. ds D- D\h'-1'\(hy
123. ds th \o'bp'
124. ds Th \o'LP'
125. ds ae ae
126. ds Ae AE
127.\}
128.rm #[ #] #H #V #F C
129.\" ========================================================================
130.\"
131.IX Title "Heap 3"
132.TH Heap 3 "2003-12-04" "perl v5.8.0" "User Contributed Perl Documentation"
133.SH "NAME"
134Heap \- Perl extensions for keeping data partially sorted
135.SH "SYNOPSIS"
136.IX Header "SYNOPSIS"
137.Vb 1
138\& use Heap;
139.Ve
140.PP
141.Vb 2
142\& my $heap = Heap->new;
143\& my $elem;
144.Ve
145.PP
146.Vb 1
147\& use Heap::Elem::Num(NumElem);
148.Ve
149.PP
150.Vb 4
151\& foreach $i ( 1..100 ) {
152\& $elem = NumElem( $i );
153\& $heap->add( $elem );
154\& }
155.Ve
156.PP
157.Vb 3
158\& while( defined( $elem = $heap->extract_maximum ) ) {
159\& print "Smallest is ", $elem->val, "\en";
160\& }
161.Ve
162.SH "DESCRIPTION"
163.IX Header "DESCRIPTION"
164The Heap collection of modules provide routines that manage
165a heap of elements. A heap is a partially sorted structure
166that is always able to easily extract the smallest of the
167elements in the structure (or the largest if a reversed compare
168routine is provided).
169.PP
170If the collection of elements is changing dynamically, the
171heap has less overhead than keeping the collection fully
172sorted.
173.PP
174The elements must be objects as described in \*(L"Heap::Elem\*(R"
175and all elements inserted into one heap must be mutually
176compatible \- either the same class exactly or else classes that
177differ only in ways unrelated to the \fBHeap::Elem\fR interface.
178.SH "METHODS"
179.IX Header "METHODS"
180.ie n .IP "$heap = \fIHeapClass::new()\fR; $heap2\fR = \f(CW$heap1\fR\->\fInew();" 4
181.el .IP "$heap = \fIHeapClass::new()\fR; \f(CW$heap2\fR = \f(CW$heap1\fR\->\fInew()\fR;" 4
182.IX Item "$heap = HeapClass::new(); $heap2 = $heap1->new();"
183Returns a new heap object of the specified (sub\-)class.
184This is often used as a subroutine instead of a method,
185of course.
186.IP "$heap\->\s-1DESTROY\s0" 4
187.IX Item "$heap->DESTROY"
188Ensures that no internal circular data references remain.
189Some variants of Heap ignore this (they have no such references).
190Heap users normally need not worry about it, \s-1DESTROY\s0 is automatically
191invoked when the heap reference goes out of scope.
192.IP "$heap\->add($elem)" 4
193.IX Item "$heap->add($elem)"
194Add an element to the heap.
195.ie n .IP "$elem = $heap\->top" 4
196.el .IP "$elem = \f(CW$heap\fR\->top" 4
197.IX Item "$elem = $heap->top"
198Return the top element on the heap. It is \fBnot\fR removed from
199the heap but will remain at the top. It will be the smallest
200element on the heap (unless a reversed cmp function is being
201used, in which case it will be the largest). Returns \fIundef\fR
202if the heap is empty.
203.Sp
204This method used to be called \*(L"minimum\*(R" instead of \*(L"top\*(R". The
205old name is still supported but is deprecated. (It was confusing
206to use the method \*(L"minimum\*(R" to get the maximum value on the heap
207when a reversed cmp function was used for ordering elements.)
208.ie n .IP "$elem = $heap\->extract_top" 4
209.el .IP "$elem = \f(CW$heap\fR\->extract_top" 4
210.IX Item "$elem = $heap->extract_top"
211Delete the top element from the heap and return it. Returns
212\&\fIundef\fR if the heap was empty.
213.Sp
214This method used to be called \*(L"extract_minimum\*(R" instead of
215\&\*(L"extract_top\*(R". The old name is still supported but is deprecated.
216(It was confusing to use the method \*(L"extract_minimum\*(R" to get the
217maximum value on the heap when a reversed cmp function was used
218for ordering elements.)
219.IP "$heap1\->absorb($heap2)" 4
220.IX Item "$heap1->absorb($heap2)"
221Merge all of the elements from \fI$heap2\fR into \fI$heap1\fR.
222This will leave \fI$heap2\fR empty.
223.IP "$heap1\->decrease_key($elem)" 4
224.IX Item "$heap1->decrease_key($elem)"
225The element will be moved closed to the top of the
226heap if it is now smaller than any higher parent elements.
227The user must have changed the value of \fI$elem\fR before
228\&\fIdecrease_key\fR is called. Only a decrease is permitted.
229(This is a decrease according to the \fIcmp\fR function \- if it
230is a reversed order comparison, then you are only permitted
231to increase the value of the element. To be pedantic, you
232may only use \fIdecrease_key\fR if
233\&\fI$elem\-\fRcmp($elem_original) <= 0> if \fI$elem_original\fR were
234an elem with the value that \fI$elem\fR had before it was
235\&\fIdecreased\fR.)
236.ie n .IP "$elem = $heap\->delete($elem)" 4
237.el .IP "$elem = \f(CW$heap\fR\->delete($elem)" 4
238.IX Item "$elem = $heap->delete($elem)"
239The element is removed from the heap (whether it is at
240the top or not).
241.SH "AUTHOR"
242.IX Header "AUTHOR"
243John Macdonald, jmm@perlwolf.com
244.SH "COPYRIGHT"
245.IX Header "COPYRIGHT"
246Copyright 1998\-2003, O'Reilly & Associates.
247.PP
248This code is distributed under the same copyright terms as perl itself.
249.SH "SEE ALSO"
250.IX Header "SEE ALSO"
251\&\fIHeap::Elem\fR\|(3), \fIHeap::Binary\fR\|(3), \fIHeap::Binomial\fR\|(3), \fIHeap::Fibonacci\fR\|(3).