static public Associative assoc(Object coll, Object key, Object val){ if(coll == null) return new PersistentArrayMap(new Object[]{key, val}); return ((Associative) coll).assoc(key, val); }
public final TBox getThreadBinding(){ if(threadBound.get()) { IMapEntry e = dvals.get().bindings.entryAt(this); if(e != null) return (TBox) e.val(); } return null; }
public boolean isBound(){ return hasRoot() || (threadBound.get() && dvals.get().bindings.containsKey(this)); }
public static void pushThreadBindings(Associative bindings){ Frame f = dvals.get(); Associative bmap = f.bindings; for(ISeq bs = bindings.seq(); bs != null; bs = bs.next()) { IMapEntry e = (IMapEntry) bs.first(); Var v = (Var) e.key(); if(!v.dynamic) throw new IllegalStateException(String.format("Can't dynamically bind non-dynamic var: %s/%s", v.ns, v.sym)); v.validate(v.getValidator(), e.val()); v.threadBound.set(true); bmap = bmap.assoc(v, new TBox(Thread.currentThread(), e.val())); } dvals.set(new Frame(bmap, f)); }
public static Associative getThreadBindings(){ Frame f = dvals.get(); IPersistentMap ret = PersistentHashMap.EMPTY; for(ISeq bs = f.bindings.seq(); bs != null; bs = bs.next()) { IMapEntry e = (IMapEntry) bs.first(); Var v = (Var) e.key(); TBox b = (TBox) e.val(); ret = ret.assoc(v, b.val); } return ret; }
@Override public Object valAt(Object key) { return ((Associative) map).valAt(key); }
public static void pushThreadBindings(Associative bindings){ Frame f = dvals.get(); Associative bmap = f.bindings; for(ISeq bs = bindings.seq(); bs != null; bs = bs.next()) { IMapEntry e = (IMapEntry) bs.first(); Var v = (Var) e.key(); if(!v.dynamic) throw new IllegalStateException(String.format("Can't dynamically bind non-dynamic var: %s/%s", v.ns, v.sym)); v.validate(v.getValidator(), e.val()); v.threadBound.set(true); bmap = bmap.assoc(v, new TBox(Thread.currentThread(), e.val())); } dvals.set(new Frame(bmap, f)); }
@Override public Object valAt(Object key, Object notFound) { return ((Associative) map).valAt(key, notFound); }
static public Associative assoc(Object coll, Object key, Object val){ if(coll == null) return new PersistentArrayMap(new Object[]{key, val}); return ((Associative) coll).assoc(key, val); }
@Override public IMapEntry entryAt(Object key) { return ((Associative) map).entryAt(key); }
public boolean isBound(){ return hasRoot() || (threadBound.get() && dvals.get().bindings.containsKey(this)); }
private Associative applyBindings(final Map<String, Object> bindings, Associative mappings) { if (bindings != null) { final Set<Entry<String, Object>> entrySet = bindings.entrySet(); for (final Entry<String, Object> entry : entrySet) { final Symbol symbol = Symbol.intern(entry.getKey()); final Namespace userNs = Namespace.findOrCreate(Symbol.create("user".intern())); final Var var = Var.intern(userNs, symbol); var.setDynamic(true); mappings = mappings.assoc(var, entry.getValue()); } } return mappings; }
static public Object find(Object coll, Object key){ if(coll == null) return null; else if(coll instanceof Associative) return ((Associative) coll).entryAt(key); else { Map m = (Map) coll; if(m.containsKey(key)) return new MapEntry(key, m.get(key)); return null; } }
static public Object contains(Object coll, Object key){ if(coll == null) return F; else if(coll instanceof Associative) return ((Associative) coll).containsKey(key) ? T : F; else if(coll instanceof IPersistentSet) return ((IPersistentSet) coll).contains(key) ? T : F; else if(coll instanceof Map) { Map m = (Map) coll; return m.containsKey(key) ? T : F; } else if(coll instanceof Set) { Set s = (Set) coll; return s.contains(key) ? T : F; } else if(key instanceof Number && (coll instanceof String || coll.getClass().isArray())) { int n = ((Number) key).intValue(); return n >= 0 && n < count(coll); } else if(Protocol.satisfiesILookup(coll)) return Protocol.bridgeILookupContains(coll, key); throw new IllegalArgumentException("contains? not supported on type: " + coll.getClass().getName()); }
private Associative applyBindings(final Map<String, Object> bindings, Associative mappings) { if (bindings != null) { final Set<Entry<String, Object>> entrySet = bindings.entrySet(); for (final Entry<String, Object> entry : entrySet) { final Symbol symbol = Symbol.intern(entry.getKey()); final Namespace userNs = Namespace.findOrCreate(Symbol .create("user".intern())); final Var var = Var.intern(userNs, symbol); mappings = mappings.assoc(var, entry.getValue()); } } return mappings; }
public final TBox getThreadBinding(){ if(threadBound.get()) { IMapEntry e = dvals.get().bindings.entryAt(this); if(e != null) return (TBox) e.val(); } return null; }