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

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