A persistent vector based on an array. Holds a lazily-allocated PersistentVector if operations such as assoc() are called that require a true persistent collection.
Пример #1
0
 public IPersistentVector resetVals(object newv)
 {
     Validate(newv);
     for (;;)
     {
         object oldv = deref();
         if (_state.CompareAndSet(oldv, newv))
         {
             NotifyWatches(oldv, newv);
             return(LazilyPersistentVector.createOwning(oldv, newv));
         }
     }
 }
Пример #2
0
 public IPersistentVector swapVals(IFn f, object x, object y, ISeq args)
 {
     for (; ;)
     {
         object oldv = deref();
         object newv = f.applyTo(RT.listStar(oldv, x, y, args));
         Validate(newv);
         if (_state.CompareAndSet(oldv, newv))
         {
             NotifyWatches(oldv, newv);
             return(LazilyPersistentVector.createOwning(oldv, newv));
         }
     }
 }
Пример #3
0
 public IPersistentVector swapVals(IFn f, object arg1, object arg2)
 {
     for (; ;)
     {
         object oldv = deref();
         object newv = f.invoke(oldv, arg1, arg2);
         Validate(newv);
         if (_state.CompareAndSet(oldv, newv))
         {
             NotifyWatches(oldv, newv);
             return(LazilyPersistentVector.createOwning(oldv, newv));
         }
     }
 }
Пример #4
0
 protected override object Read(PushbackTextReader r, char leftparen, object opts)
 {
     return(LazilyPersistentVector.create(ReadDelimitedList(']', r, true, opts)));
 }
Пример #5
0
 /// <summary>
 /// Convert to an actual <see cref="IPersistentVector">IPersistentVector</see> with two elements.
 /// </summary>
 /// <returns>An <see cref="IPersistentVector">IPersistentVector</see> with two elements.</returns>
 private IPersistentVector AsVector()
 {
     return(LazilyPersistentVector.createOwning(key(), val()));
 }
Пример #6
0
 /// <summary>
 /// Returns a new stack with the top element popped.
 /// </summary>
 /// <returns>The new stack</returns>
 public override IPersistentStack pop()
 {
     return(LazilyPersistentVector.createOwning(key()));
 }