@@ -22,7 +22,7 @@ public final class Reader implements Closeable {
2222 (byte ) 0xCD , (byte ) 0xEF , 'M' , 'a' , 'x' , 'M' , 'i' , 'n' , 'd' , '.' ,
2323 'c' , 'o' , 'm' };
2424
25- private final int ipV4Start ;
25+ private final long ipV4Start ;
2626 private final Metadata metadata ;
2727 private final AtomicReference <BufferHolder > bufferHolderReference ;
2828 private final NodeCache cache ;
@@ -152,7 +152,7 @@ public <T> T get(InetAddress ipAddress, Class<T> cls) throws IOException {
152152 return getRecord (ipAddress , cls ).getData ();
153153 }
154154
155- int getIpv4Start () {
155+ long getIpv4Start () {
156156 return this .ipV4Start ;
157157 }
158158
@@ -171,12 +171,12 @@ public <T> DatabaseRecord<T> getRecord(InetAddress ipAddress, Class<T> cls)
171171
172172 byte [] rawAddress = ipAddress .getAddress ();
173173
174- int [] traverseResult = traverseTree (rawAddress , rawAddress .length * 8 );
174+ long [] traverseResult = traverseTree (rawAddress , rawAddress .length * 8 );
175175
176- int pl = traverseResult [1 ];
177- int record = traverseResult [0 ];
176+ long record = traverseResult [0 ];
177+ int pl = ( int ) traverseResult [1 ];
178178
179- int nodeCount = this .metadata .getNodeCount ();
179+ long nodeCount = this .metadata .getNodeCount ();
180180 Buffer buffer = this .getBufferHolder ().get ();
181181 T dataRecord = null ;
182182 if (record > nodeCount ) {
@@ -253,7 +253,7 @@ BufferHolder getBufferHolder() throws ClosedDatabaseException {
253253 return bufferHolder ;
254254 }
255255
256- private int startNode (int bitLength ) {
256+ private long startNode (int bitLength ) {
257257 // Check if we are looking up an IPv4 address in an IPv6 tree. If this
258258 // is the case, we can skip over the first 96 nodes.
259259 if (this .metadata .getIpVersion () == 6 && bitLength == 32 ) {
@@ -264,13 +264,13 @@ private int startNode(int bitLength) {
264264 return 0 ;
265265 }
266266
267- private int findIpV4StartNode (Buffer buffer )
267+ private long findIpV4StartNode (Buffer buffer )
268268 throws InvalidDatabaseException {
269269 if (this .metadata .getIpVersion () == 4 ) {
270270 return 0 ;
271271 }
272272
273- int node = 0 ;
273+ long node = 0 ;
274274 for (int i = 0 ; i < 96 && node < this .metadata .getNodeCount (); i ++) {
275275 node = this .readNode (buffer , node , 0 );
276276 }
@@ -319,9 +319,9 @@ public <T> Networks<T> networksWithin(
319319 prefixLength += 96 ;
320320 }
321321
322- int [] traverseResult = this .traverseTree (ipBytes , prefixLength );
323- int node = traverseResult [0 ];
324- int prefix = traverseResult [1 ];
322+ long [] traverseResult = this .traverseTree (ipBytes , prefixLength );
323+ long node = traverseResult [0 ];
324+ int prefix = ( int ) traverseResult [1 ];
325325
326326 return new Networks <>(this , includeAliasedNetworks ,
327327 new Networks .NetworkNode [] {new Networks .NetworkNode (ipBytes , prefix , node )},
@@ -335,12 +335,12 @@ public <T> Networks<T> networksWithin(
335335 * @param bitCount The prefix.
336336 * @return int[]
337337 */
338- private int [] traverseTree (byte [] ip , int bitCount )
338+ private long [] traverseTree (byte [] ip , int bitCount )
339339 throws ClosedDatabaseException , InvalidDatabaseException {
340340 Buffer buffer = this .getBufferHolder ().get ();
341341 int bitLength = ip .length * 8 ;
342- int record = this .startNode (bitLength );
343- int nodeCount = this .metadata .getNodeCount ();
342+ long record = this .startNode (bitLength );
343+ long nodeCount = this .metadata .getNodeCount ();
344344
345345 int i = 0 ;
346346 for (; i < bitCount && record < nodeCount ; i ++) {
@@ -352,19 +352,19 @@ int record = this.startNode(bitLength);
352352 record = this .readNode (buffer , record , bit );
353353 }
354354
355- return new int []{record , i };
355+ return new long []{record , i };
356356 }
357357
358- int readNode (Buffer buffer , int nodeNumber , int index )
358+ int readNode (Buffer buffer , long nodeNumber , int index )
359359 throws InvalidDatabaseException {
360360 // index is the index of the record within the node, which
361361 // can either be 0 or 1.
362- int baseOffset = nodeNumber * this .metadata .getNodeByteSize ();
362+ long baseOffset = nodeNumber * this .metadata .getNodeByteSize ();
363363
364364 switch (this .metadata .getRecordSize ()) {
365365 case 24 :
366366 // For a 24 bit record, each record is 3 bytes.
367- buffer .position (baseOffset + index * 3 );
367+ buffer .position (baseOffset + ( long ) index * 3 );
368368 return Decoder .decodeInteger (buffer , 0 , 3 );
369369 case 28 :
370370 int middle = buffer .get (baseOffset + 3 );
@@ -377,10 +377,10 @@ int readNode(Buffer buffer, int nodeNumber, int index)
377377 // We get the most significant byte of the second record.
378378 middle = 0x0F & middle ;
379379 }
380- buffer .position (baseOffset + index * 4 );
380+ buffer .position (baseOffset + ( long ) index * 4 );
381381 return Decoder .decodeInteger (buffer , middle , 3 );
382382 case 32 :
383- buffer .position (baseOffset + index * 4 );
383+ buffer .position (baseOffset + ( long ) index * 4 );
384384 return Decoder .decodeInteger (buffer , 0 , 4 );
385385 default :
386386 throw new InvalidDatabaseException ("Unknown record size: "
@@ -390,10 +390,10 @@ int readNode(Buffer buffer, int nodeNumber, int index)
390390
391391 <T > T resolveDataPointer (
392392 Buffer buffer ,
393- int pointer ,
393+ long pointer ,
394394 Class <T > cls
395395 ) throws IOException {
396- int resolved = (pointer - this .metadata .getNodeCount ())
396+ long resolved = (pointer - this .metadata .getNodeCount ())
397397 + this .metadata .getSearchTreeSize ();
398398
399399 if (resolved >= buffer .capacity ()) {
0 commit comments