| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- /**
- * Namespace: System.Web.UI
- * Class: StateBag
- *
- * Author: Gaurav Vaish
- * Maintainer: [email protected]
- * Implementation: yes
- * Contact: <[email protected]>
- * Status: 100%
- *
- * (C) Gaurav Vaish (2001)
- */
- using System;
- using System.Web;
- using System.Collections;
- using System.Collections.Specialized;
- namespace System.Web.UI
- {
- public sealed class StateBag : IStateManager, IDictionary, ICollection, IEnumerable
- {
- private bool ignoreCase;
- private bool marked;
- private IDictionary bag;
-
- public StateBag(bool ignoreCase)
- {
- Initialize(ignoreCase);
- }
-
- public StateBag()
- {
- Initialize(false);
- }
- private void Initialize(bool ignoreCase)
- {
- this.ignoreCase = ignoreCase;
- marked = false;
- bag = new HybridDictionary(ignoreCase);
- }
-
- public int Count
- {
- get
- {
- return bag.Count;
- }
- }
-
- public object this[object key]
- {
- get
- {
- string sKey = (string)key;
- if(sKey==null || sKey.Length==0)
- throw new ArgumentException(HttpRuntime.FormatResourceString("Key_Cannot_Be_Null"));
- object val = bag[sKey];
- if(val is StateItem)
- return val;
- return null;
- }
- set
- {
- Add((string)key, value);
- }
- }
-
- public ICollection Keys
- {
- get
- {
- return bag.Keys;
- }
- }
-
- public ICollection Values
- {
- get
- {
- return bag.Values;
- }
- }
-
- public StateItem Add(string key, object value)
- {
- if(key == null || key.Length == 0)
- {
- throw new ArgumentException(HttpRuntime.FormatResourceString("Key_Cannot_Be_Null"));
- }
- StateItem val = null;
- if(bag[key] is StateItem)
- val = (StateItem)(bag[key]);
- if(val==null)
- {
- if(value!=null || marked)
- {
- val = new StateItem(value);
- bag.Add(key, val);
- }
-
- } else
- {
- if(value!=null && !marked)
- bag.Remove(key);
- val.Value = value;
- }
- if(val!=null && marked)
- {
- val.IsDirty = true;
- }
- return val;
- }
-
- public void Clear()
- {
- bag.Clear();
- }
-
- public IDictionaryEnumerator GetEnumerator()
- {
- return bag.GetEnumerator();
- }
-
- public bool IsItemDirty(string key)
- {
- object o = bag[key];
- if(o is StateItem)
- return ((StateItem)o).IsDirty;
- return false;
- }
-
- public void Remove(string key)
- {
- bag.Remove(key);
- }
-
- /// <summary>
- /// Undocumented
- /// </summary>
- public void SetItemDirty(string key, bool dirty)
- {
- if(bag[key] is StateItem)
- ((StateItem)bag[key]).IsDirty = dirty;
- }
-
- internal bool IsTrackingViewState
- {
- get
- {
- return marked;
- }
- }
-
- internal void LoadViewState(object state)
- {
- if(state!=null)
- {
- Pair pair = (Pair)state;
- ArrayList keyList = (ArrayList)(pair.First);
- ArrayList valList = (ArrayList)(pair.Second);
- for(int i=0; i < keyList.Count; i++)
- Add((string)keyList[i], valList[i]);
- }
- }
-
- internal object SaveViewState()
- {
- if(bag.Count > 0)
- {
- ArrayList keyList = null, valList = null;
- foreach(IDictionaryEnumerator current in bag)
- {
- StateItem item = (StateItem)current.Value;
- if(item.IsDirty)
- {
- if(keyList==null)
- {
- keyList = new ArrayList();
- valList = new ArrayList();
- }
- keyList.Add(current.Key);
- valList.Add(current.Value);
- }
- }
- if(keyList!=null)
- return new Pair(keyList, valList);
- }
- return null;
- }
-
- internal void TrackViewState()
- {
- marked = true;
- }
-
- IEnumerator IEnumerable.GetEnumerator()
- {
- return GetEnumerator();
- }
-
- void IStateManager.LoadViewState(object savedState)
- {
- LoadViewState(savedState);
- }
-
- object IStateManager.SaveViewState()
- {
- return SaveViewState();
- }
-
- void IStateManager.TrackViewState()
- {
- TrackViewState();
- }
-
- bool IStateManager.IsTrackingViewState
- {
- get
- {
- return IsTrackingViewState;
- }
- }
-
- void ICollection.CopyTo(Array array, int index)
- {
- Values.CopyTo(array, index);
- }
-
- bool ICollection.IsSynchronized
- {
- get
- {
- return false;
- }
- }
-
- object ICollection.SyncRoot
- {
- get
- {
- return this;
- }
- }
-
- void IDictionary.Add(object key, object value)
- {
- Add((string)key, value);
- }
-
- void IDictionary.Remove(object key)
- {
- Remove((string)key);
- }
-
- bool IDictionary.Contains(object key)
- {
- return bag.Contains((string)key);
- }
-
- bool IDictionary.IsFixedSize
- {
- get
- {
- return false;
- }
- }
-
- bool IDictionary.IsReadOnly
- {
- get
- {
- return false;
- }
- }
- }
- }
|