private void addPool(){
  int newNumPools=(int)Math.ceil(numPools * POOL_GROWTH_FACTOR);
  numPoolsCounter.incr(newNumPools - numPools);
  RegularDegreeEdgePool[] newEdgePools=new RegularDegreeEdgePool[newNumPools];
  int[] newPoolDegrees=new int[newNumPools];
  System.arraycopy(readerAccessibleInfo.edgePools,0,newEdgePools,0,readerAccessibleInfo.edgePools.length);
  System.arraycopy(readerAccessibleInfo.poolDegrees,0,newPoolDegrees,0,readerAccessibleInfo.poolDegrees.length);
  readerAccessibleInfo=new ReaderAccessibleInfo(newEdgePools,newPoolDegrees,readerAccessibleInfo.nodeDegrees);
  for (int i=numPools; i < newNumPools; i++) {
    initPool(i);
  }
  numPools=newNumPools;
  currentNumEdgesStored=currentNumEdgesStored;
}

private void addPool ( ) { int newNumPools = ( int ) Math . ceil ( numPools * POOL_GROWTH_FACTOR ) ; numPoolsCounter . incr ( newNumPools - numPools ) ; RegularDegreeEdgePool [ ] newEdgePools = new RegularDegreeEdgePool [ newNumPools ] ; int [ ] newPoolDegrees = new int [ newNumPools ] ; System . arraycopy ( readerAccessibleInfo . edgePools , 0 , newEdgePools , 0 , readerAccessibleInfo . edgePools . length ) ; System . arraycopy ( readerAccessibleInfo . poolDegrees , 0 , newPoolDegrees , 0 , readerAccessibleInfo . poolDegrees . length ) ; readerAccessibleInfo = new ReaderAccessibleInfo ( newEdgePools , newPoolDegrees , readerAccessibleInfo . nodeDegrees ) ; for ( int i = numPools ; i < newNumPools ; i ++ ) { initPool ( i ) ; } numPools = newNumPools ; currentNumEdgesStored = currentNumEdgesStored ; }
synchronization comment : this method works fine without needing synchronization between the writer and the readers due to the wrapping of the arrays in readeraccessibleinfo . see the publication safety comment in readeraccessibleinfo for details .
