@@ -109,19 +109,19 @@ protected static int packsize(int num, int b) {
109109 return (num + howmanyfit - 1 ) / howmanyfit ;
110110 }
111111
112- protected static int pack (int [] outputarray , int arraypos , int [] data ,
112+ protected static int pack (int [] outputarray , int arraypos , int [] data , int datapos ,
113113 int num , int b ) {
114114 if (num == 0 )
115115 return arraypos ;
116116 if (b > 16 ) {
117- System .arraycopy (data , 0 , outputarray , arraypos , num );
117+ System .arraycopy (data , datapos , outputarray , arraypos , num );
118118 return num + arraypos ;
119119 }
120120 for (int k = 0 ; k < packsize (num , b ); ++k )
121121 outputarray [k + arraypos ] = 0 ;
122122 int inwordpointer = 0 ;
123123 for (int k = 0 ; k < num ; ++k ) {
124- outputarray [arraypos ] |= (data [k ] << inwordpointer );
124+ outputarray [arraypos ] |= (data [k + datapos ] << inwordpointer );
125125 inwordpointer += b ;
126126 final int increment = ((inwordpointer + b - 1 ) >> 5 );
127127 arraypos += increment ;
@@ -130,7 +130,7 @@ protected static int pack(int[] outputarray, int arraypos, int[] data,
130130 return arraypos + (inwordpointer > 0 ? 1 : 0 );
131131 }
132132
133- protected static int unpack (int [] sourcearray , int arraypos , int [] data ,
133+ protected static int unpack (int [] sourcearray , int arraypos , int [] data , int datapos ,
134134 int num , int b ) {
135135 if (b > 16 ) {
136136 System .arraycopy (sourcearray , arraypos , data , 0 , num );
@@ -139,8 +139,7 @@ protected static int unpack(int[] sourcearray, int arraypos, int[] data,
139139 final int mask = (1 << b ) - 1 ;
140140 int inwordpointer = 0 ;
141141 for (int k = 0 ; k < num ; ++k ) {
142- data [k ] = (sourcearray [arraypos ] & mask );
143- sourcearray [arraypos ] >>>= b ;
142+ data [k + datapos ] = ((sourcearray [arraypos ] >>> inwordpointer ) & mask );
144143 inwordpointer += b ;
145144 final int increment = ((inwordpointer + b - 1 ) >> 5 );
146145 arraypos += increment ;
0 commit comments