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

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