/* * Javolution - Java(TM) Solution for Real-Time and Embedded Systems * Copyright (C) 2005 - Javolution (http://javolution.org/) * All rights reserved. * * Permission to use, copy, modify, and distribute this software is * freely granted, provided that this notice is preserved. */ package j2me.nio; /** * Clean-room implementation of Buffer to support * <code>javolution.util.Struct</code> when <code>java.nio</code> is * not available. */ public abstract class Buffer { final int _capacity; int _limit; int _position; int _mark; Buffer(int capacity, int limit, int position, int mark) { _capacity = capacity; _limit = limit; _position = position; _mark = mark; } public final int capacity() { return _capacity; } public final Buffer clear() { _limit = _capacity; _position = 0; _mark = -1; return this; } public final Buffer flip() { _limit = _position; _position = 0; _mark = -1; return this; } public final boolean hasRemaining() { return _limit - _position > 0; } public boolean isReadOnly() { return false; } public final int limit() { return _limit; } public final Buffer limit(int newLimit) { if ((newLimit < 0) || (newLimit > _capacity)) { throw new IllegalArgumentException(); } if (newLimit < _mark) { _mark = -1; } if (_position > newLimit) { _position = newLimit; } _limit = newLimit; return this; } public final Buffer mark() { _mark = _position; return this; } public final int position() { return _position; } public final Buffer position(int newPosition) { if ((newPosition < 0) || (newPosition > _limit)) { throw new IllegalArgumentException(); } if (newPosition <= _mark) { _mark = -1; } _position = newPosition; return this; } public final int remaining() { return _limit - _position; } public final Buffer reset() { if (_mark == -1) { throw new InvalidMarkException(); } _position = _mark; return this; } public final Buffer rewind() { _position = 0; _mark = -1; return this; } }