2 // System.Web.SessionState.SessionDictionary
5 // Gonzalo Paniagua Javier (gonzalo@ximian.com)
7 // (C) 2002,2003 Ximian, Inc (http://www.ximian.com)
12 using System.Collections;
13 using System.Collections.Specialized;
15 namespace System.Web.SessionState {
16 internal class SessionDictionary : NameObjectCollectionBase
20 public SessionDictionary ()
24 internal SessionDictionary Clone ()
26 SessionDictionary sess = new SessionDictionary ();
27 int last = sess.Count;
28 for (int i = 0; i < last; i++) {
29 string key = GetKey (i);
30 sess [key] = this [key];
36 internal void Clear ()
43 internal string GetKey (int index)
47 value = BaseGetKey (index);
52 internal static bool IsInmutable (object o)
54 Type t = o.GetType ();
55 return (t == typeof (string) || t.IsPrimitive);
58 internal void Remove (string s)
65 internal void RemoveAt (int index)
72 internal void Serialize (BinaryWriter w)
76 foreach (string key in Keys) {
78 object value = BaseGet (key);
80 w.Write (System.Web.Util.AltSerialization.NullIndex);
84 System.Web.Util.AltSerialization.SerializeByType (w, value);
89 internal static SessionDictionary Deserialize (BinaryReader r)
91 SessionDictionary result = new SessionDictionary ();
92 for (int i = r.ReadInt32 (); i > 0; i--) {
93 string key = r.ReadString ();
94 int index = r.ReadInt32 ();
95 if (index == System.Web.Util.AltSerialization.NullIndex)
98 result [key] = System.Web.Util.AltSerialization.DeserializeFromIndex (index, r);
106 get { return _dirty; }
107 set { _dirty = value; }
110 internal object this [string s]
123 object obj = BaseGet(s);
\r
124 if ((obj == null) && (value == null))
\r
133 public object this [int index]
145 object obj = BaseGet(index);
\r
146 if ((obj == null) && (value == null))
\r
148 BaseSet (index, value);
155 internal byte [] ToByteArray ()
157 MemoryStream stream = null;
159 stream = new MemoryStream ();
160 Serialize (new BinaryWriter (stream));
161 return stream.GetBuffer ();
170 internal static SessionDictionary FromByteArray (byte [] data)
172 SessionDictionary result = null;
173 MemoryStream stream = null;
175 stream = new MemoryStream (data);
176 result = Deserialize (new BinaryReader (stream));