try to fix some minor dropdown bugs
[potlatch2.git] / org / idmedia / as3commons / util / Collections.as
1 /*
2  * Copyright the original author or authors.
3  * 
4  * Licensed under the MOZILLA PUBLIC LICENSE, Version 1.1 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  * 
8  *      http://www.mozilla.org/MPL/MPL-1.1.html
9  * 
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package org.idmedia.as3commons.util {
17   
18   /**
19    * This class consists exclusively of static methods that operate on or return
20    * collections.  It contains polymorphic algorithms that operate on
21    * collections, "wrappers", which return a new collection backed by a
22    * specified collection, and a few other odds and ends.
23    *
24    * <p>The methods of this class all throw a <tt>NullPointerException</tt>
25    * if the collections or class objects provided to them are null.
26    *
27    * @author sleistner
28    */
29   public class Collections {
30     
31     function Collections() {
32     }
33     
34     /**
35      * Sorts the specified list according to the order induced by the
36      * specified comparator.  All elements in the list must be <i>mutually
37      * comparable</i> using the specified comparator (that is,
38      * <tt>c.compare(e1, e2)</tt> must not throw a <tt>ClassCastException</tt>
39      * for any elements <tt>e1</tt> and <tt>e2</tt> in the list).<p>
40      *
41      * This sort is guaranteed to be <i>stable</i>:  equal elements will
42      * not be reordered as a result of the sort.<p>
43      *
44      * The sorting algorithm is a modified mergesort (in which the merge is
45      * omitted if the highest element in the low sublist is less than the
46      * lowest element in the high sublist).  This algorithm offers guaranteed
47      * n log(n) performance. 
48      *
49      * The specified list must be modifiable, but need not be resizable.
50      * This implementation dumps the specified list into an array, sorts
51      * the array, and iterates over the list resetting each element
52      * from the corresponding position in the array.  This avoids the
53      * n<sup>2</sup> log(n) performance that would result from attempting
54      * to sort a linked list in place.
55      *
56      * @param  list the list to be sorted.
57      * @param  c the comparator to determine the order of the list.  A
58      *        <tt>null</tt> value indicates that the elements' <i>natural
59      *        ordering</i> should be used.
60      * @throws UnsupportedOperationException if the specified list's
61      *         list-iterator does not support the <tt>set</tt> operation.
62      * @see org.idmedia.as3commons.util.Comparator
63      */
64     public static function sort(list:List, c:Comparator):void {
65       var a:Array = list.toArray();
66       Arrays.sort(a, c);
67       var i:ListIterator = list.listIterator();
68       for(var j:uint = 0;j < a.length; j++) {
69         i.next();
70         i.setValue(a[j]);
71       }
72     }
73   }
74 }