[jboss-cvs] JBoss Messaging SVN: r1994 - in trunk/src/main/org/jboss/messaging/util: prioritylinkedlist and 1 other directory.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jan 19 14:13:32 EST 2007
Author: timfox
Date: 2007-01-19 14:13:31 -0500 (Fri, 19 Jan 2007)
New Revision: 1994
Added:
trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/
trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/BasicPriorityLinkedList.java
trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedList.java
trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedListIterator.java
Log:
Missing files
Added: trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/BasicPriorityLinkedList.java
===================================================================
--- trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/BasicPriorityLinkedList.java (rev 0)
+++ trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/BasicPriorityLinkedList.java 2007-01-19 19:13:31 UTC (rev 1994)
@@ -0,0 +1,198 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.messaging.util.prioritylinkedlist;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * A basic priority linked list
+ *
+ * It implements this by maintaining an
+ * individual LinkedList for each priority level.
+ *
+ * @author <a href="mailto:tim.fox at jboss.com>Tim Fox</a>
+ * @version <tt>$Revision: 1174 $</tt>
+ *
+ * $Id: BasicPrioritizedDeque.java 1174 2006-08-02 14:14:32Z timfox $
+ */
+public class BasicPriorityLinkedList implements PriorityLinkedList
+{
+ protected LinkedList[] linkedLists;
+
+ protected int priorities;
+
+ protected int size;
+
+ public BasicPriorityLinkedList(int priorities)
+ {
+ this.priorities = priorities;
+
+ initDeques();
+ }
+
+ public void addFirst(Object obj, int priority)
+ {
+ linkedLists[priority].addFirst(obj);
+
+ size++;
+ }
+
+ public void addLast(Object obj, int priority)
+ {
+ linkedLists[priority].addLast(obj);
+
+ size++;
+ }
+
+ public Object removeFirst()
+ {
+ Object obj = null;
+
+
+ //Initially we are just using a simple prioritization algorithm:
+ //Highest priority refs always get returned first.
+ //This could cause starvation of lower priority refs.
+
+ //TODO - A better prioritization algorithm
+
+ for (int i = priorities - 1; i >= 0; i--)
+ {
+ LinkedList ll = linkedLists[i];
+
+ if (!ll.isEmpty())
+ {
+ obj = ll.removeFirst();
+ break;
+ }
+
+ }
+
+ if (obj != null)
+ {
+ size--;
+ }
+
+ return obj;
+ }
+
+ public Object removeLast()
+ {
+ Object obj = null;
+
+ //Initially we are just using a simple prioritization algorithm:
+ //Lowest priority refs always get returned first.
+
+ //TODO - A better prioritization algorithm
+
+ for (int i = 0; i < priorities; i++)
+ {
+ LinkedList ll = linkedLists[i];
+ if (!ll.isEmpty())
+ {
+ obj = ll.removeLast();
+ }
+ if (obj != null)
+ {
+ break;
+ }
+ }
+
+ if (obj != null)
+ {
+ size--;
+ }
+
+ return obj;
+ }
+
+ public Object peekFirst()
+ {
+ Object obj = null;
+
+ //Initially we are just using a simple prioritization algorithm:
+ //Highest priority refs always get returned first.
+ //This could cause starvation of lower priority refs.
+
+ //TODO - A better prioritization algorithm
+
+ for (int i = priorities - 1; i >= 0; i--)
+ {
+ LinkedList ll = linkedLists[i];
+ if (!ll.isEmpty())
+ {
+ obj = ll.getFirst();
+ }
+ if (obj != null)
+ {
+ break;
+ }
+ }
+
+ return obj;
+ }
+
+ public List getAll()
+ {
+ List all = new ArrayList();
+ for (int i = priorities - 1; i >= 0; i--)
+ {
+ LinkedList deque = linkedLists[i];
+ all.addAll(deque);
+ }
+ return all;
+ }
+
+ public void clear()
+ {
+ initDeques();
+ }
+
+ public int size()
+ {
+ return size;
+ }
+
+ public boolean isEmpty()
+ {
+ return size == 0;
+ }
+
+ public ListIterator iterator()
+ {
+ return new PriorityLinkedListIterator(linkedLists);
+ }
+
+ protected void initDeques()
+ {
+ linkedLists = new LinkedList[priorities];
+ for (int i = 0; i < priorities; i++)
+ {
+ linkedLists[i] = new LinkedList();
+ }
+
+ size = 0;
+ }
+
+}
Added: trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedList.java
===================================================================
--- trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedList.java (rev 0)
+++ trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedList.java 2007-01-19 19:13:31 UTC (rev 1994)
@@ -0,0 +1,57 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+
+package org.jboss.messaging.util.prioritylinkedlist;
+
+import java.util.List;
+import java.util.ListIterator;
+
+/**
+ * A type of linked list which maintains items according to a priority
+ *
+ * @author <a href="mailto:tim.fox at jboss.com>Tim Fox</a>
+ * @version <tt>$Revision: 1174 $</tt>
+ *
+ * $Id: PrioritizedDeque.java 1174 2006-08-02 14:14:32Z timfox $
+ */
+public interface PriorityLinkedList
+{
+ void addFirst(Object obj, int priority);
+
+ void addLast(Object obj, int priority);
+
+ Object removeFirst();
+
+ Object removeLast();
+
+ Object peekFirst();
+
+ List getAll();
+
+ void clear();
+
+ int size();
+
+ ListIterator iterator();
+
+ boolean isEmpty();
+}
Added: trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedListIterator.java
===================================================================
--- trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedListIterator.java (rev 0)
+++ trunk/src/main/org/jboss/messaging/util/prioritylinkedlist/PriorityLinkedListIterator.java 2007-01-19 19:13:31 UTC (rev 1994)
@@ -0,0 +1,117 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.messaging.util.prioritylinkedlist;
+
+import java.util.LinkedList;
+import java.util.ListIterator;
+import java.util.NoSuchElementException;
+
+/**
+ *
+ * A PriorityLinkedListIterator
+ *
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @version <tt>$Revision: 1.1 $</tt>
+ *
+ * $Id$
+ *
+ */
+class PriorityLinkedListIterator implements ListIterator
+{
+ private LinkedList[] lists;
+
+ private int index;
+
+ private ListIterator currentIter;
+
+ PriorityLinkedListIterator(LinkedList[] lists)
+ {
+ this.lists = lists;
+
+ index = lists.length - 1;
+
+ currentIter = lists[index].listIterator();
+ }
+
+ public void add(Object arg0)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean hasNext()
+ {
+ if (currentIter.hasNext())
+ {
+ return true;
+ }
+ while (index >= 0)
+ {
+ if (index == 0 || currentIter.hasNext())
+ {
+ break;
+ }
+ index--;
+ currentIter = lists[index].listIterator();
+ }
+ return currentIter.hasNext();
+ }
+
+ public boolean hasPrevious()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object next()
+ {
+ if (!hasNext())
+ {
+ throw new NoSuchElementException();
+ }
+ return currentIter.next();
+ }
+
+ public int nextIndex()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public Object previous()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public int previousIndex()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+ public void remove()
+ {
+ currentIter.remove();
+ }
+
+ public void set(Object obj)
+ {
+ throw new UnsupportedOperationException();
+ }
+
+}
More information about the jboss-cvs-commits
mailing list