//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); } }
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); }
/// <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>()); } }
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); } }
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); }
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); }
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)); }
private int Length() { return((int)CallContext.LogicalGetData(_size)); }