Revision 00947987
Added by Leszek Koltunski about 1 year ago
src/main/java/org/distorted/objectlib/tablebases/PruningTable.java | ||
---|---|---|
17 | 17 |
private final byte[] mData; |
18 | 18 |
private final int mNumBits; |
19 | 19 |
private final int mBucketBytes; |
20 |
private final int mTotalSize; |
|
21 | 20 |
private final int mNumBuckets; |
22 | 21 |
private final int mLevel; |
23 | 22 |
|
... | ... | |
58 | 57 |
|
59 | 58 |
private int getBucketOffset(int bucket) |
60 | 59 |
{ |
61 |
if( bucket>=mNumBuckets ) return mTotalSize;
|
|
60 |
if( bucket>=mNumBuckets ) return mData.length;
|
|
62 | 61 |
|
63 | 62 |
int ret = 0; |
64 | 63 |
int start = HEADER_SIZE + bucket*mBucketBytes; |
... | ... | |
178 | 177 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
179 | 178 |
// only numBits = 4,8,12,16 actually supported |
180 | 179 |
|
181 |
public PruningTable(Tablebase table, int level, int numBits)
|
|
180 |
PruningTable(Tablebase table, int level, int numBits) |
|
182 | 181 |
{ |
183 | 182 |
mNumBits = numBits; |
184 | 183 |
mLevel = level; |
... | ... | |
205 | 204 |
|
206 | 205 |
mBucketBytes = numBytesForIndices(totalBytesForTable); |
207 | 206 |
int totalBytesForBuckets = mNumBuckets*mBucketBytes; |
208 |
mTotalSize = HEADER_SIZE + totalBytesForBuckets + totalBytesForTable;
|
|
209 |
mData = new byte[mTotalSize];
|
|
207 |
int totalSize = HEADER_SIZE + totalBytesForBuckets + totalBytesForTable;
|
|
208 |
mData = new byte[totalSize];
|
|
210 | 209 |
|
211 | 210 |
writeHeader(); |
212 | 211 |
writeBucketPointers(bucket); |
... | ... | |
215 | 214 |
|
216 | 215 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
217 | 216 |
|
218 |
public boolean belongs(int number) |
|
217 |
PruningTable(byte[] data) |
|
218 |
{ |
|
219 |
mData = data; |
|
220 |
|
|
221 |
mLevel = ((int)mData[0])&0xff; |
|
222 |
mBucketBytes = ((int)mData[1])&0xff; |
|
223 |
mNumBits = ((int)mData[2])&0xff; |
|
224 |
mNumBuckets =(((int)mData[3])&0xff)*256 + ((int)mData[4])&0xff; |
|
225 |
} |
|
226 |
|
|
227 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
228 |
|
|
229 |
byte[] getPacked() |
|
230 |
{ |
|
231 |
return mData; |
|
232 |
} |
|
233 |
|
|
234 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
235 |
|
|
236 |
int getLevel() |
|
237 |
{ |
|
238 |
return mLevel; |
|
239 |
} |
|
240 |
|
|
241 |
/////////////////////////////////////////////////////////////////////////////////////////////////// |
|
242 |
|
|
243 |
boolean belongs(int number) |
|
219 | 244 |
{ |
220 | 245 |
int bucket = (number>>mNumBits); |
221 | 246 |
int offset1 = getBucketOffset(bucket); |
Also available in: Unified diff
New PruningTable data structure for solvers.