annotate lib/PseudoHeap.pm @ 0:4816e4a8ae95 draft default tip

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