/** * Use the supplied trim strategy. */ public KBucketSet(I2PAppContext context, T us, int max, int b, KBucketTrimmer<T> trimmer) { _us = us; _context = context; _log = context.logManager().getLog(KBucketSet.class); _trimmer = trimmer; if (max <= 4 || b <= 0 || b > 8) throw new IllegalArgumentException(); KEYSIZE_BITS = us.length() * 8; B_VALUE = b; B_FACTOR = 1 << (b - 1); NUM_BUCKETS = KEYSIZE_BITS * B_FACTOR; BUCKET_SIZE = max; _buckets = createBuckets(); _rangeCalc = new Range<T>(us, B_VALUE); // this verifies the zero-argument constructor makeKey(new byte[us.length()]); }