Exemplo n.º 1
0
        ///// <summary>
        ///// I was having a hard day.
        ///// </summary>
        ///// <returns></returns>
        //public string DebugStr()
        //{
        //    StringBuilder sb = new StringBuilder();
        //    sb.Append("<Ref ");
        //    sb.Append(Id);
        //    sb.Append(", ");
        //    if (_tinfo == null)
        //        sb.Append("NO");
        //    else
        //        sb.AppendFormat("{0} {1}", _tinfo.Status.get(), _tinfo.StartPoint);
        //    sb.Append(", ");
        //    if (_tvals == null)
        //        sb.Append("TVals: NO");
        //    else
        //    {
        //        sb.Append("TVals: ");
        //        TVal t = _tvals;
        //        do
        //        {
        //            sb.Append(t.Point);
        //            sb.Append(" ");
        //        } while ((t = t.Prior) != _tvals);
        //    }
        //    sb.Append(">");
        //    return sb.ToString();
        //}

        #endregion

        #region IDeref Members

        /// <summary>
        /// Gets the (immutable) value the reference is holding.
        /// </summary>
        /// <returns>The value</returns>
        public override object deref()
        {
            LockingTransaction t = LockingTransaction.getRunning();

            if (t == null)
            {
                object ret = currentVal();
                //Console.WriteLine("Thr {0}, {1}: No-trans get => {2}", Thread.CurrentThread.ManagedThreadId,DebugStr(), ret);
                return(ret);
            }
            return(t.doGet(this, _tvals));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Change to a computed value.
        /// </summary>
        /// <param name="fn">The function to apply to the current state and additional arguments.</param>
        /// <param name="args">Additional arguments.</param>
        /// <returns>The computed value.</returns>
        public object alter(IFn fn, ISeq args)
        {
            LockingTransaction t = LockingTransaction.getEx();

            return(t.doSet(this, fn.applyTo(RT.cons(t.doGet(this, _tvals), args))));
        }