/** * This method should be called prior to adding any component * <code>ByteArray</code> to a composite. * * @param ba The component to add. */ private void addHook(ByteArray ba) { // Check first() is zero, otherwise cursor might not work. // TODO: Remove this restriction? if (ba.first() != 0) { throw new IllegalArgumentException("Cannot add byte array that doesn't start from 0: " + ba.first()); } // Check order. if (order == null) { order = ba.order(); } else if (!order.equals(ba.order())) { throw new IllegalArgumentException("Cannot add byte array with different byte order: " + ba.order()); } }
@Override public void free() { componentFinal.free(); } };
/** * Removes the last node in this list * * @return * The node that was taken off of the list */ public Node removeLast() { Node node = header.getPreviousNode(); lastByte -= node.ba.last(); return removeNode(node); }
return ba.getSingleIoBuffer(); ByteArray ba = firstNode.getByteArray(); if (ba.last() == actualLength) { return ba.getSingleIoBuffer(); IoBuffer bb = target.getSingleIoBuffer(); Cursor cursor = cursor(); ByteArray component = node.getByteArray(); bas.removeLast(); component.free();
componentIndex = last() - componentNode.getByteArray().last(); componentIndex -= componentNode.getByteArray().last(); while (index >= componentIndex + componentNode.getByteArray().length()) { componentIndex += componentNode.getByteArray().last(); componentNode = componentNode.getNextNode(); } else { componentCursor = componentNode.getByteArray().cursor(internalComponentIndex);
ByteArray component = removeFirst(); if (component.last() <= remaining) { remaining -= component.last(); } else { IoBuffer bb = component.getSingleIoBuffer(); remaining -= ba1.last();
@Override protected void cursorPassedFirstComponent() { if ( autoFlush ) { flushTo( cba.first() + cba.getFirst().length() ); } }
/** * {@inheritDoc} */ @Override public void order(ByteOrder order) { if (order == null || !order.equals(this.order)) { this.order = order; if (!bas.isEmpty()) { for (Node node = bas.getFirst(); node.hasNextNode(); node = node.getNextNode()) { node.getByteArray().order(order); } } } }
/** * {@inheritDoc} */ @Override public Iterable<IoBuffer> getIoBuffers() { if (bas.isEmpty()) { return Collections.emptyList(); } Collection<IoBuffer> result = new ArrayList<>(); Node node = bas.getFirst(); for (IoBuffer bb : node.getByteArray().getIoBuffers()) { result.add(bb); } while (node.hasNextNode()) { node = node.getNextNode(); for (IoBuffer bb : node.getByteArray().getIoBuffers()) { result.add(bb); } } return result; }
return ba.getSingleIoBuffer(); ByteArray ba = node.getByteArray(); if ( ba.last() == actualLength ) { return ba.getSingleIoBuffer(); IoBuffer bb = target.getSingleIoBuffer(); Cursor cursor = cursor(); ByteArray component = node.getByteArray(); bas.removeLast(); component.free();
componentIndex = last() - componentNode.getByteArray().last(); componentIndex -= componentNode.getByteArray().last(); while (index >= componentIndex + componentNode.getByteArray().length()) { componentIndex += componentNode.getByteArray().last(); componentNode = componentNode.getNextNode(); } else { componentCursor = componentNode.getByteArray().cursor(internalComponentIndex);
ByteArray component = removeFirst(); if (component.last() <= remaining) { remaining -= component.last(); } else { IoBuffer bb = component.getSingleIoBuffer(); remaining -= ba1.last();
@Override protected void cursorPassedFirstComponent() { if (autoFlush) { flushTo(cba.first() + cba.getFirst().length()); } }
/** * @inheritDoc */ public void order( ByteOrder order ) { if ( order == null || !order.equals( this.order ) ) { this.order = order; if ( !bas.isEmpty() ) { for ( Node node = bas.getFirst(); node.hasNextNode(); node = node.getNextNode() ) { node.getByteArray().order( order ); } } } }
/** * @inheritDoc */ public Iterable<IoBuffer> getIoBuffers() { if ( bas.isEmpty() ) { return Collections.emptyList(); } Collection<IoBuffer> result = new ArrayList<>(); Node node = bas.getFirst(); for ( IoBuffer bb : node.getByteArray().getIoBuffers() ) { result.add( bb ); } while ( node.hasNextNode() ) { node = node.getNextNode(); for ( IoBuffer bb : node.getByteArray().getIoBuffers() ) { result.add( bb ); } } return result; }
return ba.getSingleIoBuffer(); ByteArray ba = firstNode.getByteArray(); if (ba.last() == actualLength) { return ba.getSingleIoBuffer(); IoBuffer bb = target.getSingleIoBuffer(); Cursor cursor = cursor(); ByteArray component = node.getByteArray(); bas.removeLast(); component.free();
componentIndex = last() - componentNode.getByteArray().last(); if ( listener != null ) componentIndex -= componentNode.getByteArray().last(); if ( listener != null ) while ( index >= componentIndex + componentNode.getByteArray().length() ) componentIndex += componentNode.getByteArray().last(); componentNode = componentNode.getNextNode(); if ( listener != null ) componentCursor = componentNode.getByteArray().cursor( internalComponentIndex );