summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Grand <christophe@cgrand.net>2009-08-10 18:49:22 +0200
committerRich Hickey <richhickey@gmail.com>2009-08-26 12:02:57 -0400
commit0a7e6eda4d4bcb38048f61e120c333b954b57c25 (patch)
treec34821ac200e3e88012fe3bf1ad21f989d400dce
parent652d53e93309d5cd6e3c7c9c078b1defe2d10c29 (diff)
factory methods use transients
Signed-off-by: Rich Hickey <richhickey@gmail.com>
-rw-r--r--src/jvm/clojure/lang/PersistentHashMap2.java24
1 files changed, 10 insertions, 14 deletions
diff --git a/src/jvm/clojure/lang/PersistentHashMap2.java b/src/jvm/clojure/lang/PersistentHashMap2.java
index 19e98560..1859baa3 100644
--- a/src/jvm/clojure/lang/PersistentHashMap2.java
+++ b/src/jvm/clojure/lang/PersistentHashMap2.java
@@ -37,6 +37,7 @@ package clojure.lang;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.concurrent.atomic.AtomicReference;
/*
@@ -60,29 +61,29 @@ final public static PersistentHashMap2 EMPTY = new PersistentHashMap2(0, null, f
final private static Object NOT_FOUND = new Object();
static public IPersistentMap create(Map other){
- IPersistentMap ret = EMPTY;
+ ITransientMap ret = EMPTY.asTransient();
for(Object o : other.entrySet())
{
Map.Entry e = (Entry) o;
ret = ret.assoc(e.getKey(), e.getValue());
}
- return ret;
+ return ret.persistent();
}
/*
* @param init {key1,val1,key2,val2,...}
*/
public static PersistentHashMap2 create(Object... init){
- IPersistentMap ret = EMPTY;
+ ITransientMap ret = EMPTY.asTransient();
for(int i = 0; i < init.length; i += 2)
{
ret = ret.assoc(init[i], init[i + 1]);
}
- return (PersistentHashMap2) ret;
+ return (PersistentHashMap2) ret.persistent();
}
public static PersistentHashMap2 create(List init){
- IPersistentMap ret = EMPTY;
+ ITransientMap ret = EMPTY.asTransient();
for(Iterator i = init.iterator(); i.hasNext();)
{
Object key = i.next();
@@ -91,30 +92,25 @@ public static PersistentHashMap2 create(List init){
Object val = i.next();
ret = ret.assoc(key, val);
}
- return (PersistentHashMap2) ret;
+ return (PersistentHashMap2) ret.persistent();
}
static public PersistentHashMap2 create(ISeq items){
- IPersistentMap ret = EMPTY;
+ ITransientMap ret = EMPTY.asTransient();
for(; items != null; items = items.next().next())
{
if(items.next() == null)
throw new IllegalArgumentException(String.format("No value supplied for key: %s", items.first()));
ret = ret.assoc(items.first(), RT.second(items));
}
- return (PersistentHashMap2) ret;
+ return (PersistentHashMap2) ret.persistent();
}
/*
* @param init {key1,val1,key2,val2,...}
*/
public static PersistentHashMap2 create(IPersistentMap meta, Object... init){
- IPersistentMap ret = EMPTY.withMeta(meta);
- for(int i = 0; i < init.length; i += 2)
- {
- ret = ret.assoc(init[i], init[i + 1]);
- }
- return (PersistentHashMap2) ret;
+ return create(init).withMeta(meta);
}
PersistentHashMap2(int count, INode root, boolean hasNull, Object nullValue){