* TransportHeaders.cs: Added Serializable attribute.
[mono.git] / mcs / class / corlib / System.Runtime.Serialization / Formatter.cs
1 //
2 // System.Runtime.Serialization.Formatter.cs
3 //
4 // Duncan Mak  (duncan@ximian.com)
5 //
6 // (C) Ximian, Inc.
7 //
8
9 using System;
10 using System.Collections;
11 using System.IO;
12
13 namespace System.Runtime.Serialization
14 {
15 [CLSCompliant (false)]
16 [Serializable]
17 public abstract class Formatter : IFormatter
18 {
19         protected Formatter ()
20         {
21         }
22         
23         protected ObjectIDGenerator m_idGenerator;
24         protected Queue m_objectQueue;
25
26         public abstract SerializationBinder Binder {
27                 get;
28                 set;
29         }
30
31         public abstract StreamingContext Context {
32                 get;
33                 set;
34         }
35
36         public abstract ISurrogateSelector SurrogateSelector {
37                 get;
38                 set;
39         }
40
41         public abstract object Deserialize (Stream serializationStream);
42
43         [MonoTODO]
44         protected virtual object GetNext (out long objID)
45         {
46                 throw new NotImplementedException ();
47         }
48
49         [MonoTODO]
50         protected virtual long Schedule (object obj)
51         {
52                 throw new NotImplementedException ();
53         }
54
55         public abstract void Serialize (Stream serializationStream, object graph);
56          
57         protected abstract void WriteArray (object obj, string name, Type memberType);
58          
59         protected abstract void WriteBoolean (bool val, string name);
60          
61         protected abstract void WriteByte (byte val, string name);
62          
63         protected abstract void WriteChar (char val, string name);
64          
65         protected abstract void WriteDateTime (DateTime val, string name);
66
67         protected abstract void WriteDecimal (Decimal val, string name);
68
69         protected abstract void WriteDouble (double val, string name);
70
71         protected abstract void WriteInt16 (short val, string name);
72
73         protected abstract void WriteInt32 (int val, string name);
74
75         protected abstract void WriteInt64 (long val, string name);
76
77         [MonoTODO]
78         protected virtual void WriteMember (string memberName, object data)
79         {
80                 throw new NotImplementedException ();
81         }
82
83         protected abstract void WriteObjectRef (object obj, string name, Type memberType);
84
85
86         [CLSCompliant (false)]
87         protected abstract void WriteSByte (sbyte val, string name);
88
89
90         protected abstract void WriteSingle (float val, string name);
91         
92         protected abstract void WriteTimeSpan (TimeSpan val, string name);
93
94         [CLSCompliant (false)]
95         protected abstract void WriteUInt16 (ushort val, string name);
96
97         [CLSCompliant (false)]
98         protected abstract void WriteUInt32 (uint val, string name);
99
100         [CLSCompliant (false)]
101         protected abstract void WriteUInt64 (ulong val, string name);
102
103         protected abstract void WriteValueType (object obj, string name, Type memberType);      
104 }
105 }