@Override public boolean next() { long currentBucketValue = dataAccess.relativeBucket(mapOrdinal, currentBucket); int currentBucketKey = (int)(currentBucketValue >>> 32); if(currentBucketKey == ORDINAL_NONE) return false; key = currentBucketKey; value = (int)currentBucketValue; currentBucket++; currentBucket &= numBuckets - 1; return true; }
@Override public boolean next() { key = -1; while(key == -1) { currentBucket++; if(currentBucket >= numBuckets) return false; long bucketVal = dataAccess.relativeBucket(mapOrdinal, currentBucket); this.key = (int)(bucketVal >>> 32); this.value = (int)bucketVal; } return true; }
@Override public long relativeBucket(int ordinal, int bucketIndex) { return currentDataAccess().relativeBucket(ordinal, bucketIndex); }
private HollowMapCachedDelegate(HollowMapTypeDataAccess dataAccess, HollowMapTypeAPI typeAPI, int ordinal) { int size = dataAccess.size(ordinal); int ordinals[] = new int[HashCodes.hashTableSize(size) * 2]; for(int i=0;i<ordinals.length;i+=2) { long bucketData = dataAccess.relativeBucket(ordinal, i/2); ordinals[i] = (int)(bucketData >> 32); ordinals[i + 1] = (int)bucketData; } this.ordinals = ordinals; this.hashMask = (ordinals.length / 2) - 1; this.size = size; this.dataAccess = dataAccess; this.typeAPI = typeAPI; }
@Override public long relativeBucket(int ordinal, int bucketIndex) { sampler().recordBucketRetrieval(); recordStackTrace(); if(!ordinalIsPresent(ordinal)) return ((HollowMapTypeDataAccess)dataAccess.getTypeDataAccess(getSchema().getName(), ordinal)).relativeBucket(ordinal, bucketIndex); return removedRecords().relativeBucket(getMappedOrdinal(ordinal), bucketIndex); }