static Guid NewSession(Associative bindings) { var newGuid = Guid.NewGuid(); _sessions.GetOrAdd(newGuid, bindings); return(newGuid); }
public void AssociativeDotAssocWorks() { Dictionary <int, string> d = new Dictionary <int, string>(); d[1] = "a"; d[2] = "b"; IPersistentMap m = PersistentArrayMap.create(d); Associative a = (Associative)m; Associative a1 = a.assoc(3, "c"); Associative a2 = a.assoc(2, "c"); Expect(a.count(), EqualTo(2)); Expect(a.valAt(1), EqualTo("a")); Expect(a.valAt(2), EqualTo("b")); Expect(a.containsKey(3), False); Expect(a1.count(), EqualTo(3)); Expect(a1.valAt(1), EqualTo("a")); Expect(a1.valAt(2), EqualTo("b")); Expect(a1.valAt(3), EqualTo("c")); Expect(a2.count(), EqualTo(2)); Expect(a2.valAt(1), EqualTo("a")); Expect(a2.valAt(2), EqualTo("c")); Expect(a2.containsKey(3), False); }
public Operator(char name, MathFunction func, int param, int precedence, Associative assoc) { Name = name; Function = func; Precevendce = precedence; Assoc = assoc; Parameters = param; }
public void AssocWithNumericKeyInRangeChangesValue() { //This just checks that APersistentVector.assoc calls CPV.assocN CPV v = new CPV(new object[] { 4, 5, 6 }); Associative a = v.assoc(1, 10); Expect(a.valAt(0), EqualTo(4)); Expect(a.valAt(1), EqualTo(10)); Expect(a.valAt(2), EqualTo(6)); Expect(a.count(), EqualTo(3)); }
public void AssocWithNumericKeyOnePastEndAddValue() { //This just checks that APersistentVector.assoc calls CPV.assocN CPV v = new CPV(new object[] { 4, 5, 6 }); Associative a = v.assoc(3, 10); Expect(a.valAt(0)).To.Equal(4); Expect(a.valAt(1)).To.Equal(5); Expect(a.valAt(2)).To.Equal(6); Expect(a.valAt(3)).To.Equal(10); Expect(a.count()).To.Equal(4); }
/// <summary> /// Push a new frame of bindings onto the binding stack. /// </summary> /// <param name="bindings">The new bindings.</param> /// <remarks>Lowercase name for core.clj compatability.</remarks> public static void pushThreadBindings(Associative bindings) { Frame f = CurrentFrame; Associative bmap = f.Bindings; for (ISeq bs = bindings.seq(); bs != null; bs = bs.next()) { IMapEntry e = (IMapEntry)bs.first(); Var v = (Var)e.key(); v.Validate(e.val()); v._count.incrementAndGet(); bmap = bmap.assoc(v, new Box(e.val())); } CurrentFrame = new Frame(bindings, bmap, f); }
public static void pushThreadBindings(Associative bindings) { Frame f = CurrentFrame; 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 InvalidOperationException(String.Format("Can't dynamically bind non-dynamic var: {0}/{1}", v.Namespace, v.Symbol)); } v.Validate(e.val()); v._threadBound.set(true); bmap = bmap.assoc(v, new TBox(Thread.CurrentThread, e.val())); } CurrentFrame = new Frame(bmap, f); }
public void AssocWithNumericKeyOutOfRangeLowThrowsException() { //This just checks that APersistentVector.assoc calls CPV.assocN CPV v = new CPV(new object[] { 4, 5, 6 }); Associative a = v.assoc(-1, 10); }
public void AssocWithNonNumericKeyThrowsException() { CPV v = new CPV(new object[] { 4, 5, 6 }); Associative a = v.assoc("a", 7); }
static Associative UpdateSession(Guid session, Associative newBindings) { return(_sessions.AddOrUpdate(session, newBindings, (guid, associative) => newBindings)); }
/// <summary> /// Construct a frame on the stack. /// </summary> /// <param name="frameBindings">The bindings for this frame only.</param> /// <param name="bindings">Bindings all the way down the stack.</param> /// <param name="prev">The previous frame.</param> public Frame(Associative bindings, Frame prev) { //_frameBindings = frameBindings; _bindings = bindings; _prev = prev; }
/// <summary> /// Adds a math operator to the evaluation engine. /// </summary> /// <param name="op">Operator Name. Case insensitiv</param> /// <param name="func">Function that returns a double and take a List<double> as input</param> /// <param name="func">Precedence (2 = +-, 3 = */%, 4 = ^)</param> /// <param name="func">Associative, Left or Right</param> public void AddOperator(char op, MathFunction func, int Parameters = 2, int Precedence = 2, Associative associative = Associative.LEFT) { if (TokenTypes().ContainsKey(op)) { throw new MathOperatorException("Unable to add operators named '(', ')' or ','"); } MathOperators.AddOperator(char.ToLower(op), func, Parameters, Precedence, associative); }
public void AddOperator(char name, MathFunction func, int parameters = 2, int precedence = 2, Associative assoc = Associative.LEFT) { Operator op = new Operator(name, func, parameters, precedence, assoc); operators.Add(name, op); }
/// <summary> /// Construct a frame on the stack. /// </summary> /// <param name="frameBindings">The bindings for this frame only.</param> /// <param name="bindings">Bindings all the way down the stack.</param> /// <param name="prev">The previous frame.</param> public Frame( Associative bindings, Frame prev) { //_frameBindings = frameBindings; _bindings = bindings; _prev = prev; }
public static void pushThreadBindings(Associative bindings) { Frame f = CurrentFrame; 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 InvalidOperationException(String.Format("Can't dynamically bind non-dynamic var: {0}/{1}", v.Namespace, v.Symbol)); v.Validate(e.val()); v._threadBound.set(true); bmap = bmap.assoc(v, new TBox(Thread.CurrentThread,e.val())); } CurrentFrame = new Frame(bmap, f); }
public void AddOperator(char name, MathFunction func, int parameters = 2, int precedence = 2, Associative assoc = Associative.Left) { if (new[] { '(', ')', ',' }.Contains(name)) { throw new MathOperatorException("Unable to add operators named '(', ')' or ','"); } var op = new Operator(name, func, parameters, precedence, assoc); Operators.Add(name, op); }