static public IPersistentMap mapUniqueKeys(Object... init){ if(init == null) return PersistentArrayMap.EMPTY; else if(init.length <= PersistentArrayMap.HASHTABLE_THRESHOLD) return new PersistentArrayMap(init); return PersistentHashMap.create(init); }
IPersistentMap createHT(Object[] init){ return PersistentHashMap.create(meta(), init); }
@SuppressWarnings("unchecked") static <K, V> ClojureMap<K, V> create(Object... init) { return (ClojureMap<K, V>) create(PersistentHashMap.create(init)); }
IPersistentMap createHT(Object[] init){ return PersistentHashMap.create(meta(), init); }
public static PersistentHashMap create(IPersistentMap meta, Object... init){ return create(init).withMeta(meta); }
public static PersistentHashMap create(IPersistentMap meta, Object... init){ return create(init).withMeta(meta); }
ITransientMap doAssoc(Object key, Object val){ int i = indexOf(key); if(i >= 0) //already have key, { if(array[i + 1] != val) //no change, no op array[i + 1] = val; } else //didn't have key, grow { if(len >= array.length) return PersistentHashMap.create(array).asTransient().assoc(key, val); array[len++] = key; array[len++] = val; } return this; }
@Override public Result interpret(Environment d, IPersistentMap bindings) { HashMap<Object,Object> hm=new HashMap<Object,Object>(); for (int i=0; i<length; i++) { Result t=keys.get(i).interpret(d, bindings); if (t.isExiting()) return t; Object k=t.getResult(); t=vals.get(i).interpret(d, bindings); if (t.isExiting()) return t; Object v=t.getResult(); hm.put(k, v); } return d.withResult(PersistentHashMap.create(hm)); }
ITransientMap doAssoc(Object key, Object val){ int i = indexOf(key); if(i >= 0) //already have key, { if(array[i + 1] != val) //no change, no op array[i + 1] = val; } else //didn't have key, grow { if(len >= array.length) return PersistentHashMap.create(array).asTransient().assoc(key, val); array[len++] = key; array[len++] = val; } return this; }
public static void pushNS(){ Var.pushThreadBindings(PersistentHashMap.create(Var.intern(Symbol.intern("clojure.core"), Symbol.intern("*ns*")).setDynamic(), null)); }