From 83e262186da502fecc79d6851815260770d7e3a6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Leif=20=C3=85strand?= Date: Tue, 5 Feb 2013 11:41:04 +0200 Subject: [PATCH] Add native generic collection counterparts (#10937) Also update existing FastStringSet to learn some new tricks. Change-Id: I3dfcb935d32eb3d490c4f7ff31296a326bd0d98f --- .../src/com/vaadin/client/FastStringMap.java | 74 +++++++++++++++++++ .../src/com/vaadin/client/FastStringSet.java | 29 ++++++++ .../src/com/vaadin/client/JsArrayObject.java | 42 +++++++++++ 3 files changed, 145 insertions(+) create mode 100644 client/src/com/vaadin/client/FastStringMap.java create mode 100644 client/src/com/vaadin/client/JsArrayObject.java diff --git a/client/src/com/vaadin/client/FastStringMap.java b/client/src/com/vaadin/client/FastStringMap.java new file mode 100644 index 0000000000..cbb61427d2 --- /dev/null +++ b/client/src/com/vaadin/client/FastStringMap.java @@ -0,0 +1,74 @@ +/* + * Copyright 2012 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.client; + +import com.google.gwt.core.client.JavaScriptObject; +import com.google.gwt.core.client.JsArrayString; + +public final class FastStringMap extends JavaScriptObject { + + protected FastStringMap() { + // JSO constructor + } + + public native void put(String key, T value) + /*-{ + this[key] = value; + }-*/; + + public native T get(String key) + /*-{ + return this[key]; + }-*/; + + public native boolean containsKey(String key) + /*-{ + //Can't use this.hasOwnProperty in case that key is used + return Object.hasOwnProperty.call(this, key); + }-*/; + + public native void remove(String key) + /*-{ + delete this[key]; + }-*/; + + public native JsArrayString getKeys() + /*-{ + var keys = []; + for(var key in this) { + if (Object.hasOwnProperty.call(this, key)) { + keys.push(key); + } + } + return keys; + }-*/; + + public native int size() + /*-{ + var size = 0; + for(var key in this) { + if (Object.hasOwnProperty.call(this, key)) { + size++; + } + } + return size; + }-*/; + + public static FastStringMap create() { + return JavaScriptObject.createObject().cast(); + } +} diff --git a/client/src/com/vaadin/client/FastStringSet.java b/client/src/com/vaadin/client/FastStringSet.java index 8b930291d4..a36aa9bfef 100644 --- a/client/src/com/vaadin/client/FastStringSet.java +++ b/client/src/com/vaadin/client/FastStringSet.java @@ -15,6 +15,8 @@ */ package com.vaadin.client; +import java.util.Collection; + import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.core.client.JsArrayString; @@ -40,6 +42,15 @@ public final class FastStringSet extends JavaScriptObject { } }-*/; + public native void addAll(FastStringSet set) + /*-{ + for(var string in set) { + if (Object.hasOwnProperty.call(set, string)) { + this[string] = true; + } + } + }-*/; + public native JsArrayString dump() /*-{ var array = []; @@ -69,4 +80,22 @@ public final class FastStringSet extends JavaScriptObject { public static FastStringSet create() { return JavaScriptObject.createObject().cast(); } + + public native void addAllTo(Collection target) + /*-{ + for(var string in this) { + if (Object.hasOwnProperty.call(this, string)) { + target.@java.util.Collection::add(Ljava/lang/Object;)(string); + } + } + }-*/; + + public native void removeAll(FastStringSet valuesToRemove) + /*-{ + for(var string in valuesToRemove) { + if (Object.hasOwnProperty.call(valuesToRemove, string)) { + delete this[string]; + } + } + }-*/; } \ No newline at end of file diff --git a/client/src/com/vaadin/client/JsArrayObject.java b/client/src/com/vaadin/client/JsArrayObject.java new file mode 100644 index 0000000000..182b68ac3f --- /dev/null +++ b/client/src/com/vaadin/client/JsArrayObject.java @@ -0,0 +1,42 @@ +/* + * Copyright 2012 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package com.vaadin.client; + +import com.google.gwt.core.client.JavaScriptObject; + +public final class JsArrayObject extends JavaScriptObject { + + protected JsArrayObject() { + // JSO constructor + } + + public native void add(T value) + /*-{ + this.push(value); + }-*/; + + public native int size() + /*-{ + return this.length; + }-*/; + + public native T get(int i) + /*-{ + return this[i]; + }-*/; + +} -- 2.39.5