]> source.dussan.org Git - gwtquery.git/commitdiff
use the same "unique()" method in SelectorEngine and GQuery, this eliminates the...
authorManolo Carrasco <manolo@apache.org>
Sat, 29 May 2010 07:32:55 +0000 (07:32 +0000)
committerManolo Carrasco <manolo@apache.org>
Sat, 29 May 2010 07:32:55 +0000 (07:32 +0000)
gwtquery-core/src/main/java/com/google/gwt/query/client/GQuery.java
gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineImpl.java
gwtquery-core/src/main/java/com/google/gwt/query/client/impl/SelectorEngineSizzle.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQueryCoreTest.java
gwtquery-core/src/test/java/com/google/gwt/query/client/GQuerySelectorsTest.java

index fa339dbd86c7ab68486487bbeda143596866eeaa..c310065a4807694878e806086a472c2ee1b6f3f9 100644 (file)
@@ -20,8 +20,8 @@ import static com.google.gwt.query.client.Events.Events;
 \r
 import com.google.gwt.core.client.GWT;\r
 import com.google.gwt.core.client.JavaScriptObject;\r
+import com.google.gwt.core.client.JsArray;\r
 import com.google.gwt.core.client.JsArrayString;\r
-import com.google.gwt.dom.client.BodyElement;\r
 import com.google.gwt.dom.client.ButtonElement;\r
 import com.google.gwt.dom.client.Document;\r
 import com.google.gwt.dom.client.Element;\r
@@ -39,6 +39,7 @@ import com.google.gwt.query.client.css.Percentage;
 import com.google.gwt.query.client.css.TakesLength;\r
 import com.google.gwt.query.client.css.TakesPercentage;\r
 import com.google.gwt.query.client.impl.DocumentStyleImpl;\r
+import com.google.gwt.query.client.impl.SelectorEngineImpl;\r
 import com.google.gwt.user.client.DOM;\r
 import com.google.gwt.user.client.Event;\r
 import com.google.gwt.user.client.Window;\r
@@ -135,41 +136,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     }-*/;\r
   }\r
 \r
-  private static final class FastSet extends JavaScriptObject {\r
-\r
-    public static FastSet create() {\r
-      return JavaScriptObject.createObject().cast();\r
-    }\r
-\r
-    protected FastSet() {\r
-    }\r
-\r
-    public void add(Object o) {\r
-      add0(o.hashCode());\r
-    }\r
-\r
-    public boolean contains(Object o) {\r
-      return contains0(o.hashCode());\r
-    }\r
-\r
-    public void remove(Object o) {\r
-      remove0(o.hashCode());\r
-    }\r
-\r
-    private native void add0(int hc) /*-{\r
-      this[hc]=true;\r
-    }-*/;\r
-\r
-    private native boolean contains0(int hc) /*-{\r
-      return this[hc] || false;\r
-    }-*/;\r
-\r
-    private native void remove0(int hc) /*-{\r
-      delete this[hc];\r
-    }-*/;\r
-  }\r
-\r
-  private static final class Queue<T> extends JavaScriptObject {\r
+  public static final class Queue<T> extends JavaScriptObject {\r
 \r
     public static Queue newInstance() {\r
       return createArray().cast();\r
@@ -2029,16 +1996,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
    * only works on arrays of DOM elements, not strings or numbers.\r
    */\r
   public JSArray unique(JSArray result) {\r
-    FastSet f = FastSet.create();\r
-    JSArray ret = JSArray.create();\r
-    for (int i = 0; i < result.getLength(); i++) {\r
-      Element e = result.getElement(i);\r
-      if (!f.contains(e)) {\r
-        f.add(e);\r
-        ret.addNode(e);\r
-      }\r
-    }\r
-    return ret;\r
+    return SelectorEngineImpl.unique(result.<JsArray<Element>>cast()).cast();\r
   }\r
 \r
   /**\r
@@ -2396,7 +2354,7 @@ public class GQuery implements Lazy<GQuery, LazyGQuery> {
     return n.getChildNodes().cast();\r
   }\r
 \r
-  private <S> Object data(Element item, String name, S value) {\r
+  protected <S> Object data(Element item, String name, S value) {\r
     if (dataCache == null) {\r
       windowData = JavaScriptObject.createObject().cast();\r
       dataCache = JavaScriptObject.createObject().cast();\r
index 49ca99ce9057d5e2a64199e7a3d6ca3a82e737df..4e5a1a711df3f4f2ff2c32e489fdcec0ad9ee9e5 100644 (file)
  */\r
 package com.google.gwt.query.client.impl;\r
 \r
+import java.util.HashSet;\r
+\r
+import com.google.gwt.core.client.JavaScriptObject;\r
+import com.google.gwt.core.client.JsArray;\r
 import com.google.gwt.dom.client.Element;\r
 import com.google.gwt.dom.client.Node;\r
 import com.google.gwt.dom.client.NodeList;\r
@@ -131,4 +135,17 @@ public abstract class SelectorEngineImpl {
    * @return a list of matched nodes\r
    */\r
   public abstract NodeList<Element> select(String selector, Node ctx);\r
+\r
+  public static JsArray<Element> unique(JsArray<Element> a) {\r
+    JsArray<Element> ret = JavaScriptObject.createArray().cast();\r
+    HashSet<Integer> f = new HashSet<Integer>();\r
+    for (int i = 0; i < a.length(); i++) {\r
+      Element e = a.get(i);\r
+      if (!f.contains(e.hashCode())) {\r
+        f.add(e.hashCode());\r
+        ret.push(e);\r
+      }\r
+    }    \r
+    return ret;\r
+  }\r
 }\r
index 3149f3bece473e6bac905591aad0f0a2f205e8d9..57af82778e9fc6be46a50cdff50d699d1c1a1fe3 100644 (file)
@@ -15,7 +15,6 @@
  */
 package com.google.gwt.query.client.impl;
 
-import java.util.HashSet;
 
 import com.google.gwt.core.client.JavaScriptObject;
 import com.google.gwt.core.client.JsArray;
@@ -630,19 +629,6 @@ public class SelectorEngineSizzle extends SelectorEngineImpl {
     return @com.google.gwt.query.client.impl.SelectorEngineSizzle::filter(Ljava/lang/String;Lcom/google/gwt/core/client/JsArray;ZLjava/lang/Object;)( later, tmpSet, false );
   }-*/;   
    
-  public static JsArray<Element> unique(JsArray<Element> a) {
-    JsArray<Element> ret = JavaScriptObject.createArray().cast();
-    HashSet<Integer> f = new HashSet<Integer>();
-    for (int i = 0; i < a.length(); i++) {
-      Element e = a.get(i);
-      if (!f.contains(e.hashCode())) {
-        f.add(e.hashCode());
-        ret.push(e);
-      }
-    }    
-    return ret;
-  }
-  
   private static native JsArray<Element> select(String selector, Node context, JsArray<Element> results, JsArray<Element> seed) /*-{
     results = results || [];
     var origContext = context = context || document;
index 4e275a855ca172a59c411140ee767c7ffcba8fe4..82ec76946e5a63802555b537e9a15809acc32441 100644 (file)
@@ -20,6 +20,8 @@ import static com.google.gwt.query.client.GQuery.$$;
 
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.junit.client.GWTTestCase;
+import com.google.gwt.query.client.impl.SelectorEngineImpl;
+import com.google.gwt.query.client.impl.SelectorEngineSizzle;
 import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.HTML;
 import com.google.gwt.user.client.ui.RootPanel;
@@ -556,6 +558,20 @@ public class GQueryCoreTest extends GWTTestCase {
     assertEquals(2, $("p", e).slice(0, -1).size());
     assertEquals(0, $("p", e).slice(3, 2).size());
   }
+
+  public void testUnique() {
+    SelectorEngineImpl selSizz = new SelectorEngineSizzle();
+    GQuery g = $(e).html("<div><p></p><p></p><span></span><p></p>");
+    JSArray a;
+    a = selSizz.select("p", e).cast();
+    assertEquals(3, a.getLength());
+    a.addNode(a.getNode(0));
+    a.addNode(a.getNode(3));
+    assertEquals(5 , a.getLength());
+    a = g.unique(a);
+    assertEquals(3, a.getLength());
+  }
+  
   public void testWrapMethod() {
     String content = "<p>Test Paragraph.</p>";
     String wrapper = "<div id=\"content\">Content</div>";
index 17182d0c0e6400fce71ebd24fcc2b967cd93d2d6..057679e5faed7ee86484ff1cbd4a64ab595f811d 100644 (file)
@@ -18,6 +18,7 @@ package com.google.gwt.query.client;
 import static com.google.gwt.query.client.GQuery.$;
 
 import com.google.gwt.core.client.GWT;
+import com.google.gwt.core.client.JsArray;
 import com.google.gwt.dom.client.Document;
 import com.google.gwt.dom.client.Element;
 import com.google.gwt.dom.client.Node;
@@ -269,6 +270,23 @@ public class GQuerySelectorsTest extends GWTTestCase {
     assertEquals("branchB target", selectors.target().text());
   }
   
+  public void testUnique() {
+    SelectorEngineImpl selSizz = new SelectorEngineSizzle();
+    $(e).html(getTestContent());
+    
+    JsArray<Element> a;
+    a = selSizz.select("p", e).cast();
+    int n = a.length();
+    assertTrue(n > 300);
+    for (int i=0; i<n; i++) {
+      a.push(a.get(i));
+    }
+    assertEquals(n * 2 , a.length());
+    a = SelectorEngineImpl.unique(a);
+    assertEquals(n, a.length());
+  }
+  
+  
   private void assertArrayContains(Object result, Object... array) {
     assertArrayContains("", result, array);
   }