/** @file ConnectionQueue.java
*
* @author marco corvi
* @date
*
* @brief TopoDroid cosurveying connection queue
* --------------------------------------------------------
* Copyright This sowftare is distributed under GPL-3.0 or later
* See the file COPYING.
* --------------------------------------------------------
*/
package com.topodroid.DistoX;
class ConnectionQueue
{
int mSize;
ConnectionQueueItem mHead;
ConnectionQueueItem mLast;
ConnectionQueue( )
{
mHead = null;
mLast = null;
mSize = 0;
}
ConnectionQueueItem add( byte[] data )
{
mLast = new ConnectionQueueItem( data, mLast );
if ( mHead == null ) {
mHead = mLast;
}
++ mSize;
return mLast;
}
int size() { return mSize; }
void remove( ConnectionQueueItem item )
{
if ( mHead == null ) return;
if ( item == mHead ) {
if ( mLast == mHead ) {
mHead = null;
mLast = null;
} else {
mHead = mHead.next;
mHead.prev = null;
}
-- mSize;
} else if ( item == mLast ) {
mLast = mLast.prev;
mLast.next = null;
-- mSize;
} else {
ConnectionQueueItem temp = mHead.next;
while ( temp != item && temp != null ) temp = temp.next;
if ( temp == null ) return;
temp.prev.next = temp.next;
temp.next.prev = temp.prev;
-- mSize;
}
}
ConnectionQueueItem peek() { return mHead; }
boolean isEmpty() { return mSize <= 0; }
ConnectionQueueItem find( byte id )
{
ConnectionQueueItem temp = mHead;
while ( temp != null ) {
if ( temp.hasId( id ) ) return temp;
temp = temp.next;
}
return null;
}
void clear()
{
ConnectionQueueItem temp = mHead;
mHead = null;
while ( temp != null ) {
ConnectionQueueItem next = temp.next;
temp.prev = null;
temp.next = null;
temp = next;
}
mLast = null;
mSize = 0;
}
}