Exemplo n.º 1
0
        public static void Pop(ILoggingContext context)
        {
            var frameID = GetFrameID(context);

            var frame = new LoggingCallContextStackFrame(frameID);

            if (!frame.Deactivate())
            {
                return;
            }

            using (var keySet = Keys().GetEditor())
            {
                foreach (var key in frame.Keys)
                {
                    var activeFrameData = new LoggingCallContextActiveFrameData(key);

                    LoggingCallContextStackFrame currentFrame;
                    while (activeFrameData.TryGetFrame(out currentFrame) &&
                           !currentFrame.IsActive())
                    {
                        currentFrame.FreeKey(key);

                        if (!activeFrameData.Pop())
                        {
                            keySet.Remove(key);
                            break;
                        }
                    }
                }

                CallContext.LogicalSetData(SERIALIZATION_KEY, SerializeToXML(keySet.DataStore()));
            }
        }
Exemplo n.º 2
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.º 3
0
        public void Push(T data)
        {
            int len  = Length();
            var name = IndexName(len);

            CallContext.LogicalSetData(name, data);
            CallContext.LogicalSetData(_size, len + 1);
        }
Exemplo n.º 4
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.º 5
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.º 7
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.º 8
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.º 9
0
        public bool Pop()
        {
            var len = Length();

            if (len <= 0)
            {
                return(false);
            }
            len = len - 1;

            CallContext.FreeNamedDataSlot(IndexName(len));
            CallContext.LogicalSetData(_size, len);
            return(true);
        }
Exemplo n.º 10
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.º 11
0
        public static ILoggingContext Push(IEnumerable <KeyValuePair <string, object> > data)
        {
            var context = new LoggingContext();
            var frame   = LoggingCallContextStackFrame.Initialize(context, data);

            using (var keySet = Keys().GetEditor())
            {
                foreach (var key in frame.Keys)
                {
                    LoggingCallContextActiveFrameData.Initialize(frame, key);
                    keySet.Add(key);
                }

                CallContext.LogicalSetData(SERIALIZATION_KEY, SerializeToXML(keySet.DataStore()));
            }

            return(context);
        }
Exemplo n.º 12
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 void Update(HashSet <T> newData)
 {
     CallContext.LogicalSetData(_dataKeyName, newData);
 }
 internal HashSet <T> Data()
 {
     return((HashSet <T>)CallContext.LogicalGetData(_dataKeyName));
 }
Exemplo n.º 15
0
 private int Length()
 {
     return((int)CallContext.LogicalGetData(_size));
 }