thisBlock = blockStore.getFreeBlock(); loopDetector.claim(thisBlock); blockStore.setNextBlock(prevBlock, thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.END_OF_CHAIN); nextBlock = blockStore.getNextBlock(thisBlock); buffer = blockStore.createBlockIfNeeded(thisBlock);
public ByteBuffer next() { if(nextBlock == POIFSConstants.END_OF_CHAIN) { throw new IndexOutOfBoundsException("Can't read past the end of the stream"); } try { loopDetector.claim(nextBlock); ByteBuffer data = blockStore.getBlockAt(nextBlock); nextBlock = blockStore.getNextBlock(nextBlock); return data; } catch(IOException e) { throw new RuntimeException(e); } }
protected ChainLoopDetector(long rawSize) { int blkSize = getBlockStoreBlockSize(); int numBlocks = (int)(rawSize / blkSize); if ((rawSize % blkSize) != 0) { numBlocks++; } used_blocks = new boolean[numBlocks]; } protected void claim(int offset) {
private void free(ChainLoopDetector loopDetector) { int nextBlock = startBlock; while(nextBlock != POIFSConstants.END_OF_CHAIN) { int thisBlock = nextBlock; loopDetector.claim(thisBlock); nextBlock = blockStore.getNextBlock(thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.UNUSED_BLOCK); } this.startBlock = POIFSConstants.END_OF_CHAIN; }
int blockSize = blockStore.getBlockStoreBlockSize(); int blocks = (int)Math.ceil( ((double)contents.length) / blockSize ); ChainLoopDetector loopDetector = blockStore.getChainLoopDetector(); thisBlock = blockStore.getFreeBlock(); loopDetector.claim(thisBlock); blockStore.setNextBlock(prevBlock, thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.END_OF_CHAIN); nextBlock = blockStore.getNextBlock(thisBlock); ByteBuffer buffer = blockStore.createBlockIfNeeded(thisBlock); int startAt = i*blockSize; int endAt = Math.min(contents.length - startAt, blockSize); blockStore.setNextBlock(lastBlock, POIFSConstants.END_OF_CHAIN);
StreamBlockByteBuffer() throws IOException { loopDetector = blockStore.getChainLoopDetector(); prevBlock = POIFSConstants.END_OF_CHAIN; nextBlock = startBlock; }
public void close() throws IOException { // If we're overwriting, free any remaining blocks POIFSStream toFree = new POIFSStream(blockStore, nextBlock); toFree.free(loopDetector); // Mark the end of the stream, if we have any data if (prevBlock != POIFSConstants.END_OF_CHAIN) { blockStore.setNextBlock(prevBlock, POIFSConstants.END_OF_CHAIN); } } }
int blockSize = blockStore.getBlockStoreBlockSize(); int blocks = (int)Math.ceil( ((double)contents.length) / blockSize ); ChainLoopDetector loopDetector = blockStore.getChainLoopDetector(); thisBlock = blockStore.getFreeBlock(); loopDetector.claim(thisBlock); blockStore.setNextBlock(prevBlock, thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.END_OF_CHAIN); nextBlock = blockStore.getNextBlock(thisBlock); ByteBuffer buffer = blockStore.createBlockIfNeeded(thisBlock); int startAt = i*blockSize; int endAt = Math.min(contents.length - startAt, blockSize); blockStore.setNextBlock(lastBlock, POIFSConstants.END_OF_CHAIN);
private void free(ChainLoopDetector loopDetector) { int nextBlock = startBlock; while(nextBlock != POIFSConstants.END_OF_CHAIN) { int thisBlock = nextBlock; loopDetector.claim(thisBlock); nextBlock = blockStore.getNextBlock(thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.UNUSED_BLOCK); } this.startBlock = POIFSConstants.END_OF_CHAIN; }
StreamBlockByteBufferIterator(int firstBlock) { this.nextBlock = firstBlock; try { this.loopDetector = blockStore.getChainLoopDetector(); } catch(IOException e) { throw new RuntimeException(e); } }
public void close() throws IOException { // If we're overwriting, free any remaining blocks POIFSStream toFree = new POIFSStream(blockStore, nextBlock); toFree.free(loopDetector); // Mark the end of the stream, if we have any data if (prevBlock != POIFSConstants.END_OF_CHAIN) { blockStore.setNextBlock(prevBlock, POIFSConstants.END_OF_CHAIN); } } }
thisBlock = blockStore.getFreeBlock(); loopDetector.claim(thisBlock); blockStore.setNextBlock(prevBlock, thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.END_OF_CHAIN); nextBlock = blockStore.getNextBlock(thisBlock); buffer = blockStore.createBlockIfNeeded(thisBlock);
private void free(ChainLoopDetector loopDetector) { int nextBlock = startBlock; while(nextBlock != POIFSConstants.END_OF_CHAIN) { int thisBlock = nextBlock; loopDetector.claim(thisBlock); nextBlock = blockStore.getNextBlock(thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.UNUSED_BLOCK); } this.startBlock = POIFSConstants.END_OF_CHAIN; }
public ByteBuffer next() { if(nextBlock == POIFSConstants.END_OF_CHAIN) { throw new IndexOutOfBoundsException("Can't read past the end of the stream"); } try { loopDetector.claim(nextBlock); ByteBuffer data = blockStore.getBlockAt(nextBlock); nextBlock = blockStore.getNextBlock(nextBlock); return data; } catch(IOException e) { throw new RuntimeException(e); } }
/** * Frees all blocks in the stream */ public void free() throws IOException { ChainLoopDetector loopDetector = blockStore.getChainLoopDetector(); free(loopDetector); } private void free(ChainLoopDetector loopDetector) {
protected ChainLoopDetector(long rawSize) { int blkSize = getBlockStoreBlockSize(); int numBlocks = (int)(rawSize / blkSize); if ((rawSize % blkSize) != 0) { numBlocks++; } used_blocks = new boolean[numBlocks]; } protected void claim(int offset) {
private void free(ChainLoopDetector loopDetector) { int nextBlock = startBlock; while(nextBlock != POIFSConstants.END_OF_CHAIN) { int thisBlock = nextBlock; loopDetector.claim(thisBlock); nextBlock = blockStore.getNextBlock(thisBlock); blockStore.setNextBlock(thisBlock, POIFSConstants.UNUSED_BLOCK); } this.startBlock = POIFSConstants.END_OF_CHAIN; }
public ByteBuffer next() { if(nextBlock == POIFSConstants.END_OF_CHAIN) { throw new IndexOutOfBoundsException("Can't read past the end of the stream"); } try { loopDetector.claim(nextBlock); ByteBuffer data = blockStore.getBlockAt(nextBlock); nextBlock = blockStore.getNextBlock(nextBlock); return data; } catch(IOException e) { throw new RuntimeException(e); } }
StreamBlockByteBuffer() throws IOException { loopDetector = blockStore.getChainLoopDetector(); prevBlock = POIFSConstants.END_OF_CHAIN; nextBlock = startBlock; }
protected ChainLoopDetector(long rawSize) { int numBlocks = (int)Math.ceil( rawSize / getBlockStoreBlockSize() ); used_blocks = new boolean[numBlocks]; } protected void claim(int offset) {