annotate lib/BitVector.pm @ 1:2abf0d43254d draft

Uploaded
author deepakjadmin
date Wed, 20 Jan 2016 09:10:43 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1 package BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
2 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
3 # $RCSfile: BitVector.pm,v $
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
4 # $Date: 2015/02/28 20:47:02 $
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
5 # $Revision: 1.32 $
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
6 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
7 # Author: Manish Sud <msud@san.rr.com>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
8 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
9 # Copyright (C) 2015 Manish Sud. All rights reserved.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
10 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
11 # This file is part of MayaChemTools.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
12 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
13 # MayaChemTools is free software; you can redistribute it and/or modify it under
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
14 # the terms of the GNU Lesser General Public License as published by the Free
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
15 # Software Foundation; either version 3 of the License, or (at your option) any
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
16 # later version.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
17 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
18 # MayaChemTools is distributed in the hope that it will be useful, but without
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
19 # any warranty; without even the implied warranty of merchantability of fitness
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
20 # for a particular purpose. See the GNU Lesser General Public License for more
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
21 # details.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
22 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
23 # You should have received a copy of the GNU Lesser General Public License
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
24 # along with MayaChemTools; if not, see <http://www.gnu.org/licenses/> or
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
25 # write to the Free Software Foundation Inc., 59 Temple Place, Suite 330,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
26 # Boston, MA, 02111-1307, USA.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
27 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
28
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
29 use strict;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
30 use Carp;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
31 use Exporter;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
32 use Scalar::Util ();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
33 use TextUtil ();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
34 use ConversionsUtil ();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
35 use MathUtil;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
36
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
37 use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
38
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
39 @ISA = qw(Exporter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
40 @EXPORT = qw(IsBitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
41 @EXPORT_OK = qw(NewFromBinaryString NewFromDecimalString NewFromHexadecimalString NewFromOctalString NewFromRawBinaryString);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
42
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
43 %EXPORT_TAGS = (all => [@EXPORT, @EXPORT_OK]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
44
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
45 # Setup class variables...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
46 my($ClassName, $ValueFormat, $ValueBitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
47 _InitializeClass();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
48
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
49 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
50 # Overload bitwise and some logical operators...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
51 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
52 # 'fallback' is set to 'false' to raise exception for all other operators.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
53 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
54 use overload '""' => 'StringifyBitVector',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
55 '&' => '_BitVectorAndOperator',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
56 '|' => '_BitVectorOrOperator',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
57 '^' => '_BitVectorExclusiveOrOperator',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
58
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
59 '~' => '_BitVectorNegationOperator',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
60
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
61 '==' => '_BitVectorEqualOperator',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
62 '!=' => '_BitVectorNotEqualOperator',
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
63
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
64 'fallback' => undef;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
65
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
66 # Class constructor...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
67 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
68 sub new {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
69 my($Class, $Size) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
70
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
71 # Initialize object...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
72 my $This = {};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
73 bless $This, ref($Class) || $Class;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
74 $This->_InitializeBitVector($Size);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
75
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
76 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
77 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
78
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
79 # Initialize object data...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
80 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
81 # Note:
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
82 # . Perl pack function used to initialize vector automatically sets its size to
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
83 # nearest power of 2 value.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
84 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
85 sub _InitializeBitVector {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
86 my($This, $Size) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
87
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
88 if (!defined $Size) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
89 croak "Error: ${ClassName}->new: BitVector object instantiated without specifying its size ...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
90 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
91 if ($Size <=0) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
92 croak "Error: ${ClassName}->new: Bit vector size, $Size, must be a positive integer...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
93 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
94
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
95 # Initialize vector with zeros...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
96 $This->{BitValues} = pack("b*", "0" x $Size);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
97
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
98 # Size to automatically set to nearest power of 2 by Perl pack function. So use the length
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
99 # of packed vector to set size...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
100 $This->{Size} = length($This->GetBitsAsBinaryString());
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
101
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
102 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
103 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
104
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
105 # Initialize class ...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
106 sub _InitializeClass {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
107 #Class name...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
108 $ClassName = __PACKAGE__;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
109
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
110 # Print format for bit vectore values...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
111 $ValueFormat = "Binary";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
112
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
113 # Bit ordering for printing bit vector value strings. Default is to print lowest bit of each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
114 # byte on the left.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
115 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
116 # Internally, bits are stored in ascending order using Perl vec function. Regardless
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
117 # of machine order, big-endian or little-endian, vec function always considers first
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
118 # string byte as the lowest byte and first bit within each byte as the lowest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
119 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
120 # Possible values: Ascending or Descending
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
121 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
122 $ValueBitOrder = 'Ascending';
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
123 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
124
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
125 # Create a new bit vector using binary string. This functionality can be
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
126 # either invoked as a class function or an object method.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
127 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
128 # The size of bit vector is automatically set to reflect the string.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
129 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
130 sub NewFromBinaryString ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
131 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
132
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
133 if (_IsBitVector($FirstParameter)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
134 return _NewBitVectorFromString('Binary', $SecondParameter, $ThirdParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
135 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
136 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
137 return _NewBitVectorFromString( 'Binary', $FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
138 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
139 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
140
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
141 # Create a new bit vector using hexadecimal string. This functionality can be
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
142 # either invoked as a class function or an object method.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
143 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
144 # The size of bit vector is automatically set to reflect the string.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
145 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
146 sub NewFromHexadecimalString ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
147 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
148
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
149 if (_IsBitVector($FirstParameter)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
150 return _NewBitVectorFromString('Hexadecimal', $SecondParameter, $ThirdParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
151 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
152 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
153 return _NewBitVectorFromString( 'Hexadecimal', $FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
154 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
155 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
156
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
157 # Create a new bit vector using octal string. This functionality can be
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
158 # either invoked as a class function or an object method.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
159 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
160 # The size of bit vector is automatically set to reflect the string.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
161 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
162 sub NewFromOctalString ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
163 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
164
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
165 if (_IsBitVector($FirstParameter)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
166 return _NewBitVectorFromString('Octal', $SecondParameter, $ThirdParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
167 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
168 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
169 return _NewBitVectorFromString( 'Octal', $FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
170 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
171 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
172
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
173 # Create a new bit vector using decimal string. This functionality can be
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
174 # either invoked as a class function or an object method.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
175 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
176 # The size of bit vector is automatically set to reflect the string.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
177 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
178 sub NewFromDecimalString ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
179 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
180
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
181 if (_IsBitVector($FirstParameter)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
182 return _NewBitVectorFromString('Decimal', $SecondParameter, $ThirdParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
183 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
184 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
185 return _NewBitVectorFromString( 'Decimal', $FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
186 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
187 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
188
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
189 # Create a new bit vector using raw binary string. This functionality can be
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
190 # either invoked as a class function or an object method.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
191 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
192 # The size of bit vector is automatically set to reflect the string.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
193 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
194 sub NewFromRawBinaryString ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
195 my($FirstParameter, $SecondParameter, $ThirdParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
196
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
197 if (_IsBitVector($FirstParameter)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
198 return _NewBitVectorFromString('RawBinary', $SecondParameter, $ThirdParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
199 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
200 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
201 return _NewBitVectorFromString( 'RawBinary', $FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
202 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
203 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
204
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
205 # Create a new bit vector from a string...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
206 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
207 sub _NewBitVectorFromString ($$;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
208 my($Format, $String, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
209 my($Size, $BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
210
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
211 $Size = _CalculateStringSizeInBits($Format, $String);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
212
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
213 $BitVector = new BitVector($Size);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
214 $BitVector->_SetBitsAsString($Format, $String, $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
215
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
216 return $BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
217 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
218
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
219 # Copy bit vector...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
220 sub Copy {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
221 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
222 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
223
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
224 # Make a new bit vector...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
225 $BitVector = (ref $This)->new($This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
226
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
227 # Copy bit values...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
228 $BitVector->{BitValues} = $This->{BitValues};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
229
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
230 # Copy value format for stringification...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
231 if (exists $This->{ValueFormat}) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
232 $BitVector->{ValueFormat} = $This->{ValueFormat};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
233 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
234 # Copy value bit order for stringification...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
235 if (exists $This->{ValueBitOrder}) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
236 $BitVector->{ValueBitOrder} = $This->{ValueBitOrder};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
237 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
238 return $BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
239 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
240
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
241 # Reverse bit values in bit vector...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
242 sub Reverse {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
243 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
244 my($BitNum, $ReverseBitNum, $BitValue, $ReverseBitValue);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
245
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
246 $BitNum = 0; $ReverseBitNum = $This->{Size} - 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
247
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
248 while ($BitNum < $ReverseBitNum) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
249 $BitValue = $This->_GetBitValue($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
250 $ReverseBitValue = $This->_GetBitValue($ReverseBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
251
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
252 $This->_SetBitValue($BitNum, $ReverseBitValue);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
253 $This->_SetBitValue($ReverseBitNum, $BitValue);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
254
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
255 $BitNum++; $ReverseBitNum--;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
256 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
257 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
258 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
259
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
260 # Is it a bit vector object?
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
261 sub IsBitVector ($) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
262 my($Object) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
263
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
264 return _IsBitVector($Object);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
265 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
266
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
267 # Get size...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
268 sub GetSize {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
269 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
270
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
271 return $This->{Size};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
272 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
273
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
274 # Set a bit...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
275 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
276 sub SetBit {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
277 my($This, $BitNum, $SkipCheck) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
278
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
279 # Just set it...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
280 if ($SkipCheck) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
281 return $This->_SetBitValue($BitNum, 1);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
282 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
283
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
284 # Check and set...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
285 $This->_ValidateBitNumber("SetBit", $BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
286
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
287 return $This->_SetBitValue($BitNum, 1);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
288 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
289
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
290 # Set arbitrary bits specified as a list of bit numbers...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
291 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
292 sub SetBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
293 my($This, @BitNums) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
294 my($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
295
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
296 for $BitNum (@BitNums) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
297 $This->SetBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
298 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
299 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
300 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
301
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
302 # Set bits in a specified range...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
303 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
304 sub SetBitsRange {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
305 my($This, $MinBitNum, $MaxBitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
306 my($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
307
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
308 $This->_ValidateBitNumber("SetBitsRange", $MinBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
309 $This->_ValidateBitNumber("SetBitsRange", $MaxBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
310
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
311 for $BitNum ($MinBitNum .. $MaxBitNum) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
312 $This->_SetBitValue($BitNum, 1);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
313 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
314 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
315 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
316
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
317 # Set all bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
318 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
319 sub SetAllBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
320 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
321
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
322 $This->{BitValues} = pack("b*", "1" x $This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
323 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
324
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
325 # Clear a bit...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
326 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
327 sub ClearBit {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
328 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
329
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
330 $This->_ValidateBitNumber("ClearBit", $BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
331
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
332 return $This->_SetBitValue($BitNum, 0);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
333 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
334
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
335 # Clear arbitrary bits specified as a list of bit numbers...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
336 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
337 sub ClearBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
338 my($This, @BitNums) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
339 my($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
340
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
341 for $BitNum (@BitNums) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
342 $This->ClearBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
343 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
344 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
345 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
346
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
347 # Clear bits in a specified range...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
348 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
349 sub ClearBitsRange {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
350 my($This, $MinBitNum, $MaxBitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
351 my($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
352
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
353 $This->_ValidateBitNumber("ClearBitsRange", $MinBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
354 $This->_ValidateBitNumber("ClearBitsRange", $MaxBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
355
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
356 for $BitNum ($MinBitNum .. $MaxBitNum) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
357 $This->_SetBitValue($BitNum, 0);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
358 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
359 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
360 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
361
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
362 # Clear all bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
363 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
364 sub ClearAllBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
365 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
366
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
367 $This->{BitValues} = pack("b*", "0" x $This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
368
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
369 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
370 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
371
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
372 # Set or clear bit...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
373 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
374 sub SetBitValue {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
375 my($This, $BitNum, $BitValue) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
376
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
377 BITVALUE: {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
378 if ($BitValue == 1) { return $This->SetBit($BitNum); last BITVALUE; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
379 if ($BitValue == 0) { return $This->ClearBit($BitNum); last BITVALUE; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
380 croak "Error: ${ClassName}->SetBit: Specified bit value, $BitValue, must be 0 or 1...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
381 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
382 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
383 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
384
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
385 # Flip bit value...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
386 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
387 sub FlipBit {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
388 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
389
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
390 $This->_ValidateBitNumber("FlipBit", $BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
391 return $This->_FlipBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
392 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
393
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
394 # Flip arbitrary bits specified as a list of bit numbers...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
395 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
396 sub FlipBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
397 my($This, @BitNums) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
398 my($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
399
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
400 for $BitNum (@BitNums) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
401 $This->FlipBit();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
402 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
403 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
404 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
405
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
406 # Flip bit value in a specified bit range...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
407 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
408 sub FlipBitsRange {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
409 my($This, $MinBitNum, $MaxBitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
410 my($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
411
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
412 $This->_ValidateBitNumber("FlipBitsRange", $MinBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
413 $This->_ValidateBitNumber("FlipBitsRange", $MaxBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
414
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
415 for $BitNum ($MinBitNum .. $MaxBitNum) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
416 $This->_FlipBit();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
417 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
418 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
419 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
420
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
421 # Flip all bit valus...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
422 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
423 sub FlipAllBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
424 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
425
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
426 return $This->FlipBits(0, ($This->{Size} - 1));
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
427 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
428
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
429 # Flip bit value...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
430 sub _FlipBit {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
431 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
432
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
433 if ($This->_GetBitValue($BitNum)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
434 return $This->_SetBitValue($BitNum, 0);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
435 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
436 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
437 return $This->_SetBitValue($BitNum, 1);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
438 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
439 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
440
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
441 # Get bit value...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
442 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
443 sub GetBit {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
444 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
445
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
446 $This->_ValidateBitNumber("GetBit", $BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
447
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
448 return $This->_GetBitValue($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
449 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
450
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
451 # Is a specific bit set?
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
452 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
453 sub IsBitSet {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
454 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
455
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
456 if (!(defined($BitNum) && ($BitNum >= 0) && ($BitNum < $This->{Size}))) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
457 return undef;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
458 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
459
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
460 return $This->_GetBitValue($BitNum) ? 1 : 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
461 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
462
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
463 # Is a specific bit clear?
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
464 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
465 sub IsBitClear {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
466 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
467
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
468 if (!(defined($BitNum) && ($BitNum >= 0) && ($BitNum < $This->{Size}))) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
469 return undef;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
470 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
471
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
472 return $This->_GetBitValue($BitNum) ? 0 : 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
473 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
474
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
475 # Get number of set bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
476 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
477 sub GetNumOfSetBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
478 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
479
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
480 return unpack("%b*", $This->{BitValues});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
481 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
482
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
483 # Get number of clear bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
484 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
485 sub GetNumOfClearBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
486 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
487
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
488 return ($This->{Size} - $This->GetNumOfSetBits());
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
489 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
490
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
491 # Get density of set bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
492 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
493 sub GetDensityOfSetBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
494 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
495
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
496 return $This->{Size} ? ($This->GetNumOfSetBits()/$This->{Size}) : 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
497 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
498
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
499 # Get density of clear bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
500 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
501 sub GetDensityOfClearBits {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
502 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
503
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
504 return $This->GetNumOfClearBits()/$This->{Size};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
505 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
506
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
507 # Convert internal bit values stored using Perl vec function with first string byte
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
508 # as the lowest byte and first bit within each byte as the lowest bit into a binary
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
509 # string with ascending or descending bit order within each byte. The internal
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
510 # bit order corresponds to ascending bit order within each byte.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
511 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
512 sub GetBitsAsBinaryString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
513 my($This, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
514
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
515 return $This->_GetBitsAsString('Binary', $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
516 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
517
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
518 # Convert internal bit values stored using Perl vec function with first string byte
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
519 # as the lowest byte and first bit within each byte as the lowest bit into a hexadecimal
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
520 # string with ascending or descending bit order within each byte. The internal
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
521 # bit order corresponds to ascending bit order within each byte.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
522 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
523 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
524 sub GetBitsAsHexadecimalString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
525 my($This, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
526
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
527 return $This->_GetBitsAsString('Hexadecimal', $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
528 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
529
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
530 # Convert bit values into a octal string value...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
531 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
532 sub GetBitsAsOctalString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
533 my($This, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
534
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
535 return $This->_GetBitsAsString('Octal', $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
536 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
537
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
538 # Convert bit values into a decimal string value...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
539 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
540 sub GetBitsAsDecimalString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
541 my($This, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
542
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
543 return $This->_GetBitsAsString('Decimal', $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
544 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
545
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
546 # Return packed bit values which also contains nonprintable characters...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
547 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
548 sub GetBitsAsRawBinaryString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
549 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
550
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
551 return $This->_GetBitsAsString('RawBinary');
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
552 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
553
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
554 # Convert internal bit values stored using Perl vec function with first string byte
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
555 # as the lowest byte and first bit within each byte as the lowest bit into a
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
556 # string with ascending or descending bit order within each byte. The internal
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
557 # bit order corresponds to ascending bit order within each byte.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
558 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
559 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
560 sub _GetBitsAsString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
561 my($This, $Format, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
562 my($BinaryTemplate, $HexadecimalTemplate);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
563
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
564 ($BinaryTemplate, $HexadecimalTemplate) = $This->_SetupBitsPackUnpackTemplate($BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
565
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
566 FORMAT : {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
567 if ($Format =~ /^(Hexadecimal|Hex|HexadecimalString)$/i) { return unpack($HexadecimalTemplate, $This->{BitValues}); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
568 if ($Format =~ /^(Octal|Oct|OctalString)$/i) { return ConversionsUtil::HexadecimalToOctal(unpack($HexadecimalTemplate, $This->{BitValues})); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
569 if ($Format =~ /^(Decimal|Dec|DecimalString)$/i) { return ConversionsUtil::HexadecimalToDecimal(unpack($HexadecimalTemplate, $This->{BitValues})); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
570 if ($Format =~ /^(Binary|Bin|BinaryString)$/i) { return unpack($BinaryTemplate, $This->{BitValues}); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
571 if ($Format =~ /^(RawBinary|RawBin|RawBinaryString)$/i) { return $This->{BitValues}; last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
572 croak "Error: ${ClassName}->_GetBitsAsString: Specified bit vector string format, $Format, is not supported. Value values: Binary, Bin, BinaryString, Hexdecimal, Hex, HexadecimalString, Decimal, Dec, DecimalString, Octal, Oct, OctalString, RawBinary, RawBin, RawBinaryString...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
573 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
574 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
575
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
576 # Setup templates to unpack bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
577 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
578 sub _SetupBitsPackUnpackTemplate {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
579 my($This, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
580 my($BinaryTemplate, $HexadecimalTemplate);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
581
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
582 $BitOrder = (defined($BitOrder) && $BitOrder) ? $BitOrder : 'Ascending';
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
583
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
584 if ($BitOrder =~ /^Ascending$/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
585 $BinaryTemplate = "b*";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
586 $HexadecimalTemplate = "h*";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
587 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
588 elsif ($BitOrder =~ /^Descending$/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
589 $BinaryTemplate = "B*";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
590 $HexadecimalTemplate = "H*";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
591 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
592 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
593 croak "Warning: ${ClassName}::_SetupBitsPackUnpackTemplate: Specified bit order value, $BitOrder, is not supported. Supported values: Ascending, Descending...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
594 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
595 return ($BinaryTemplate, $HexadecimalTemplate);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
596 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
597
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
598 # Set bit values using hexadecimal string. The initial size of bit vector is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
599 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
600 sub SetBitsAsHexadecimalString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
601 my($This, $Hexadecimal, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
602
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
603 if ($Hexadecimal =~ /^0x/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
604 $Hexadecimal =~ s/^0x//i;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
605 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
606 return $This->_SetBitsAsString('Hexadecimal', $Hexadecimal, $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
607 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
608
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
609 # Set bit values using octal string. The initial size of bit vector is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
610 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
611 sub SetBitsAsOctalString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
612 my($This, $Octal, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
613
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
614 if ($Octal =~ /^0/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
615 $Octal =~ s/^0//i;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
616 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
617 return $This->_SetBitsAsString('Octal', $Octal, $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
618 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
619
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
620 # Set bit values using a decimal number. The initial size of bit vector is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
621 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
622 sub SetBitsAsDecimalString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
623 my($This, $Decimal, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
624
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
625 if (!TextUtil::IsPositiveInteger($Decimal)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
626 croak "Error: ${ClassName}->SetBitsAsDecimalString: Specified decimal value, $Decimal, must be a positive integer...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
627 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
628 if ($Decimal =~ /[+]/) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
629 $Decimal =~ s/[+]//;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
630 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
631 return $This->_SetBitsAsString('Decimal', $Decimal, $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
632 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
633
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
634 # Set bit values using hexadecimal string. The initial size of bit vector is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
635 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
636 sub SetBitsAsBinaryString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
637 my($This, $Binary, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
638
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
639 if ($Binary =~ /^0b/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
640 $Binary =~ s/^0b//i;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
641 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
642 return $This->_SetBitsAsString('Binary', $Binary, $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
643 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
644
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
645 # Set bit values using packed binary string. The size of bit vector is changed to reflect
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
646 # the input raw string...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
647 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
648 sub SetBitsAsRawBinaryString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
649 my($This, $RawBinary) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
650
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
651 return $This->_SetBitsAsString('RawBinary', $RawBinary);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
652 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
653
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
654 # Set bits using string in a specified format. This size of bit vector is not changed except for
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
655 # RawBinary string type...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
656 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
657 sub _SetBitsAsString {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
658 my($This, $Format, $String, $BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
659 my($Size, $BinaryTemplate, $HexadecimalTemplate);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
660
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
661 ($BinaryTemplate, $HexadecimalTemplate) = $This->_SetupBitsPackUnpackTemplate($BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
662
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
663 $Size = $This->{Size};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
664 FORMAT : {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
665 if ($Format =~ /^(Hexadecimal|Hex|HexadecimalString)$/i) { $This->{BitValues} = pack($HexadecimalTemplate, $String); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
666 if ($Format =~ /^(Octal|Oct|OctalString)$/i) { vec($This->{BitValues}, 0, $Size) = ConversionsUtil::OctalToDecimal($String); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
667 if ($Format =~ /^(Decimal|Dec|DecimalString)$/i) { vec($This->{BitValues}, 0, $Size) = $String; last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
668 if ($Format =~ /^(Binary|Bin|BinaryString)$/i) { $This->{BitValues} = pack($BinaryTemplate, $String); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
669 if ($Format =~ /^(RawBinary|RawBin|RawBinaryString)$/i) { $This->{BitValues} = $String; last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
670 croak "Error: ${ClassName}->_SetBitsAsString: Specified bit vector string format, $Format, is not supported. Value values: Binary, Bin, BinaryString, Hexdecimal, Hex, HexadecimalString, Decimal, Dec, DecimalString, Octal, Oct, OctalString, RawBinary, RawBin, RawBinaryString...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
671 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
672
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
673 # Set size using packed string...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
674 $Size = length($This->GetBitsAsBinaryString());
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
675 if ($Size <=0) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
676 croak "Error: ${ClassName}->_SetBitsAsString: Bit vector size, $Size, must be a positive integer...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
677 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
678 $This->{Size} = $Size;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
679
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
680 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
681 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
682
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
683 # Calculate string size in bits...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
684 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
685 sub _CalculateStringSizeInBits ($$;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
686 my($FirstParameter, $SecondParameter, $ThisParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
687 my($This, $Format, $String, $Size);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
688
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
689 if ((@_ == 3) && (_IsBitVector($FirstParameter))) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
690 ($This, $Format, $String) = ($FirstParameter, $SecondParameter, $ThisParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
691 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
692 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
693 ($This, $Format, $String) = (undef, $FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
694 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
695
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
696 FORMAT : {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
697 if ($Format =~ /^(Hexadecimal|Hex|HexadecimalString)$/i) { $Size = length($String) * 4; last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
698 if ($Format =~ /^(Octal|Oct|OctalString)$/i) { $Size = length($String) * 3; last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
699 if ($Format =~ /^(Decimal|Dec|DecimalString)$/i) { $Size = length(ConversionsUtil::DecimalToHexadecimal($String)) * 4; last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
700 if ($Format =~ /^(Binary|Bin|BinaryString)$/i) { $Size = length($String); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
701 if ($Format =~ /^(RawBinary|RawBin|RawBinaryString)$/i) { $Size = length(unpack("B*", $String)); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
702 croak "Error: ${ClassName}::_CalculateStringSizeInBits: Specified bit vector string format, $Format, is not supported. Value values: Binary, Bin, BinaryString, Hexdecimal, Hex, HexadecimalString, Decimal, Dec, DecimalString, Octal, Oct, OctalString, RawBinary, RawBin, RawBinaryString...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
703 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
704 return $Size;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
705 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
706
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
707 # Set bit value using Perl vec function with bit numbers going from left to right.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
708 # First bit number corresponds to 0.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
709 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
710 sub _SetBitValue {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
711 my($This, $BitNum, $BitValue) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
712 my($Offset, $Width);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
713
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
714 $Offset = $BitNum;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
715 $Width = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
716
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
717 vec($This->{BitValues}, $Offset, $Width) = $BitValue;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
718
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
719 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
720 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
721
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
722 # Get bit value Perl vec function with bit numbers going from left to right.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
723 # First bit number corresponds to 0.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
724 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
725 sub _GetBitValue {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
726 my($This, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
727 my($Offset, $Width, $BitValue);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
728
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
729 $Offset = $BitNum;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
730 $Width = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
731
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
732 $BitValue = vec($This->{BitValues}, $Offset, $Width);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
733
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
734 return $BitValue;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
735 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
736
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
737 # Check to make sure it's a valid bit number...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
738 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
739 sub _ValidateBitNumber {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
740 my($This, $CallerName, $BitNum) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
741
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
742 if (!defined $BitNum) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
743 croak "Error: ${ClassName}->${CallerName}: Bit number is not defined...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
744 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
745 if ($BitNum < 0) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
746 croak "Error: ${ClassName}->${CallerName}: Bit number value, $BitNum, must be >= 0 ...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
747 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
748 if ($BitNum >= $This->{Size}) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
749 croak "Error: ${ClassName}->${CallerName}: Bit number number value, $BitNum, must be less than the size of bit vector, ", $This->{Size}, "...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
750 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
751
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
752 return $This;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
753 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
754
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
755 # Set bit values print format for an individual object or the whole class...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
756 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
757 sub SetBitValuePrintFormat ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
758 my($FirstParameter, $SecondParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
759
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
760 if ((@_ == 2) && (_IsBitVector($FirstParameter))) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
761 # Set bit values print format for the specific object...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
762 my($This, $ValuePrintFormat) = ($FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
763
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
764 if (!_ValidateBitValuePrintFormat($ValuePrintFormat)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
765 return;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
766 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
767
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
768 $This->{ValueFormat} = $ValuePrintFormat;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
769 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
770 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
771 # Set value print format for the class...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
772 my($ValuePrintFormat) = ($FirstParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
773
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
774 if (!_ValidateBitValuePrintFormat($ValuePrintFormat)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
775 return;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
776 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
777
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
778 $ValueFormat = $ValuePrintFormat;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
779 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
780 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
781
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
782 # Set bit values bit order for an individual object or the whole class...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
783 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
784 sub SetBitValueBitOrder ($;$) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
785 my($FirstParameter, $SecondParameter) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
786
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
787 if ((@_ == 2) && (_IsBitVector($FirstParameter))) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
788 # Set bit value bit order for the specific object...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
789 my($This, $BitOrder) = ($FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
790
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
791 if (!_ValidateBitValueBitOrder($BitOrder)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
792 return;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
793 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
794
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
795 $This->{ValueBitOrder} = $BitOrder;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
796 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
797 else {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
798 # Set bit value bit order for the class...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
799 my($BitOrder) = ($FirstParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
800
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
801 if (!_ValidateBitValueBitOrder($BitOrder)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
802 return;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
803 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
804
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
805 $ValueBitOrder = $BitOrder;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
806 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
807 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
808
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
809 # Validate print format for bit values...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
810 sub _ValidateBitValueBitOrder {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
811 my($BitOrder) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
812
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
813 if ($BitOrder !~ /^(Ascending|Descending)$/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
814 carp "Warning: ${ClassName}::_ValidateBitValueBitOrder: Specified bit order value, $BitOrder, is not supported. Supported values: Ascending, Descending...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
815 return 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
816 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
817 return 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
818 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
819
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
820 # Validate print format for bit values...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
821 sub _ValidateBitValuePrintFormat {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
822 my($ValuePrintFormat) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
823
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
824 if ($ValuePrintFormat !~ /^(Binary|Bin||BinaryString|Hexadecimal|Hex||HexadecimalString|Decimal|Dec||DecimalString|Octal|Oct||OctalString|RawBinary|RawBin|RawBinaryString)$/i) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
825 carp "Warning: ${ClassName}::_ValidateBitValuePrintFormat: Specified bit vector print format value, $ValuePrintFormat, is not supported. Supported values: Binary, Bin, BinaryString, Hexdecimal, Hex, HexadecimalString, Decimal, Dec, DecimalString, Octal, Oct, OctalString, RawBinary, RawBin, RawBinaryString...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
826 return 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
827 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
828 return 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
829 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
830
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
831 # Bitwise AND operation for BitVectors...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
832 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
833 sub _BitVectorAndOperator {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
834 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $ErrorMsg, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
835
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
836 $ErrorMsg = "_BitVectorAndOperator: Bitwise AND oparation failed";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
837 $CheckBitVectorSizes = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
838 ($This, $Other, $OrderFlipped, $OtherIsBitVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
839
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
840 if (!$OtherIsBitVector) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
841 if ($OrderFlipped) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
842 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a bit vector...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
843 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
844 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
845 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
846 $BitVector = (ref $This)->new($This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
847 $BitVector->{BitValues} = $This->{BitValues} & $Other->{BitValues};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
848
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
849 return $BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
850 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
851
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
852 # Bitwise OR operation for BitVectors...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
853 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
854 sub _BitVectorOrOperator {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
855 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $ErrorMsg, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
856
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
857 $ErrorMsg = "_BitVectorAndOperator: Bitwise OR oparation failed";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
858 $CheckBitVectorSizes = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
859 ($This, $Other, $OrderFlipped, $OtherIsBitVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
860
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
861 if (!$OtherIsBitVector) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
862 if ($OrderFlipped) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
863 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a bit vector...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
864 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
865 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
866 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
867 $BitVector = (ref $This)->new($This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
868 $BitVector->{BitValues} = $This->{BitValues} | $Other->{BitValues};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
869
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
870 return $BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
871 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
872
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
873 # Bitwise XOR operation for BitVectors...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
874 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
875 sub _BitVectorExclusiveOrOperator {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
876 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $ErrorMsg, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
877
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
878 $ErrorMsg = "_BitVectorAndOperator: Bitwise XOR oparation failed";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
879 $CheckBitVectorSizes = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
880 ($This, $Other, $OrderFlipped, $OtherIsBitVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
881
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
882 if (!$OtherIsBitVector) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
883 if ($OrderFlipped) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
884 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a bit vector...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
885 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
886 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
887 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
888 $BitVector = (ref $This)->new($This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
889 $BitVector->{BitValues} = $This->{BitValues} ^ $Other->{BitValues};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
890
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
891 return $BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
892 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
893
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
894 # Bitwise negation operation for BitVectors...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
895 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
896 sub _BitVectorNegationOperator {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
897 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $ErrorMsg, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
898
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
899 $ErrorMsg = "_BitVectorAndOperator: Bitwise negation oparation failed";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
900 $CheckBitVectorSizes = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
901 ($This, $Other, $OrderFlipped, $OtherIsBitVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
902
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
903 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
904 $BitVector = (ref $This)->new($This->{Size});
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
905 $BitVector->{BitValues} = ~ $This->{BitValues};
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
906
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
907 return $BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
908 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
909
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
910 # Bit vector equla operator. Two bit vectors are considered equal assuming their size
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
911 # is same and bits are on at the same positions...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
912 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
913 sub _BitVectorEqualOperator {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
914 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $ErrorMsg, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
915
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
916 $ErrorMsg = "_BitVectorEqualOperator: BitVector == oparation failed";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
917 $CheckBitVectorSizes = 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
918 ($This, $Other, $OrderFlipped, $OtherIsBitVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
919
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
920 if (!$OtherIsBitVector) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
921 if ($OrderFlipped) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
922 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a bit vector...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
923 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
924 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
925 if ($This->GetSize() != $Other->GetSize()) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
926 return 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
927 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
928 if ($This->GetNumOfSetBits() != $Other->GetNumOfSetBits()) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
929 return 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
930 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
931 # Check number of On bits only in This vector. It must be zero for vectors to be equal...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
932 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
933 $BitVector = $This & ~$Other;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
934
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
935 return $BitVector->GetNumOfSetBits() ? 0 : 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
936 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
937
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
938 # Bit vector not equal operator. Two bit vectors are considered not equal when their size
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
939 # is different or bits are on at the same positions...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
940 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
941 sub _BitVectorNotEqualOperator {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
942 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $ErrorMsg, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
943
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
944 $ErrorMsg = "_BitVectorEqualOperator: BitVector != oparation failed";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
945 $CheckBitVectorSizes = 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
946 ($This, $Other, $OrderFlipped, $OtherIsBitVector) = _ProcessOverloadedOperatorParameters($ErrorMsg, @_, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
947
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
948 if (!$OtherIsBitVector) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
949 if ($OrderFlipped) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
950 croak "Error: ${ClassName}->${ErrorMsg}: First object must be a bit vector...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
951 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
952 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
953 if ($This->GetSize() != $Other->GetSize()) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
954 return 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
955 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
956 if ($This->GetNumOfSetBits() != $Other->GetNumOfSetBits()) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
957 return 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
958 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
959 # Check number of On bits only in This vector. It must be zero for vectors to be equal...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
960 my($BitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
961 $BitVector = $This & ~$Other;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
962
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
963 return $BitVector->GetNumOfSetBits() ? 1 : 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
964 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
965
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
966 # Process parameters passed to overloaded operators...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
967 #
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
968 # For uninary operators, $SecondParameter is not defined.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
969 sub _ProcessOverloadedOperatorParameters {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
970 my($ErrorMsg, $FirstParameter, $SecondParameter, $ParametersOrderStatus, $CheckBitVectorSizesStatus) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
971 my($This, $Other, $OrderFlipped, $OtherIsBitVector, $CheckBitVectorSizes);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
972
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
973 ($This, $Other) = ($FirstParameter, $SecondParameter);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
974 $OrderFlipped = (defined($ParametersOrderStatus) && $ParametersOrderStatus) ? 1 : 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
975 $CheckBitVectorSizes = (defined $CheckBitVectorSizesStatus) ? $CheckBitVectorSizesStatus : 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
976
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
977 _ValidateBitVector($ErrorMsg, $This);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
978
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
979 $OtherIsBitVector = 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
980 if (defined($Other) && (ref $Other)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
981 # Make sure $Other is a vector...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
982 _ValidateBitVector($ErrorMsg, $Other);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
983 if ($CheckBitVectorSizes) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
984 _ValidateBitVectorSizesAreEqual($ErrorMsg, $This, $Other);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
985 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
986 $OtherIsBitVector = 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
987 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
988 return ($This, $Other, $OrderFlipped, $OtherIsBitVector);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
989 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
990
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
991 # Is it a bit vector object?
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
992 sub _IsBitVector {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
993 my($Object) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
994
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
995 return (Scalar::Util::blessed($Object) && $Object->isa($ClassName)) ? 1 : 0;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
996 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
997
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
998 # Make sure it's a bit vector reference...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
999 sub _ValidateBitVector {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1000 my($ErrorMsg, $Vector) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1001
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1002 if (!_IsBitVector($Vector)) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1003 croak "Error: ${ClassName}->${ErrorMsg}: Object must be a bit vector...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1004 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1005 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1006
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1007 # Make sure size of the two bit vectors are equal...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1008 sub _ValidateBitVectorSizesAreEqual {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1009 my($ErrorMsg, $BitVector1, $BitVector2) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1010
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1011 if ($BitVector1->GetSize() != $BitVector2->GetSize()) {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1012 croak "Error: ${ClassName}->${ErrorMsg}: Size of the bit vectors must be same...";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1013 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1014 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1015
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1016 # Return a string containing vector values...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1017 sub StringifyBitVector {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1018 my($This) = @_;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1019 my($BitVectorString, $PrintFormat, $BitOrder, $BitsValue);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1020
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1021 $PrintFormat = (exists $This->{ValueFormat}) ? $This->{ValueFormat} : $ValueFormat;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1022 $BitOrder = (exists $This->{ValueBitOrder}) ? $This->{ValueBitOrder} : $ValueBitOrder;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1023 $BitVectorString = '';
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1024
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1025 FORMAT: {
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1026 if ($PrintFormat =~ /^(Hexadecimal|Hex|HexadecimalString)$/i) { $BitsValue = $This->_GetBitsAsString('Hexadecimal', $BitOrder); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1027 if ($PrintFormat =~ /^(Octal|Oct|OctalString)$/i) { $BitsValue = $This->_GetBitsAsString('Octal', $BitOrder); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1028 if ($PrintFormat =~ /^(Decimal|Dec|DecimalString)$/i) { $BitsValue = $This->_GetBitsAsString('Decimal', $BitOrder); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1029 if ($PrintFormat =~ /^(RawBinary|RawBin|RawBinaryString)$/i) { $BitsValue = $This->_GetBitsAsString('RawBinary'); last FORMAT; }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1030 # Default is bninary format...
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1031 $BitsValue = $This->_GetBitsAsString('Binary', $BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1032 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1033 $BitVectorString = "<Size: ". $This->GetSize() . ";BitOrder: $BitOrder; Value: " . $BitsValue . ">";
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1034
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1035 return $BitVectorString;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1036 }
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1037
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1038 1;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1039
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1040 __END__
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1041
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1042 =head1 NAME
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1043
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1044 BitVector
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1045
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1046 =head1 SYNOPSIS
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1047
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1048 use BitVector;
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1049
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1050 use BitVector ();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1051
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1052 use BitVector qw(:all);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1053
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1054 =head1 DESCRIPTION
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1055
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1056 B<BitVector> class provides the following methods:
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1057
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1058 new, ClearAllBits, ClearBit, ClearBits, ClearBitsRange, Copy, FlipAllBits,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1059 FlipBit, FlipBits, FlipBitsRange, GetBit, GetBitsAsBinaryString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1060 GetBitsAsDecimalString, GetBitsAsHexadecimalString, GetBitsAsOctalString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1061 GetBitsAsRawBinaryString, GetDensityOfClearBits, GetDensityOfSetBits,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1062 GetNumOfClearBits, GetNumOfSetBits, GetSize, IsBitClear, IsBitSet, IsBitVector,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1063 NewFromBinaryString, NewFromDecimalString, NewFromHexadecimalString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1064 NewFromOctalString, NewFromRawBinaryString, Reverse, SetAllBits, SetBit,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1065 SetBitValue, SetBitValueBitOrder, SetBitValuePrintFormat, SetBits,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1066 SetBitsAsBinaryString, SetBitsAsDecimalString, SetBitsAsHexadecimalString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1067 SetBitsAsOctalString, SetBitsAsRawBinaryString, SetBitsRange, StringifyBitVector
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1068
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1069 The following methods can also be used as functions:
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1070
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1071 IsBitVector, NewFromBinaryString, NewFromDecimalString, NewFromHexadecimalString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1072 NewFromOctalString, NewFromRawBinaryString
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1073
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1074 The following operators are overloaded:
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1075
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1076 "" & | ^ ~ == !=
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1077
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1078 Internally, bits are stored in ascending order using Perl vec function. Regardless
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1079 of machine order, big-endian or little-endian, vec function always considers first
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1080 string byte as the lowest byte and first bit within each byte as the lowest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1081
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1082 Things to keep in mind:
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1083
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1084 o Bit numbers range from 0 to (Size - 1).
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1085 o Bit data retieval methods provide options to data in ascending or
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1086 descending bit order. Default is ascending bit order.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1087 o Stringyfy method provides an option to print data in ascending or
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1088 descending bit order. Default is ascending bit order.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1089
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1090 =head2 METHODS
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1091
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1092 =over 4
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1093
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1094 =item B<new>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1095
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1096 $NewBitVector = new BitVector($Size);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1097
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1098 Create a new I<BitVector> object of size I<Size> and return newly created
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1099 B<BitVector>. Bit numbers range from 0 to 1 less than I<Size>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1100
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1101 =item B<ClearAllBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1102
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1103 $BitVector->ClearAllBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1104
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1105 Set all bit values to 0 in I<BitVector> object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1106
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1107 =item B<ClearBit>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1108
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1109 $BitVector->ClearBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1110
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1111 Set specified bit number I<BitNum> to 0 in I<BitVector> object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1112
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1113 =item B<ClearBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1114
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1115 $BitVector->ClearBits(@BitNums);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1116
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1117 Set specified bit numbers I<BitNums> to 0 in I<BitVector> object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1118
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1119 =item B<ClearBitsRange>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1120
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1121 $BitVector->ClearBitsRange($MinBitNum, $MaxBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1122
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1123 Set specified bit numbers between I<MinBitNum> and I<MaxBitNum> to 0 in I<BitVector>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1124 object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1125
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1126 =item B<Copy>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1127
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1128 $NewBitVector = $BitVector->Copy();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1129
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1130 Copy I<BitVector> and its associated data to a new B<BitVector> and return a new
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1131 B<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1132
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1133 =item B<FlipAllBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1134
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1135 $BitVector->FlipAllBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1136
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1137 Flip values of all bits in I<BitVector> and its associated data to a new B<BitVector> and return
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1138 I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1139
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1140 =item B<FlipBit>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1141
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1142 $BitVector->FlipBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1143
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1144 Flip value of specified I<BitNum> of in I<BitVector> and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1145
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1146 =item B<FlipBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1147
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1148 $BitVector->FlipBits(@BitNums);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1149
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1150 Flip values of specified bit numbers I<BitNums> in I<BitVector> object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1151
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1152 =item B<FlipBitsRange>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1153
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1154 $BitVector->FlipBitsRange($MinBitNum, $MaxBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1155
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1156 Flip values of specified bit numbers between I<MinBitNum> and I<MaxBitNum> in I<BitVector>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1157 object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1158
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1159 =item B<GetBit>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1160
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1161 $BitValue = $BitVector->GetBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1162
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1163 Returns value of bit number I<BitNum> in I<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1164
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1165 =item B<GetBitsAsBinaryString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1166
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1167 $BitString = $BitVector->GetBitsAsBinaryString([$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1168
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1169 Returns values of bits in I<BitVector> as an ascii bit string containing 0s and 1s.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1170
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1171 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1172 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1173
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1174 =item B<GetBitsAsDecimalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1175
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1176 $BitString = $BitVector->GetBitsAsDecimalString([$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1177
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1178 Returns values of bits in I<BitVector> as a decimal bit string containing values from 0 to
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1179 9.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1180
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1181 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1182 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1183
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1184 =item B<GetBitsAsHexadecimalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1185
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1186 $BitString = $BitVector->GetBitsAsHexadecimalString([$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1187
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1188 Returns values of bits in I<BitVector> as a hexadecimal bit string containing values from 0 to 9
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1189 and a to f.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1190
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1191 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1192 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1193
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1194 =item B<GetBitsAsOctalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1195
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1196 $BitString = $BitVector->GetBitsAsOctalString([$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1197
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1198 Returns values of bits in I<BitVector> as an octal bit string containing values form 0 to
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1199 7.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1200
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1201 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1202 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1203
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1204 =item B<GetBitsAsRawBinaryString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1205
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1206 $BitString = $BitVector->GetBitsAsRawBinaryString();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1207
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1208 Returns values of bits in I<BitVector> as an string corresponding to packed bit values
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1209 used by Perl vec function without perfoming any unpacking.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1210
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1211 =item B<GetDensityOfClearBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1212
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1213 $ClearBitsDensity = $BitVector->GetDensityOfClearBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1214
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1215 Returns density of clear bits in I<BitVector> which corresponds to number of bits set to 0
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1216 I<BitVector> divided by its size.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1217
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1218 =item B<GetDensityOfSetBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1219
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1220 $SetBitsDensity = $BitVector->GetDensityOfSetBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1221
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1222 Returns density of set bits in I<BitVector> which corresponds to number of bits set to 1 in
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1223 I<BitVector> divided by its size.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1224
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1225 =item B<GetNumOfClearBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1226
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1227 $NumOfClearBits = $BitVector->GetNumOfClearBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1228
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1229 Returns number of bits set to 0 in I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1230
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1231 =item B<GetNumOfSetBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1232
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1233 $NumOfSetBits = $BitVector->GetNumOfSetBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1234
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1235 Returns number of bits set to 1 in I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1236
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1237 =item B<GetSize>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1238
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1239 $Size = $BitVector->GetSize();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1240
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1241 Returns size of I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1242
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1243 =item B<IsBitClear>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1244
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1245 $Status = $BitVector->IsBitClear();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1246
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1247 Returns 1 or 0 based on whether I<BitNum> is set to 0 in I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1248
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1249 =item B<IsBitSet>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1250
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1251 $Status = $BitVector->IsBitSet($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1252
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1253 Returns 1 or 0 based on whether I<BitNum> is set to 1 in I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1254
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1255 =item B<IsBitVector>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1256
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1257 $Status = BitVector::IsBitVector($Object);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1258
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1259 Returns 1 or 0 based on whether I<Object> is a B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1260
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1261 =item B<NewFromBinaryString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1262
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1263 $NewBitVector = BitVector::NewFromBinaryString($BinaryString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1264 [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1265 $NewBitVector = $BitVector->NewFromBinaryString($BinaryString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1266 [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1267
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1268 Creates a new I<BitVector> using I<BinaryString> and returns new B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1269
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1270 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1271 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1272
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1273 =item B<NewFromDecimalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1274
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1275 $NewBitVector = BitVector::NewFromDecimalString($DecimalString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1276 [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1277 $NewBitVector = $BitVector->NewFromDecimalString($DecimalString,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1278 [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1279
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1280 Creates a new I<BitVector> using I<DecimalString> and returns new B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1281
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1282 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1283 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1284
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1285 =item B<NewFromHexadecimalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1286
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1287 $NewBitVector = BitVector::NewFromHexadecimalString(
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1288 $HexadecimalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1289 $NewBitVector = $BitVector->NewFromHexadecimalString(
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1290 $HexadecimalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1291
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1292 Creates a new I<BitVector> using I<HexadecimalString> and returns new B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1293
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1294 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1295 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1296
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1297 =item B<NewFromOctalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1298
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1299 $NewBitVector = BitVector::NewFromOctalString($OctalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1300 $NewBitVector = $BitVector->NewFromOctalString($OctalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1301
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1302 Creates a new I<BitVector> using I<OctalString> and returns new B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1303
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1304 Default I<BitOrder> is I<Ascending> bit order which corresponds to first bit in each
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1305 byte as the loweset bit as opposed to the higest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1306
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1307 =item B<NewFromRawBinaryString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1308
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1309 $NewBitVector = BitVector::NewFromRawBinaryString(
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1310 $RawBinaryString);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1311 $NewBitVector = $BitVector->NewFromRawBinaryString(
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1312 $RawBinaryString);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1313
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1314 Creates a new I<BitVector> using I<RawBinaryString> and returns new B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1315
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1316 =item B<Reverse>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1317
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1318 $BitVector->Reverse();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1319
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1320 Reverses values of bits in I<BitVector> and returns I<BitVector>. First bit number ends up with
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1321 value of last bit number.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1322
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1323 =item B<SetAllBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1324
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1325 $BitVector->SetAllBits();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1326
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1327 Sets values of all bits in I<BitVector> to 1 and returns I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1328
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1329 =item B<SetBit>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1330
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1331 $BitVector->SetBit($BitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1332
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1333 Sets value of I<BitNum> to 1 in I<BitVector> and returns I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1334
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1335 =item B<SetBitValue>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1336
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1337 $BitVector->SetBitValue($BitNum, $BitValue);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1338
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1339 Sets value of I<BitNum> to I<BitValue> in I<BitVector> and returns I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1340
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1341 =item B<SetBitValueBitOrder>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1342
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1343 BitVector::SetBitValueBitOrder($BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1344 $BitVector->SetBitValueBitOrder($BitOrder);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1345
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1346 Set bit order for printing B<BitVector> values during stringification of B<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1347 Possible bit order values: I<Ascending or Descending>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1348
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1349 Bit order can be set for either an individual B<BitVector> object or the class. Default is
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1350 to print bits in each byte in I<Asscending> bit order.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1351
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1352 Internally, bits are stored in I<Ascending> bit order using Perl vec function. Regardless
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1353 of machine order, big-endian or little-endian, vec function always considers first
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1354 string byte as the lowest byte and first bit within each byte as the lowest bit.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1355
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1356 =item B<SetBitValuePrintFormat>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1357
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1358 BitVector::SetBitValuePrintFormat($PrintValueFormat);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1359 $BitVector->SetBitValuePrintFormat($PrintValueFormat);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1360
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1361 Set bit values print format for printing B<BitVector> values during stringification of B<BitVector>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1362 object. Possible print format values: I<Binary, Bin, Hexadecimal, Hex, Decimal, Dec, Octal,
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1363 Oct, RawBinary, RawBin>. Default: I<Binary>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1364
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1365 Bit values print format can be set for either an individual B<BitVector> object or the class.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1366
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1367 =item B<SetBits>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1368
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1369 $BitVector->SetBits(@BitNums);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1370
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1371 Set specified bit numbers I<BitNums> to 1 in I<BitVector> object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1372
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1373 =item B<SetBitsAsBinaryString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1374
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1375 $BitVector->SetBitsAsBinaryString($BinaryString);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1376
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1377 Set bit values in I<BitVector> using specified I<BinaryString> and return I<BitVector>. The
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1378 size of I<BitVector> is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1379
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1380 =item B<SetBitsAsDecimalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1381
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1382 $BitVector->SetBitsAsDecimalString($DecimalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1383
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1384 Set bit values in I<BitVector> using specified I<DecimalString> and return I<BitVector>. The
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1385 size of I<BitVector> is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1386
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1387 =item B<SetBitsAsHexadecimalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1388
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1389 $BitVector->SetBitsAsHexadecimalString($HexadecimalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1390
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1391 Set bit values in I<BitVector> using specified I<HexadecimalString> and return I<BitVector>. The
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1392 size of I<BitVector> is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1393
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1394 =item B<SetBitsAsOctalString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1395
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1396 $BitVector->SetBitsAsOctalString($OctalString, [$BitOrder]);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1397
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1398 Set bit values in I<BitVector> using specified I<OctalString> and return I<BitVector>. The
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1399 size of I<BitVector> is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1400
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1401 =item B<SetBitsAsRawBinaryString>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1402
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1403 $BitVector->SetBitsAsRawBinaryString($RawBinaryString);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1404
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1405 Set bit values in I<BitVector> using specified I<RawBinaryString> and return I<BitVector>. The
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1406 size of I<BitVector> is not changed.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1407
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1408 =item B<SetBitsRange>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1409
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1410 $BitVector->SetBitsRange($MinBitNum, $MaxBitNum);
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1411
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1412 Set specified bit numbers between I<MinBitNum> and I<MaxBitNum> to 1 in I<BitVector>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1413 object and return I<BitVector>.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1414
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1415 =item B<StringifyBitVector>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1416
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1417 $String = $BitVector->StringifyBitVector();
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1418
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1419 Returns a string containing information about I<BitVector> object.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1420
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1421 =back
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1422
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1423 =head1 AUTHOR
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1424
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1425 Manish Sud <msud@san.rr.com>
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1426
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1427 =head1 SEE ALSO
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1428
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1429 Vector.pm
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1430
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1431 =head1 COPYRIGHT
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1432
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1433 Copyright (C) 2015 Manish Sud. All rights reserved.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1434
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1435 This file is part of MayaChemTools.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1436
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1437 MayaChemTools is free software; you can redistribute it and/or modify it under
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1438 the terms of the GNU Lesser General Public License as published by the Free
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1439 Software Foundation; either version 3 of the License, or (at your option)
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1440 any later version.
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1441
2abf0d43254d Uploaded
deepakjadmin
parents:
diff changeset
1442 =cut