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

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