[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