/*******************************************************************************
* Copyright (c) 2010 protos software gmbh (http://www.protos.de).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
package org.eclipse.etrice.runtime.java.messaging;
/**
* A simple message queue implementing a linked list.
* This queue is not thread safe.
*
* @author Thomas Schuetz
*
*/
public class MessageSeQueue extends RTObject{
private Message first = null;
private Message last = null;
private long highWaterMark = 0;
private long size = 0;
public MessageSeQueue(IRTObject parent, String name) {
super(parent, name);
}
public void push(Message msg){
// TODO: optimize queue for concurrent push / pop
if (first == null) {
first = last = msg;
}
else {
last.setNext(msg);
last = msg;
}
if (++size > highWaterMark)
highWaterMark++;
}
public Message pop(){
// TODO: optimize queue for concurrent push / pop
Message pop_msg = first;
if(first == null){
return first;
}
if (first.getNext()==null){
first = last = null;
}
else {
first = first.getNext();
}
pop_msg.setNext(null);
size--;
return pop_msg;
}
public long getSize() {
return size;
}
public Message getFirst(){
return first;
}
public Message getLast(){
return last;
}
public boolean isNotEmpty(){
return last != null;
}
public long getHightWaterMark() {
return highWaterMark;
}
}