annotate Main/jungle-main/persistent/msgpack/src/MsgPackReader.cs @ 20:1f99e150f336

fix folder and add Object Mapper.
author Kazuma Takeda
date Thu, 15 Dec 2016 22:52:48 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
1 //
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
2 // Copyright 2011 Kazuki Oikawa
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
3 //
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
4 // Licensed under the Apache License, Version 2.0 (the "License");
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
5 // you may not use this file except in compliance with the License.
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
6 // You may obtain a copy of the License at
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
7 //
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
8 // http://www.apache.org/licenses/LICENSE-2.0
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
9 //
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
10 // Unless required by applicable law or agreed to in writing, software
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
11 // distributed under the License is distributed on an "AS IS" BASIS,
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
13 // See the License for the specific language governing permissions and
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
14 // limitations under the License.
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
15 //
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
16
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
17 using System;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
18 using System.IO;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
19 using System.Text;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
20
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
21 namespace MsgPack
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
22 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
23 public class MsgPackReader
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
24 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
25 Stream _strm;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
26 byte[] _tmp0 = new byte[8];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
27 byte[] _tmp1 = new byte[8];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
28
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
29 Encoding _encoding = Encoding.UTF8;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
30 //Decoder _decoder = Encoding.UTF8.GetDecoder ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
31 byte[] _buf = new byte[64];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
32
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
33 public MsgPackReader (Stream strm)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
34 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
35 _strm = strm;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
36 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
37
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
38 public TypePrefixes Type { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
39
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
40 public bool ValueBoolean { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
41 public uint Length { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
42
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
43 public uint ValueUnsigned { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
44 public ulong ValueUnsigned64 { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
45
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
46 public int ValueSigned { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
47 public long ValueSigned64 { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
48
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
49 public float ValueFloat { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
50 public double ValueDouble { get; private set; }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
51
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
52 public bool IsSigned ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
53 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
54 return this.Type == TypePrefixes.NegativeFixNum ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
55 this.Type == TypePrefixes.PositiveFixNum ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
56 this.Type == TypePrefixes.Int8 ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
57 this.Type == TypePrefixes.Int16 ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
58 this.Type == TypePrefixes.Int32;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
59 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
60
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
61 public bool IsBoolean ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
62 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
63 return this.Type == TypePrefixes.True || this.Type == TypePrefixes.False;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
64 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
65
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
66 public bool IsSigned64 ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
67 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
68 return this.Type == TypePrefixes.Int64;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
69 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
70
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
71 public bool IsUnsigned ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
72 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
73 return this.Type == TypePrefixes.PositiveFixNum ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
74 this.Type == TypePrefixes.UInt8 ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
75 this.Type == TypePrefixes.UInt16 ||
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
76 this.Type == TypePrefixes.UInt32;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
77 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
78
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
79 public bool IsUnsigned64 ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
80 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
81 return this.Type == TypePrefixes.UInt64;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
82 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
83
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
84 public bool IsRaw ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
85 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
86 return this.Type == TypePrefixes.FixRaw || this.Type == TypePrefixes.Raw16 || this.Type == TypePrefixes.Raw32;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
87 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
88
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
89 public bool IsArray ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
90 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
91 return this.Type == TypePrefixes.FixArray || this.Type == TypePrefixes.Array16 || this.Type == TypePrefixes.Array32;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
92 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
93
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
94 public bool IsMap ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
95 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
96 return this.Type == TypePrefixes.FixMap || this.Type == TypePrefixes.Map16 || this.Type == TypePrefixes.Map32;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
97 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
98
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
99 public bool Read ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
100 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
101 byte[] tmp0 = _tmp0, tmp1 = _tmp1;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
102 int x = _strm.ReadByte ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
103 if (x < 0)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
104 return false; // EOS
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
105
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
106 if (x >= 0x00 && x <= 0x7f) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
107 this.Type = TypePrefixes.PositiveFixNum;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
108 } else if (x >= 0xe0 && x <= 0xff) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
109 this.Type = TypePrefixes.NegativeFixNum;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
110 } else if (x >= 0xa0 && x <= 0xbf) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
111 this.Type = TypePrefixes.FixRaw;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
112 } else if (x >= 0x90 && x <= 0x9f) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
113 this.Type = TypePrefixes.FixArray;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
114 } else if (x >= 0x80 && x <= 0x8f) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
115 this.Type = TypePrefixes.FixMap;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
116 } else {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
117 this.Type = (TypePrefixes)x;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
118 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
119
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
120 switch (this.Type) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
121 case TypePrefixes.Nil:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
122 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
123 case TypePrefixes.False:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
124 ValueBoolean = false;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
125 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
126 case TypePrefixes.True:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
127 ValueBoolean = true;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
128 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
129 case TypePrefixes.Float:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
130 _strm.Read (tmp0, 0, 4);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
131 if (BitConverter.IsLittleEndian) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
132 tmp1[0] = tmp0[3];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
133 tmp1[1] = tmp0[2];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
134 tmp1[2] = tmp0[1];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
135 tmp1[3] = tmp0[0];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
136 ValueFloat = BitConverter.ToSingle (tmp1, 0);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
137 } else {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
138 ValueFloat = BitConverter.ToSingle (tmp0, 0);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
139 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
140 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
141 case TypePrefixes.Double:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
142 _strm.Read (tmp0, 0, 8);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
143 if (BitConverter.IsLittleEndian) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
144 tmp1[0] = tmp0[7];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
145 tmp1[1] = tmp0[6];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
146 tmp1[2] = tmp0[5];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
147 tmp1[3] = tmp0[4];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
148 tmp1[4] = tmp0[3];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
149 tmp1[5] = tmp0[2];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
150 tmp1[6] = tmp0[1];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
151 tmp1[7] = tmp0[0];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
152 ValueDouble = BitConverter.ToDouble (tmp1, 0);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
153 } else {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
154 ValueDouble = BitConverter.ToDouble (tmp0, 0);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
155 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
156 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
157 case TypePrefixes.NegativeFixNum:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
158 ValueSigned = (x & 0x1f) - 0x20;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
159 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
160 case TypePrefixes.PositiveFixNum:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
161 ValueSigned = x & 0x7f;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
162 ValueUnsigned = (uint)ValueSigned;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
163 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
164 case TypePrefixes.UInt8:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
165 x = _strm.ReadByte ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
166 if (x < 0)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
167 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
168 ValueUnsigned = (uint)x;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
169 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
170 case TypePrefixes.UInt16:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
171 if (_strm.Read (tmp0, 0, 2) != 2)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
172 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
173 ValueUnsigned = ((uint)tmp0[0] << 8) | (uint)tmp0[1];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
174 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
175 case TypePrefixes.UInt32:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
176 if (_strm.Read (tmp0, 0, 4) != 4)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
177 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
178 ValueUnsigned = ((uint)tmp0[0] << 24) | ((uint)tmp0[1] << 16) | ((uint)tmp0[2] << 8) | (uint)tmp0[3];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
179 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
180 case TypePrefixes.UInt64:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
181 if (_strm.Read (tmp0, 0, 8) != 8)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
182 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
183 ValueUnsigned64 = ((ulong)tmp0[0] << 56) | ((ulong)tmp0[1] << 48) | ((ulong)tmp0[2] << 40) | ((ulong)tmp0[3] << 32) | ((ulong)tmp0[4] << 24) | ((ulong)tmp0[5] << 16) | ((ulong)tmp0[6] << 8) | (ulong)tmp0[7];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
184 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
185 case TypePrefixes.Int8:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
186 x = _strm.ReadByte ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
187 if (x < 0)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
188 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
189 ValueSigned = (sbyte)x;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
190 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
191 case TypePrefixes.Int16:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
192 if (_strm.Read (tmp0, 0, 2) != 2)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
193 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
194 ValueSigned = (short)((tmp0[0] << 8) | tmp0[1]);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
195 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
196 case TypePrefixes.Int32:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
197 if (_strm.Read (tmp0, 0, 4) != 4)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
198 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
199 ValueSigned = (tmp0[0] << 24) | (tmp0[1] << 16) | (tmp0[2] << 8) | tmp0[3];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
200 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
201 case TypePrefixes.Int64:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
202 if (_strm.Read (tmp0, 0, 8) != 8)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
203 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
204 ValueSigned64 = ((long)tmp0[0] << 56) | ((long)tmp0[1] << 48) | ((long)tmp0[2] << 40) | ((long)tmp0[3] << 32) | ((long)tmp0[4] << 24) | ((long)tmp0[5] << 16) | ((long)tmp0[6] << 8) | (long)tmp0[7];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
205 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
206 case TypePrefixes.FixRaw:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
207 Length = (uint)(x & 0x1f);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
208 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
209 case TypePrefixes.FixArray:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
210 case TypePrefixes.FixMap:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
211 Length = (uint)(x & 0xf);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
212 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
213 case TypePrefixes.Raw16:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
214 case TypePrefixes.Array16:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
215 case TypePrefixes.Map16:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
216 if (_strm.Read (tmp0, 0, 2) != 2)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
217 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
218 Length = ((uint)tmp0[0] << 8) | (uint)tmp0[1];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
219 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
220 case TypePrefixes.Raw32:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
221 case TypePrefixes.Array32:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
222 case TypePrefixes.Map32:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
223 if (_strm.Read (tmp0, 0, 4) != 4)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
224 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
225 Length = ((uint)tmp0[0] << 24) | ((uint)tmp0[1] << 16) | ((uint)tmp0[2] << 8) | (uint)tmp0[3];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
226 break;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
227 default:
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
228 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
229 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
230 return true;
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
231 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
232
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
233 public int ReadValueRaw (byte[] buf, int offset, int count)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
234 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
235 return _strm.Read (buf, offset, count);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
236 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
237
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
238 public string ReadRawString ()
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
239 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
240 return ReadRawString (_buf);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
241 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
242
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
243 public string ReadRawString (byte[] buf)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
244 {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
245 if (this.Length < buf.Length) {
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
246 if (ReadValueRaw (buf, 0, (int)this.Length) != this.Length)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
247 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
248 return _encoding.GetString (buf, 0, (int)this.Length);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
249 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
250
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
251 // Poor implementation
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
252 byte[] tmp = new byte[(int)this.Length];
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
253 if (ReadValueRaw (tmp, 0, tmp.Length) != tmp.Length)
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
254 throw new FormatException ();
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
255 return _encoding.GetString (tmp);
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
256 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
257 }
1f99e150f336 fix folder and add Object Mapper.
Kazuma Takeda
parents:
diff changeset
258 }