annotate mayachemtool/mayachemtools/lib/PseudoHeap.pm @ 0:68300206e90d draft default tip

Uploaded
author deepakjadmin
date Thu, 05 Nov 2015 02:41:30 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
1 package PseudoHeap;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
2 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: PseudoHeap.pm,v $
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:18 $
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.10 $
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
6 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
8 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
10 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
12 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
17 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
22 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
27 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
28
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
32 use TextUtil ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
33
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
34 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
35
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
36 @ISA = qw(Exporter);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
37 @EXPORT = qw();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
38 @EXPORT_OK = qw();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
39
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
40 %EXPORT_TAGS = (
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
41 all => [@EXPORT, @EXPORT_OK]
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
42 );
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
43
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
44 # Setup class variables...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
45 my($ClassName);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
46 _InitializeClass();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
47
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
48 use overload '""' => 'StringifyPseudoHeap';
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
49
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
50 # PseudoHeap is designed to support tracking of a specific number of largest or smallest key/value
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
51 # pairs with numeric or alphanumeric keys along with corresponding scalar or reference values.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
52 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
53 # Although PseudoHeap is similar to a heap, it lacks number of key properties of a traditional heap data
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
54 # structure: no concept of root, parent and child nodes; no ordering of keys in any particular order; no
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
55 # specific localtion greatest or smallest key.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
56 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
57 # The keys are simply stored in a hash with each key poining to an array containing specified values.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
58 # The min/max keys are updated during addition and deletion of key/value pairs; these can be retrieved
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
59 # by accessing corresponding hash.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
60 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
61 # Addition and deletion of key/value is also straightforward using hashes. However, min/max keys
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
62 # need to be identified which is done using Perl sort on the keys.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
63 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
64 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
65 # Class constructor...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
66 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
67 sub new {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
68 my($Class, %NamesAndValues) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
69
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
70 # Initialize object...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
71 my $This = {};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
72 bless $This, ref($Class) || $Class;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
73 $This->_InitializePseudoHeap();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
74
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
75 $This->_InitializePseudoHeapProperties(%NamesAndValues);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
76
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
77 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
78 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
79
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
80 # Initialize object data...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
81 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
82 sub _InitializePseudoHeap {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
83 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
84
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
85 # Type of pseudo heap:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
86 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
87 # KeepTopN - Keep track of a specified number largest of key/value pairs
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
88 # KeepBottomN - Keep track of a specified number smallest of key/value pairs
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
89 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
90 $This->{Type} = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
91
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
92 # Type of keys: Numeric or Alphanumeric
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
93 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
94 # The value of KeyType determines comparison function used to sort and
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
95 # and compare keys for a specific heap type as shown below:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
96 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
97 # Type KeyType Comp Sorting
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
98 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
99 # KeepTopN Numeric < Descending
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
100 # KeepTopN AlphaNumeric lt Descending
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
101 # KeepBottomN Numeric > Ascending
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
102 # KeepBottomN AlphaNumeric gt Ascending
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
103 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
104 $This->{KeyType} = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
105
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
106 # Maximum number of largest or smallest key/value pairs to keep...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
107 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
108 $This->{MaxSize} = 10;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
109
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
110 # Keys and values associated with each key as an array...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
111 %{$This->{Keys}} = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
112
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
113 # Min and max keys...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
114 $This->{MinKey} = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
115 $This->{MaxKey} = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
116
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
117 # Number of key/valur pairs currently present...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
118 $This->{CurrentSize} = 0;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
119
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
120 # Number of keys currently present where each key correspond to multiple values...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
121 $This->{KeysCount} = 0;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
122 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
123
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
124 # Initialize class ...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
125 sub _InitializeClass {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
126 #Class name...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
127 $ClassName = __PACKAGE__;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
128
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
129 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
130
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
131 # Initialize object properties....
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
132 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
133 sub _InitializePseudoHeapProperties {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
134 my($This, %NamesAndValues) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
135 my($Name, $Value, $MethodName);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
136
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
137 while (($Name, $Value) = each %NamesAndValues) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
138 $MethodName = "Set${Name}";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
139 $This->$MethodName($Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
140 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
141
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
142 if (!exists $NamesAndValues{Type}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
143 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying Type...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
144 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
145
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
146 if (!exists $NamesAndValues{KeyType}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
147 croak "Error: ${ClassName}->New: Object can't be instantiated without specifying KeyType...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
148 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
149 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
150
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
151 # Set heap type...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
152 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
153 sub SetType {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
154 my($This, $Type) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
155
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
156 if (defined $This->{Type}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
157 croak "Error: ${ClassName}->SetType: Can't change Type...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
158 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
159
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
160 if ($Type !~ /^(KeepTopN|KeepBottomN)$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
161 croak "Error: ${ClassName}->SetType: Unknown PseudoHeap type: $Type; Supported types: KeepTopN or KeepBottomN...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
162 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
163 $This->{Type} = $Type;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
164
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
165 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
166 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
167
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
168 # Get heap type..
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
169 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
170 sub GetType {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
171 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
172
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
173 return defined $This->{Type} ? $This->{Type} : 'None';
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
174 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
175
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
176 # Set key type...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
177 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
178 sub SetKeyType {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
179 my($This, $KeyType) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
180
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
181 if (defined $This->{KeyType}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
182 croak "Error: ${ClassName}->SetType: Can't change KeyType...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
183 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
184
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
185 if ($KeyType !~ /^(Numeric|Alphanumeric)$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
186 croak "Error: ${ClassName}->SetType: Unknown PseudoHeap key type: $KeyType; Supported key types: Numeric or Alphanumeric...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
187 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
188 $This->{KeyType} = $KeyType;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
189
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
190 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
191 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
192
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
193 # Get key type..
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
194 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
195 sub GetKeyType {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
196 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
197
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
198 return defined $This->{KeyType} ? $This->{KeyType} : 'None';
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
199 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
200
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
201 # Add a key/value pair...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
202 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
203 sub AddKeyValuePair {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
204 my($This, $Key, $Value) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
205
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
206 if (!(defined($Key) && defined($Value))) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
207 carp "Warning: ${ClassName}->AddKeyValuePair: No key added: Both key and value must be defined...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
208 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
209 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
210
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
211 $This->_AddKeyValuePair($Key, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
212
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
213 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
214 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
215
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
216 # Add multiple key/value pairs...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
217 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
218 sub AddKeyValuePairs {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
219 my($This, @KeyValuePairs) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
220
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
221 if (!@KeyValuePairs) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
222 carp "Warning: ${ClassName}->AddKeyValuePairs: No keys added: Key/Value pairs list is empty...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
223 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
224 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
225 if (@KeyValuePairs % 2) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
226 carp "Warning: ${ClassName}->AddKeyValuePairs: No keys pairs added: Invalid key/value pairs data: Input list must contain even number of values...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
227 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
228 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
229
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
230 my($Key, $Value, $Index);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
231 for ($Index = 0; $Index < $#KeyValuePairs; $Index += 2) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
232 $Key = $KeyValuePairs[$Index]; $Value = $KeyValuePairs[$Index + 1];
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
233 $This->AddKeyValuePair($Key, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
234 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
235
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
236 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
237 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
238
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
239 # Delete specified keys along with all associated values for each key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
240 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
241 sub DeleteKeys {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
242 my($This, @Keys) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
243
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
244 if (!@Keys) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
245 carp "Warning: ${ClassName}->DeleteKeys: No keys deleted: Keys list is empty...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
246 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
247 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
248 my($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
249 for $Key (@Keys) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
250 $This->DeleteKey($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
251 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
252
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
253 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
254 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
255
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
256 # Delete a sepcified key along with all of its associated values...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
257 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
258 sub DeleteKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
259 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
260
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
261 if (!defined $Key ) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
262 carp "Warning: ${ClassName}->DeleteKey: No key deleted: Key must be specified...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
263 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
264 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
265
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
266 return $This->_DeleteKey($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
267 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
268
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
269 # Delete min key along with all of its associated values...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
270 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
271 sub DeleteMinKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
272 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
273
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
274 return $This->DeleteKey($This->{MinKey});
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
275 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
276
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
277 # Delete max key along with all of its associated values...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
278 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
279 sub DeleteMaxKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
280 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
281
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
282 return $This->DeleteKey($This->{MaxKey});
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
283 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
284
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
285 # Set max size...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
286 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
287 sub SetMaxSize {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
288 my($This, $Size) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
289
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
290 if (!TextUtil::IsPositiveInteger($Size)) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
291 croak "Error: ${ClassName}->SetMaxSize: Max size value, $Size, is not valid: It must be a positive integer...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
292 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
293
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
294 if (defined($This->{MinKey}) || defined($This->{MaxKey})) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
295 croak "Error: ${ClassName}->SetMaxSize: Can't change max size: Keys are already present...";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
296 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
297
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
298 $This->{MaxSize} = $Size;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
299
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
300 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
301 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
302
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
303 # Get max size...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
304 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
305 sub GetMaxSize {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
306 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
307
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
308 return $This->{MaxMaxSize};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
309 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
310
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
311 # Get current size...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
312 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
313 sub GetCurrentSize {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
314 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
315
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
316 return $This->{CurrentSize};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
317 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
318
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
319 # Get min key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
320 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
321 sub GetMinKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
322 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
323
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
324 return defined $This->{MinKey} ? $This->{MinKey} : 'None';
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
325 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
326
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
327 # Get max key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
328 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
329 sub GetMaxKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
330 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
331
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
332 return defined $This->{MaxKey} ? $This->{MaxKey} : 'None';
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
333 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
334
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
335 # Get keys...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
336 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
337 sub GetKeys {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
338 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
339
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
340 return wantarray ? keys %{$This->{Keys}} : scalar keys %{$This->{Keys}};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
341 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
342
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
343 # Get sorted keys...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
344 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
345 sub GetSortedKeys {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
346 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
347 my(@SortedKeys);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
348
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
349 @SortedKeys = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
350 if ($This->{Type} =~ /^KeepTopN$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
351 @SortedKeys = ($This->{KeyType} =~ /^Numeric$/i) ? (sort { $b <=> $a } keys %{$This->{Keys}}) : (sort { $b cmp $a } keys %{$This->{Keys}});
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
352 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
353 elsif ($This->{Type} =~ /^KeepBottomN$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
354 @SortedKeys = ($This->{KeyType} =~ /^Numeric$/i) ? (sort { $a <=> $b } keys %{$This->{Keys}}) : (sort { $a cmp $b } keys %{$This->{Keys}});
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
355 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
356
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
357 return wantarray ? @SortedKeys : scalar @SortedKeys;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
358 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
359
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
360 # Get values associated with a specified key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
361 sub GetKeyValues {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
362 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
363 my(@KeyValues);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
364
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
365 @KeyValues = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
366 if (defined($Key) && exists($This->{Keys}{$Key})) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
367 @KeyValues = @{$This->{Keys}{$Key}};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
368 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
369 return wantarray ? @KeyValues : scalar @KeyValues;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
370 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
371
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
372 # Add key/value pair...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
373 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
374 sub _AddKeyValuePair{
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
375 my($This, $Key, $Value) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
376
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
377 if ($This->{CurrentSize} < $This->{MaxSize}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
378 return $This->_AppendKeyValuePair($Key, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
379 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
380 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
381 return $This->_InsertKeyValuePair($Key, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
382 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
383 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
384
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
385 # Append key/value pair...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
386 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
387 sub _AppendKeyValuePair {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
388 my($This, $Key, $Value) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
389
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
390 if (!exists $This->{Keys}{$Key}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
391 @{$This->{Keys}{$Key}} = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
392 $This->{KeysCount} += 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
393
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
394 $This->_CompareAndSetMinKey($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
395 $This->_CompareAndSetMaxKey($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
396 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
397
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
398 push @{$This->{Keys}{$Key}}, $Value;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
399 $This->{CurrentSize} += 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
400
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
401 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
402 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
403
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
404 # Insert key/value pair...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
405 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
406 sub _InsertKeyValuePair {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
407 my($This, $Key, $Value) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
408
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
409 # Is this key need to be inserted?
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
410 if (!$This->_IsKeyNeedToBeInserted($Key)) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
411 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
412 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
413
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
414 # Insert key/value pair...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
415 if (!exists $This->{Keys}{$Key}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
416 @{$This->{Keys}{$Key}} = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
417 $This->{KeysCount} += 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
418 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
419 push @{$This->{Keys}{$Key}}, $Value;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
420 $This->{CurrentSize} += 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
421
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
422 # Remove min or max key/value pair along with its update...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
423 my($KeyToDetele);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
424
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
425 $KeyToDetele = ($This->{Type} =~ /^KeepTopN$/i) ? $This->{MinKey} : $This->{MaxKey};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
426 $This->_DeleteKeyValuePair($KeyToDetele);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
427
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
428 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
429 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
430
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
431 # Check whether it makes sense to insert specified key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
432 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
433 sub _IsKeyNeedToBeInserted {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
434 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
435
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
436 if ($This->{Type} =~ /^KeepTopN$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
437 if ($This->{KeyType} =~ /^Numeric$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
438 return ($Key < $This->{MinKey}) ? 0 : ((($This->{KeysCount} == 1) && ($This->{MinKey} == $Key)) ? 0 : 1);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
439 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
440 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
441 return ($Key lt $This->{MinKey}) ? 0 : ((($This->{KeysCount} == 1) && ($This->{MinKey} eq $Key)) ? 0 : 1);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
442 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
443 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
444 elsif ($This->{Type} =~ /^KeepBottomN$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
445 if ($This->{KeyType} =~ /^Numeric$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
446 return ($Key > $This->{MaxKey}) ? 0 : ((($This->{KeysCount} == 1) && ($This->{MaxKey} == $Key)) ? 0 : 1);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
447 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
448 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
449 return ($Key gt $This->{MaxKey}) ? 0 : ((($This->{KeysCount} == 1) && ($This->{MaxKey} eq $Key)) ? 0 : 1);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
450 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
451 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
452
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
453 return 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
454 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
455
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
456 # Set min key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
457 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
458 sub _CompareAndSetMinKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
459 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
460
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
461 if (!defined $This->{MinKey}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
462 $This->{MinKey} = $Key;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
463 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
464 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
465
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
466 if ($This->{KeyType} =~ /^Numeric$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
467 if ($Key < $This->{MinKey}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
468 $This->{MinKey} = $Key;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
469 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
470 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
471 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
472 if ($Key lt $This->{MinKey}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
473 $This->{MinKey} = $Key;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
474 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
475 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
476
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
477 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
478 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
479
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
480 # Set max key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
481 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
482 sub _CompareAndSetMaxKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
483 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
484
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
485 if (!defined $This->{MaxKey}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
486 $This->{MaxKey} = $Key;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
487 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
488 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
489
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
490 if ($This->{KeyType} =~ /^Numeric$/i) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
491 if ($Key > $This->{MaxKey}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
492 $This->{MaxKey} = $Key;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
493 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
494 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
495 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
496 if ($Key gt $This->{MaxKey}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
497 $This->{MaxKey} = $Key;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
498 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
499 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
500
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
501 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
502 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
503
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
504 # Delete a sepcified key along with all of its values added to the list...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
505 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
506 sub _DeleteKey {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
507 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
508 my($NumOfValues);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
509
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
510 if (!exists $This->{Keys}{$Key}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
511 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
512 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
513
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
514 # Delete all key values...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
515 $NumOfValues = scalar @{$This->{Keys}{$Key}};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
516 @{$This->{Keys}{$Key}} = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
517 $This->{CurrentSize} -= $NumOfValues;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
518
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
519 # Delete key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
520 delete $This->{Keys}{$Key};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
521 $This->{KeysCount} -= 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
522
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
523 # Set min and max keys...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
524 $This->_FindAndSetMinAndMaxKeys();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
525
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
526 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
527 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
528
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
529 # Delete a sepcified key along with its most recent value added to the list...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
530 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
531 sub _DeleteKeyValuePair {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
532 my($This, $Key) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
533
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
534 if (!exists $This->{Keys}{$Key}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
535 return undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
536 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
537
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
538 # Delete value...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
539 pop @{$This->{Keys}{$Key}};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
540 $This->{CurrentSize} -= 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
541
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
542 # Delete key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
543 if (!@{$This->{Keys}{$Key}}) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
544 delete $This->{Keys}{$Key};
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
545 $This->{KeysCount} -= 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
546 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
547
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
548 # Set min and max keys...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
549 $This->_FindAndSetMinAndMaxKeys();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
550
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
551 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
552 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
553
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
554 # Set min and max key...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
555 #
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
556 sub _FindAndSetMinAndMaxKeys {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
557 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
558 my(@SortedKeys);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
559
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
560 @SortedKeys = ($This->{KeyType} =~ /^Numeric$/i) ? (sort { $a <=> $b } keys %{$This->{Keys}}) : (sort { $a cmp $b } keys %{$This->{Keys}});
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
561
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
562 if (@SortedKeys) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
563 $This->{MinKey} = $SortedKeys[0];
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
564 $This->{MaxKey} = $SortedKeys[$#SortedKeys];
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
565 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
566 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
567 $This->{MinKey} = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
568 $This->{MaxKey} = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
569 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
570
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
571 return $This;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
572 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
573
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
574 # Return a string containing vector values...
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
575 sub StringifyPseudoHeap {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
576 my($This) = @_;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
577 my($PseudoHeapString, $Key, $Value, $KeyValuesString, @KeysAndValues);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
578
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
579 $PseudoHeapString = "PseudoHeap: Type: " . $This->GetType() . "; KeyType: " . $This->GetKeyType() . "; MaxSize: $This->{MaxSize}; CurrentSize: $This->{CurrentSize}; MinKey: " . $This->GetMinKey() . "; MaxKey: " . $This->GetMaxKey() . "; NumOfUniqueKeys: $This->{KeysCount}";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
580
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
581 @KeysAndValues = ();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
582 for $Key ($This->GetSortedKeys()) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
583 for $Value ($This->GetKeyValues($Key)) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
584 push @KeysAndValues, "$Key - $Value";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
585 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
586 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
587 if (@KeysAndValues) {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
588 $KeyValuesString = TextUtil::JoinWords(\@KeysAndValues, "; ", 0);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
589 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
590 else {
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
591 $KeyValuesString = "None";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
592 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
593
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
594 $PseudoHeapString .= "; Sorted Key - Value pairs: [$KeyValuesString]";
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
595
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
596 return $PseudoHeapString;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
597 }
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
598
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
599 1;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
600
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
601 __END__
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
602
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
603 =head1 NAME
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
604
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
605 PseudoHeap
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
606
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
607 =head1 SYNOPSIS
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
608
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
609 use PseudoHeap;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
610
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
611 use PseudoHeap qw(:all);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
612
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
613 =head1 DESCRIPTION
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
614
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
615 B<PseudoHeap> class provides the following methods:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
616
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
617 new, AddKeyValuePair, AddKeyValuePairs, DeleteKey, DeleteKeys, DeleteMaxKey,
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
618 DeleteMinKey, GetCurrentSize, GetKeyType, GetKeyValues, GetKeys, GetMaxKey,
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
619 GetMaxSize, GetMinKey, GetSortedKeys, GetType, SetKeyType, SetMaxSize, SetType,
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
620 StringifyPseudoHeap
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
621
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
622 PseudoHeap is designed to support tracking of a specific number of largest or smallest key/value
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
623 pairs with numeric or alphanumeric keys along with corresponding scalar or reference values.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
624
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
625 Although PseudoHeap is conceptually similar to a heap, it lacks number of key properties of a traditional
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
626 heap data structure: no concept of root, parent and child nodes; no ordering of keys in any particular
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
627 order; no specific location greatest or smallest key.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
628
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
629 The keys are simply stored in a hash with each key pointing to an array containing specified values.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
630 The min/max keys are updated during addition and deletion of key/value pairs; these can be retrieved
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
631 by accessing corresponding hash.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
632
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
633 Addition and deletion of key/value is also straightforward using hashes. However, min/max keys
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
634 need to be identified which is done using Perl sort function on the keys.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
635
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
636 =head2 FUNCTIONS
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
637
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
638 =over 4
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
639
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
640 =item B<new>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
641
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
642 $NewPseudoHeap = new PseudoHeap(%NamesAndValues);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
643
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
644 Using specified parameters I<NamesAndValues> names and values hash, B<new> method creates
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
645 a new object and returns a reference to a newly created B<NewPseudoHeap> object. By default,
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
646 the following property names are initialized:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
647
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
648 Type = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
649 KeyType = undef;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
650 MaxSize = 10;
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
651
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
652 Examples:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
653
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
654 $NewPseudoHeap = new PseudoHeap(
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
655 'Type' => 'KeepTopN',
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
656 'KeyType' => 'Numeric');
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
657
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
658 $NewPseudoHeap = new PseudoHeap(
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
659 'Type' => 'KeepTopN',
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
660 'KeyType' => 'AlphaNumeric',
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
661 'MaxSize' => '20');
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
662
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
663 $NewPseudoHeap = new PseudoHeap(
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
664 'Type' => 'KeepBottomN',
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
665 'KeyType' => 'AlphaNumeric',
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
666 'MaxSize' => '20');
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
667
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
668 =item B<AddKeyValuePair>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
669
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
670 $PseudoHeap->AddKeyValuePair($Key, $Value);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
671
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
672 Add specified I<Key> and I<Value> pair to pseudo heap using a new or an existing
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
673 key and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
674
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
675 =item B<AddKeyValuePairs>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
676
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
677 $PseudoHeap->AddKeyValuePairs(@KeyValuePairs);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
678
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
679 Adds multiple key and value pairs specified in array I<KeyValuePairs> to pseudo heap
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
680 using a new or existing keys and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
681
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
682 =item B<DeleteKey>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
683
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
684 $PseudoHeap->DeleteKey($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
685
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
686 Deletes a specified I<Key> from pseudo heap and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
687
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
688 =item B<DeleteKeys>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
689
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
690 $PseudoHeap->DeleteKeys(@Keys);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
691
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
692 Deletes a specified I<Keys> from pseudo heap and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
693
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
694 =item B<DeleteMaxKey>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
695
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
696 $PseudoHeap->DeleteMaxKey();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
697
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
698 Deletes a I<MaxKey> along with its associated values from pseudo heap and returns
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
699 B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
700
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
701 =item B<DeleteMinKey>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
702
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
703 $PseudoHeap->DeleteMinKey();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
704
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
705 Deletes a I<MinKey> along with its associated values from pseudo heap and returns
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
706 B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
707
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
708 =item B<GetCurrentSize>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
709
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
710 $Size = $PseudoHeap->GetCurrentSize();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
711
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
712 Returns current I<Size> of pseudo heap corresponding to number to keys in heap.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
713
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
714 =item B<GetKeyType>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
715
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
716 $KeyType = $PseudoHeap->GetKeyType();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
717
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
718 Returns I<KeyType> of pseudo heap. Possible B<KeyType> values: I<Numeric or Alphanumeric>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
719
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
720 =item B<GetKeyValues>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
721
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
722 @Values = $PseudoHeap->GetKeyValues($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
723 $NumOfValues = $PseudoHeap->GetKeyValues($Key);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
724
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
725 Returns an array containing B<Values> associated with a specified I<Key> in pseudo heap. In
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
726 scalar context, it returns number of values associated with a key.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
727
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
728 =item B<GetKeys>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
729
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
730 @Keys = $PseudoHeap->GetKeys();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
731 $NumOfKeys = $PseudoHeap->GetKeys();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
732
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
733 Returns an array containing all B<Keys> in pseudo heap. In scalar context, it returns total
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
734 number of keys.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
735
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
736 =item B<GetMaxKey>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
737
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
738 $MaxKey = $PseudoHeap->GetMaxKey();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
739
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
740 Returns I<MaxKey> present in pseudo heap.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
741
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
742 =item B<GetMaxSize>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
743
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
744 $MaxSize = $PseudoHeap->GetMaxSize();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
745
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
746 Returns I<MaxSize> of pseudo heap.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
747
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
748 =item B<GetMinKey>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
749
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
750 $MinKey = $PseudoHeap->GetMinKey();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
751
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
752 Returns I<MinKey> present in pseudo heap.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
753
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
754 =item B<GetSortedKeys>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
755
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
756 @Keys = $PseudoHeap->GetSortedKeys();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
757 $NumOfKeys = $PseudoHeap->GetSortedKeys();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
758
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
759 Returns an array containing all sorted B<Keys> in pseudo heap. In scalar context, it retruns
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
760 total number of keys.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
761
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
762 Keys are sorted based on values of B<Type> and B<KeyType> for pseudo heap:
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
763
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
764 Type KeyType SortOrder SortOperator
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
765 KeepTopN Numeric Descending <=>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
766 KeepTopN Alphanumeric Descending cmp
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
767 KeepBottomN Numeric Ascending <=>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
768 KeepBottomN Alphanumeric Ascending cmp
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
769
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
770 =item B<GetType>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
771
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
772 $Type = $PseudoHeap->GetType();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
773
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
774 Returns I<Type> of pseudo heap.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
775
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
776 =item B<SetKeyType>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
777
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
778 $PseudoHeap->SetKeyType($KeyType);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
779
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
780 Sets I<KeyType> of pseudo heap and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
781
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
782 =item B<SetMaxSize>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
783
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
784 $PseudoHeap->SetMaxSize($MaxSize);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
785
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
786 Sets I<MaxSize> of pseudo heap and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
787
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
788 =item B<SetType>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
789
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
790 $PseudoHeap->SetType($Type);
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
791
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
792 Sets I<Type> of pseudo heap and returns B<PseudoHeap>.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
793
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
794 =item B<StringifyPseudoHeap>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
795
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
796 $PseudoHeapString = $PseudoHeap->StringifyPseudoHeap();
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
797
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
798 Returns a string containing information about I<PseudoHeap> object
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
799
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
800 =back
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
801
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
802 =head1 AUTHOR
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
803
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
804 Manish Sud <msud@san.rr.com>
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
805
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
806 =head1 COPYRIGHT
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
807
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
808 Copyright (C) 2015 Manish Sud. All rights reserved.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
809
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
810 This file is part of MayaChemTools.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
811
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
812 MayaChemTools is free software; you can redistribute it and/or modify it under
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
813 the terms of the GNU Lesser General Public License as published by the Free
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
814 Software Foundation; either version 3 of the License, or (at your option)
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
815 any later version.
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
816
68300206e90d Uploaded
deepakjadmin
parents:
diff changeset
817 =cut