Exemplo n.º 1
0
        //private string CountKey()
        //{
        //    return string.Format("{0}[{1}]", _name, "count");
        //}
        //public int Count()
        //{
        //    var data = CallContext.LogicalGetData(CountKey());
        //    if (data == null) { return 0; }
        //    return (int)data;
        //}
        //private void IncrementCount()
        //{
        //    CallContext.LogicalSetData(CountKey(), Count() + 1);
        //}
        //private void DecrementCount()
        //{
        //    int count = Count();
        //    if (count > 1)
        //    {
        //        CallContext.LogicalSetData(CountKey(), count - 1);
        //    }
        //    else
        //    {
        //        CallContext.FreeNamedDataSlot(CountKey());
        //    }

        //}
        public void AddOrUpdate <T>(string key, Func <T> newDataFunc, Func <T, T> updateDataFunc)
        {
            var name = String.Format("{0}.{1}", _name, key);
            var data = CallContext.LogicalGetData(name);

            if (data == null)
            {
                var newData = newDataFunc();
                if (newData == null)
                {
                    throw new InvalidOperationException("Cannot insert null");
                }
                CallContext.LogicalSetData(name, newData);
                //IncrementCount();
            }
            else
            {
                var updateData = updateDataFunc((T)data);
                if (updateData == null)
                {
                    throw new InvalidOperationException("Cannot update null");
                }
                CallContext.LogicalSetData(name, updateData);
            }
        }
Exemplo n.º 2
0
        public bool Remove(string key)
        {
            var name = String.Format("{0}.{1}", _name, key);
            var data = CallContext.LogicalGetData(name);

            CallContext.FreeNamedDataSlot(name);
            //DecrementCount();
            return(data == null);
        }
Exemplo n.º 3
0
        /// <summary>
        /// Bring back an xml version of the active context data,
        /// a cached version will be brought back under normal
        /// circumstances, and a special un-cached version will be used
        /// </summary>
        public static string SerializeToXML()
        {
            var contextSerialization = (string)CallContext.LogicalGetData(SERIALIZATION_KEY);

            if (contextSerialization == null)
            {
                contextSerialization = SerializeToXML(Keys().GetData());
                CallContext.LogicalSetData(SERIALIZATION_KEY, contextSerialization);
            }
            return(contextSerialization);
        }
        public CallContextSet(string name)
        {
            _name        = name;
            _dataKeyName = String.Format("{0}.{1}", _name, "data");

            var data = CallContext.LogicalGetData(_dataKeyName);

            if (data == null)
            {
                Update(new HashSet <T>());
            }
        }
Exemplo n.º 5
0
        public CallContextStack(string name)
        {
            _name = name;
            _size = String.Format("{0}.{1}", _name, "size");

            var size = CallContext.LogicalGetData(_size);

            if (size == null)
            {
                CallContext.LogicalSetData(_size, 0);
            }
        }
Exemplo n.º 6
0
        public bool TryGetValue(string key, out T data)
        {
            var name      = String.Format("{0}.{1}", _name, key);
            var innerData = CallContext.LogicalGetData(name);

            if (innerData == null)
            {
                data = default(T);
                return(false);
            }
            data = (T)innerData;
            return(true);
        }
Exemplo n.º 7
0
        public bool TryPeek(out T data)
        {
            int len  = Length() - 1;
            var name = IndexName(len);

            var result = CallContext.LogicalGetData(name);

            if (result == null)
            {
                data = default(T);
                return(false);
            }
            data = (T)result;
            return(true);
        }
Exemplo n.º 8
0
        public bool TryRemove(string key, out T result)
        {
            var name = String.Format("{0}.{1}", _name, key);
            var data = CallContext.LogicalGetData(name);

            CallContext.FreeNamedDataSlot(name);
            //DecrementCount();
            if (data == null)
            {
                result = default(T);
                return(false);
            }
            else
            {
                result = (T)data;
                return(true);
            }
        }
 internal HashSet <T> Data()
 {
     return((HashSet <T>)CallContext.LogicalGetData(_dataKeyName));
 }
Exemplo n.º 10
0
 private int Length()
 {
     return((int)CallContext.LogicalGetData(_size));
 }