@Override public E get(long index, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException, ClassNotFoundException { long elementsCount = indexStrategy.getSize(indexFile); if(index >= 0 && index < elementsCount) { long offset = indexStrategy.getOffset(indexFile, index); if(offset < 0) { return null; } return internalReadElement(dataFile, offset, codec); } return null; }
@Override public void add(E element, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException { long elementsCount = indexStrategy.getSize(indexFile); long offset = dataFile.length(); internalWriteElement(dataFile, offset, element, codec); indexStrategy.setOffset(indexFile, elementsCount, offset); }
@Override public boolean set(long index, E element, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException, UnsupportedOperationException { long offset = indexStrategy.getOffset(indexFile, index); if(!supportingOverwrite && offset >= 0) { return false; } if(element != null) { offset = dataFile.length(); internalWriteElement(dataFile, offset, index, element, codec); indexStrategy.setOffset(indexFile, index, offset); return true; } else { // set offset to -1 to signal a null value. indexStrategy.setOffset(indexFile, index, -1); return true; } }
@Override public long getSize() { if(!indexFile.canRead()) { return 0; } Throwable throwable; Lock lock = readWriteLock.readLock(); lock.lock(); // FindBugs "Multithreaded correctness - Method does not release lock on all exception paths" is a false positive try(RandomAccessFile raf = new RandomAccessFile(indexFile, "r")) { return indexStrategy.getSize(raf); } catch(Throwable e) { throwable = e; } finally { lock.unlock(); } // it's a really bad idea to log while locked *sigh* if(logger.isDebugEnabled()) logger.debug("Couldn't retrieve size!", throwable); return 0; }
@Override public boolean set(long index, E element, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException, UnsupportedOperationException { long offset = indexStrategy.getOffset(indexFile, index); if(!supportingOverwrite && offset >= 0) { return false; } if(element != null) { offset = dataFile.length(); internalWriteElement(dataFile, offset, index, element, codec); indexStrategy.setOffset(indexFile, index, offset); return true; } else { // set offset to -1 to signal a null value. indexStrategy.setOffset(indexFile, index, -1); return true; } }
@Override public long getSize() { if(!indexFile.canRead()) { return 0; } Throwable throwable; Lock lock = readWriteLock.readLock(); lock.lock(); // FindBugs "Multithreaded correctness - Method does not release lock on all exception paths" is a false positive try(RandomAccessFile raf = new RandomAccessFile(indexFile, "r")) { return indexStrategy.getSize(raf); } catch(Throwable e) { throwable = e; } finally { lock.unlock(); } // it's a really bad idea to log while locked *sigh* if(logger.isDebugEnabled()) logger.debug("Couldn't retrieve size!", throwable); return 0; }
@Override public void add(E element, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException { long elementsCount = indexStrategy.getSize(indexFile); long offset = dataFile.length(); internalWriteElement(dataFile, offset, elementsCount, element, codec); indexStrategy.setOffset(indexFile, elementsCount, offset); }
@Override public E get(long index, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException, ClassNotFoundException { long elementsCount = indexStrategy.getSize(indexFile); if(index >= 0 && index < elementsCount) { long offset = indexStrategy.getOffset(indexFile, index); if(offset < 0) { return null; } return internalReadElement(dataFile, offset, codec); } return null; }
return indexStrategy.getSize(randomAccessIndexFile);
@Override public void add(E element, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException { long elementsCount = indexStrategy.getSize(indexFile); long offset = dataFile.length(); internalWriteElement(dataFile, offset, elementsCount, element, codec); indexStrategy.setOffset(indexFile, elementsCount, offset); }
@Override public E get(long index, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException, ClassNotFoundException { long elementsCount = indexStrategy.getSize(indexFile); if(index >= 0 && index < elementsCount) { long offset = indexStrategy.getOffset(indexFile, index); if(offset < 0) { return null; } return internalReadElement(dataFile, offset, codec); } return null; }
return indexStrategy.getSize(randomAccessIndexFile);
@Override public void add(E element, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException { long elementsCount = indexStrategy.getSize(indexFile); long offset = dataFile.length(); internalWriteElement(dataFile, offset, element, codec); indexStrategy.setOffset(indexFile, elementsCount, offset); }
@Override public E get(long index, RandomAccessFile indexFile, RandomAccessFile dataFile, Codec<E> codec, IndexStrategy indexStrategy) throws IOException, ClassNotFoundException { long elementsCount = indexStrategy.getSize(indexFile); if(index >= 0 && index < elementsCount) { long offset = indexStrategy.getOffset(indexFile, index); if(offset < 0) { return null; } return internalReadElement(dataFile, offset, codec); } return null; }