On Tuesday 28 October 2008 17:41, xor at freenetproject.org wrote:
> Author: xor
> Date: 2008-10-28 17:41:52 +0000 (Tue, 28 Oct 2008)
> New Revision: 23153
> 
> Modified:
>    trunk/plugins/FMSPlugin/FMSBoard.java
> Log:
> Implementation.
> 
> Modified: trunk/plugins/FMSPlugin/FMSBoard.java
> ===================================================================
> --- trunk/plugins/FMSPlugin/FMSBoard.java     2008-10-28 13:41:14 UTC (rev 
23152)
> +++ trunk/plugins/FMSPlugin/FMSBoard.java     2008-10-28 17:41:52 UTC (rev 
23153)
> @@ -3,14 +3,27 @@
>   * http://www.gnu.org/ for further details of the GPL. */
>  package plugins.FMSPlugin;
>  
> +import java.util.Collections;
> +import java.util.Hashtable;
>  import java.util.Iterator;
> +import java.util.LinkedList;
> +import java.util.NoSuchElementException;
>  
> +import freenet.keys.FreenetURI;
> +
>  /**
>   * @author xor
>   *
>   */
>  public class FMSBoard {
>  
> +     private final FMSBoard self = this;
> +     /*
> +      * FIXME: We need a datastructure which is a HashTable and a LinkedList 
which is sorted by Date of the messages.
> +      * java.util.LinkedHashSet is the right thing but it does not provide 
sorting. 
> +      */
> +     private final Hashtable<FreenetURI, FMSMessage> mMessages = new 
HashTable<FreenetURI, FMSMessage>();
> +     private final LinkedList<FMSMessage> mMessagesSorted = new 
LinkedList<FMSMessage>();

Does LinkedList? Only because you add stuff at the right end. LinkedHashSet 
can do the same thing, and can be used to implement LRU's for example. Read 
the docs more carefully.

>       private final FMSMessageManager mMessageManager;
>       private final String mName;
>       private String mDescription;
> @@ -19,6 +32,7 @@
>               if(newName==null || newName.isEmpty())
>                       throw new IllegalArgumentException("Empty board name.");
>               
> +
>               assert(newMessageManager != null);
>               mMessageManager = newMessageManager;
>               // FIXME: Remove anything dangerous from name and description.
> @@ -53,8 +67,32 @@
>        * @param identity The identity viewing the board.
>        * @return An iterator of the message which the identity will see 
> (based 
on its trust levels).
>        */
> -     public Iterator<FMSMessage> messageIterator(FMSOwnIdentity identity) {
> -             return mMessageManager.messageIterator(identity);
> +     public synchronized Iterator<FMSMessage> messageIterator(final 
FMSOwnIdentity identity) {
> +             return new Iterator<FMSMessage>() {
> +                     private final FMSOwnIdentity mIdentity = identity;
> +                     private Iterator<FMSMessage> iter = 
> self.mMessagesSorted.iterator();
> +                     private FMSMessage next = iter.hasNext() ? iter.next() 
> : null;
> +
> +                     public boolean hasNext() {
> +                             for(; next != null; next = iter.hasNext() ? 
> iter.next() : null)
> +                             {
> +                                     
> if(mIdentity.wantsMessagesFrom(identity))
> +                                             return true;
> +                             }
> +                             return false;
> +                     }
> +
> +                     public FMSMessage next() {
> +                             FMSMessage result = hasNext() ? next : null;
> +                             next = iter.hasNext() ? iter.next() : null;
> +                             return result;
> +                     }
> +
> +                     public void remove() {
> +                             throw new UnsupportedOperationException();
> +                     }
> +                     
> +             }
>       }
>       
>  }
> 
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
> 
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 827 bytes
Desc: not available
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20081028/cace92bd/attachment.pgp>

Reply via email to