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