Mercurial > hg > Database > jungle-sharp
annotate src/main/csharp/jp.ac.u-ryukyu.ie.cr/jungle-main/persistent/msgpack/src/CompiledPacker.cs @ 17:01a08cf4b2d9
Liq Files
author | Kazuma |
---|---|
date | Mon, 07 Nov 2016 01:05:24 +0900 |
parents | abe0c247f5a5 |
children |
rev | line source |
---|---|
10
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
1 // |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
2 // Copyright 2011 Kazuki Oikawa |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
3 // |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
4 // Licensed under the Apache License, Version 2.0 (the "License"); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
5 // you may not use this file except in compliance with the License. |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
6 // You may obtain a copy of the License at |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
7 // |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
8 // http://www.apache.org/licenses/LICENSE-2.0 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
9 // |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
10 // Unless required by applicable law or agreed to in writing, software |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
11 // distributed under the License is distributed on an "AS IS" BASIS, |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
13 // See the License for the specific language governing permissions and |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
14 // limitations under the License. |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
15 // |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
16 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
17 using System; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
18 using System.Collections.Generic; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
19 using System.IO; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
20 using System.Reflection; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
21 using System.Reflection.Emit; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
22 using System.Threading; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
23 using MsgPack.Compiler; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
24 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
25 namespace MsgPack |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
26 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
27 public class CompiledPacker |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
28 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
29 static PackerBase _publicFieldPacker, _allFieldPacker; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
30 PackerBase _packer; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
31 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
32 static CompiledPacker () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
33 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
34 _publicFieldPacker = new MethodBuilderPacker (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
35 _allFieldPacker = new DynamicMethodPacker (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
36 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
37 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
38 public CompiledPacker () : this (false) {} |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
39 public CompiledPacker (bool packPrivateField) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
40 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
41 _packer = (packPrivateField ? _allFieldPacker : _publicFieldPacker); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
42 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
43 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
44 public void Prepare<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
45 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
46 _packer.CreatePacker<T> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
47 _packer.CreateUnpacker<T> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
48 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
49 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
50 #region Generics Pack/Unpack Methods |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
51 public byte[] Pack<T> (T o) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
52 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
53 using (MemoryStream ms = new MemoryStream ()) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
54 Pack<T> (ms, o); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
55 return ms.ToArray (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
56 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
57 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
58 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
59 public void Pack<T> (Stream strm, T o) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
60 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
61 _packer.CreatePacker<T> () (new MsgPackWriter (strm), o); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
62 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
63 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
64 public T Unpack<T> (byte[] buf) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
65 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
66 return Unpack<T> (buf, 0, buf.Length); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
67 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
68 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
69 public T Unpack<T> (byte[] buf, int offset, int size) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
70 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
71 using (MemoryStream ms = new MemoryStream (buf, offset, size)) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
72 return Unpack<T> (ms); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
73 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
74 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
75 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
76 public T Unpack<T> (Stream strm) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
77 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
78 return _packer.CreateUnpacker<T> () (new MsgPackReader (strm)); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
79 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
80 #endregion |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
81 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
82 #region Non-generics Pack/Unpack Methods |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
83 public byte[] Pack (object o) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
84 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
85 using (MemoryStream ms = new MemoryStream ()) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
86 Pack (ms, o); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
87 return ms.ToArray (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
88 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
89 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
90 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
91 public void Pack (Stream strm, object o) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
92 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
93 throw new NotImplementedException (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
94 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
95 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
96 public object Unpack (Type t, byte[] buf) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
97 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
98 return Unpack (t, buf, 0, buf.Length); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
99 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
100 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
101 public object Unpack (Type t, byte[] buf, int offset, int size) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
102 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
103 using (MemoryStream ms = new MemoryStream (buf, offset, size)) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
104 return Unpack (t, ms); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
105 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
106 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
107 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
108 public object Unpack (Type t, Stream strm) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
109 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
110 throw new NotImplementedException (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
111 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
112 #endregion |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
113 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
114 #region Compiled Packer Implementations |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
115 public abstract class PackerBase |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
116 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
117 Dictionary<Type, Delegate> _packers = new Dictionary<Type, Delegate> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
118 Dictionary<Type, Delegate> _unpackers = new Dictionary<Type, Delegate> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
119 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
120 protected Dictionary<Type, MethodInfo> _packMethods = new Dictionary<Type, MethodInfo> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
121 protected Dictionary<Type, MethodInfo> _unpackMethods = new Dictionary<Type, MethodInfo> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
122 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
123 protected PackerBase () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
124 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
125 DefaultPackMethods.Register (_packMethods, _unpackMethods); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
126 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
127 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
128 public Action<MsgPackWriter, T> CreatePacker<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
129 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
130 Delegate d; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
131 lock (_packers) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
132 if (!_packers.TryGetValue (typeof (T), out d)) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
133 d = CreatePacker_Internal<T> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
134 _packers.Add (typeof (T), d); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
135 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
136 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
137 return (Action<MsgPackWriter, T>)d; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
138 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
139 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
140 public Func<MsgPackReader, T> CreateUnpacker<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
141 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
142 Delegate d; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
143 lock (_unpackers) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
144 if (!_unpackers.TryGetValue (typeof (T), out d)) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
145 d = CreateUnpacker_Internal<T> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
146 _unpackers.Add (typeof (T), d); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
147 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
148 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
149 return (Func<MsgPackReader, T>)d; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
150 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
151 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
152 protected abstract Action<MsgPackWriter, T> CreatePacker_Internal<T> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
153 protected abstract Func<MsgPackReader, T> CreateUnpacker_Internal<T> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
154 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
155 public sealed class DynamicMethodPacker : PackerBase |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
156 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
157 private static MethodInfo LookupMemberMappingMethod; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
158 static Dictionary<Type, IDictionary<string, int>> UnpackMemberMappings; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
159 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
160 static DynamicMethodPacker () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
161 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
162 UnpackMemberMappings = new Dictionary<Type, IDictionary<string, int>> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
163 LookupMemberMappingMethod = typeof (DynamicMethodPacker).GetMethod ("LookupMemberMapping", BindingFlags.Static | BindingFlags.NonPublic); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
164 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
165 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
166 public DynamicMethodPacker () : base () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
167 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
168 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
169 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
170 protected override Action<MsgPackWriter, T> CreatePacker_Internal<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
171 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
172 DynamicMethod dm = CreatePacker (typeof (T), CreatePackDynamicMethod (typeof (T))); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
173 return (Action<MsgPackWriter, T>)dm.CreateDelegate (typeof (Action<MsgPackWriter, T>)); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
174 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
175 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
176 protected override Func<MsgPackReader, T> CreateUnpacker_Internal<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
177 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
178 DynamicMethod dm = CreateUnpacker (typeof (T), CreateUnpackDynamicMethod (typeof (T))); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
179 return (Func<MsgPackReader, T>)dm.CreateDelegate (typeof (Func<MsgPackReader, T>)); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
180 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
181 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
182 DynamicMethod CreatePacker (Type t, DynamicMethod dm) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
183 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
184 ILGenerator il = dm.GetILGenerator (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
185 _packMethods.Add (t, dm); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
186 PackILGenerator.EmitPackCode (t, dm, il, LookupMembers, FormatMemberName, LookupPackMethod); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
187 return dm; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
188 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
189 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
190 DynamicMethod CreateUnpacker (Type t, DynamicMethod dm) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
191 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
192 ILGenerator il = dm.GetILGenerator (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
193 _unpackMethods.Add (t, dm); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
194 PackILGenerator.EmitUnpackCode (t, dm, il, LookupMembers, FormatMemberName, LookupUnpackMethod, |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
195 LookupMemberMapping, LookupMemberMappingMethod); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
196 return dm; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
197 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
198 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
199 static DynamicMethod CreatePackDynamicMethod (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
200 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
201 return CreateDynamicMethod (typeof (void), new Type[] {typeof (MsgPackWriter), t}); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
202 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
203 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
204 static DynamicMethod CreateUnpackDynamicMethod (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
205 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
206 return CreateDynamicMethod (t, new Type[] {typeof (MsgPackReader)}); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
207 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
208 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
209 static MemberInfo[] LookupMembers (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
210 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
211 BindingFlags baseFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
212 System.Collections.Generic.List<MemberInfo> list = new System.Collections.Generic.List<MemberInfo> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
213 list.AddRange (t.GetFields (baseFlags)); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
214 // TODO: Add NonSerialized Attribute Filter ? |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
215 return list.ToArray (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
216 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
217 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
218 MethodInfo LookupPackMethod (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
219 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
220 MethodInfo mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
221 DynamicMethod dm; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
222 if (_packMethods.TryGetValue (t, out mi)) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
223 return mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
224 dm = CreatePackDynamicMethod (t); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
225 return CreatePacker (t, dm); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
226 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
227 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
228 MethodInfo LookupUnpackMethod (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
229 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
230 MethodInfo mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
231 if (_unpackMethods.TryGetValue (t, out mi)) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
232 return mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
233 DynamicMethod dm = CreateUnpackDynamicMethod (t); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
234 return CreateUnpacker (t, dm); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
235 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
236 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
237 static string FormatMemberName (MemberInfo m) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
238 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
239 if (m.MemberType != MemberTypes.Field) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
240 return m.Name; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
241 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
242 int pos; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
243 string name = m.Name; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
244 if (name[0] == '<' && (pos = name.IndexOf ('>')) > 1) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
245 name = name.Substring (1, pos - 1); // Auto-Property (\<.+\>) <ab> |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
246 return name; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
247 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
248 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
249 static int _dynamicMethodIdx = 0; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
250 static DynamicMethod CreateDynamicMethod (Type returnType, Type[] parameterTypes) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
251 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
252 string name = "_" + Interlocked.Increment (ref _dynamicMethodIdx).ToString (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
253 return new DynamicMethod (name, returnType, parameterTypes, true); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
254 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
255 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
256 internal static IDictionary<string,int> LookupMemberMapping (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
257 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
258 IDictionary<string, int> mapping; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
259 lock (UnpackMemberMappings) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
260 if (!UnpackMemberMappings.TryGetValue (t, out mapping)) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
261 mapping = new Dictionary<string, int> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
262 UnpackMemberMappings.Add (t, mapping); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
263 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
264 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
265 return mapping; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
266 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
267 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
268 public sealed class MethodBuilderPacker : PackerBase |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
269 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
270 public const string AssemblyName = "MessagePackInternalAssembly"; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
271 static AssemblyName DynamicAsmName; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
272 static AssemblyBuilder DynamicAsmBuilder; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
273 static ModuleBuilder DynamicModuleBuilder; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
274 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
275 private static MethodInfo LookupMemberMappingMethod; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
276 static Dictionary<Type, IDictionary<string, int>> UnpackMemberMappings; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
277 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
278 static MethodBuilderPacker () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
279 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
280 UnpackMemberMappings = new Dictionary<Type, IDictionary<string, int>> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
281 LookupMemberMappingMethod = typeof (MethodBuilderPacker).GetMethod ("LookupMemberMapping", BindingFlags.Static | BindingFlags.NonPublic); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
282 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
283 DynamicAsmName = new AssemblyName (AssemblyName); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
284 DynamicAsmBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly (DynamicAsmName, AssemblyBuilderAccess.Run); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
285 DynamicModuleBuilder = DynamicAsmBuilder.DefineDynamicModule (DynamicAsmName.Name); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
286 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
287 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
288 public MethodBuilderPacker () : base () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
289 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
290 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
291 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
292 protected override Action<MsgPackWriter, T> CreatePacker_Internal<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
293 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
294 TypeBuilder tb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
295 MethodBuilder mb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
296 CreatePackMethodBuilder (typeof (T), out tb, out mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
297 _packMethods.Add (typeof (T), mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
298 CreatePacker (typeof (T), mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
299 MethodInfo mi = ToCallableMethodInfo (typeof (T), tb, true); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
300 return (Action<MsgPackWriter, T>)Delegate.CreateDelegate (typeof (Action<MsgPackWriter, T>), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
301 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
302 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
303 protected override Func<MsgPackReader, T> CreateUnpacker_Internal<T> () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
304 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
305 TypeBuilder tb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
306 MethodBuilder mb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
307 CreateUnpackMethodBuilder (typeof (T), out tb, out mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
308 _unpackMethods.Add (typeof (T), mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
309 CreateUnpacker (typeof (T), mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
310 MethodInfo mi = ToCallableMethodInfo (typeof (T), tb, false); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
311 return (Func<MsgPackReader, T>)Delegate.CreateDelegate (typeof (Func<MsgPackReader, T>), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
312 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
313 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
314 void CreatePacker (Type t, MethodBuilder mb) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
315 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
316 ILGenerator il = mb.GetILGenerator (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
317 PackILGenerator.EmitPackCode (t, mb, il, LookupMembers, FormatMemberName, LookupPackMethod); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
318 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
319 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
320 void CreateUnpacker (Type t, MethodBuilder mb) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
321 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
322 ILGenerator il = mb.GetILGenerator (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
323 PackILGenerator.EmitUnpackCode (t, mb, il, LookupMembers, FormatMemberName, LookupUnpackMethod, |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
324 LookupMemberMapping, LookupMemberMappingMethod); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
325 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
326 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
327 MethodInfo ToCallableMethodInfo (Type t, TypeBuilder tb, bool isPacker) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
328 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
329 Type type = tb.CreateType (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
330 MethodInfo mi = type.GetMethod (isPacker ? "Pack" : "Unpack", BindingFlags.Static | BindingFlags.Public); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
331 if (isPacker) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
332 _packMethods[t] = mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
333 } else { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
334 _unpackMethods[t] = mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
335 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
336 return mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
337 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
338 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
339 MethodInfo LookupPackMethod (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
340 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
341 MethodInfo mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
342 TypeBuilder tb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
343 MethodBuilder mb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
344 if (_packMethods.TryGetValue (t, out mi)) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
345 return mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
346 CreatePackMethodBuilder (t, out tb, out mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
347 _packMethods.Add (t, mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
348 CreatePacker (t, mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
349 return ToCallableMethodInfo (t, tb, true); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
350 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
351 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
352 MethodInfo LookupUnpackMethod (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
353 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
354 MethodInfo mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
355 TypeBuilder tb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
356 MethodBuilder mb; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
357 if (_unpackMethods.TryGetValue (t, out mi)) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
358 return mi; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
359 CreateUnpackMethodBuilder (t, out tb, out mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
360 _unpackMethods.Add (t, mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
361 CreateUnpacker (t, mb); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
362 return ToCallableMethodInfo (t, tb, false); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
363 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
364 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
365 static string FormatMemberName (MemberInfo m) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
366 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
367 return m.Name; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
368 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
369 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
370 static MemberInfo[] LookupMembers (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
371 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
372 BindingFlags baseFlags = BindingFlags.Instance | BindingFlags.Public; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
373 System.Collections.Generic.List<MemberInfo> list = new System.Collections.Generic.List<MemberInfo> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
374 list.AddRange (t.GetFields (baseFlags)); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
375 // TODO: Add NonSerialized Attribute Filter ? |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
376 return list.ToArray (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
377 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
378 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
379 static void CreatePackMethodBuilder (Type t, out TypeBuilder tb, out MethodBuilder mb) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
380 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
381 tb = DynamicModuleBuilder.DefineType (t.Name + "PackerType", TypeAttributes.Public); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
382 mb = tb.DefineMethod ("Pack", MethodAttributes.Static | MethodAttributes.Public, typeof (void), new Type[] {typeof (MsgPackWriter), t}); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
383 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
384 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
385 static void CreateUnpackMethodBuilder (Type t, out TypeBuilder tb, out MethodBuilder mb) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
386 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
387 tb = DynamicModuleBuilder.DefineType (t.Name + "UnpackerType", TypeAttributes.Public); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
388 mb = tb.DefineMethod ("Unpack", MethodAttributes.Static | MethodAttributes.Public, t, new Type[] {typeof (MsgPackReader)}); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
389 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
390 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
391 internal static IDictionary<string,int> LookupMemberMapping (Type t) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
392 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
393 IDictionary<string, int> mapping; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
394 lock (UnpackMemberMappings) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
395 if (!UnpackMemberMappings.TryGetValue (t, out mapping)) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
396 mapping = new Dictionary<string, int> (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
397 UnpackMemberMappings.Add (t, mapping); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
398 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
399 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
400 return mapping; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
401 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
402 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
403 #endregion |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
404 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
405 #region default pack/unpack methods |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
406 internal static class DefaultPackMethods |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
407 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
408 public static void Register (Dictionary<Type, MethodInfo> packMethods, Dictionary<Type, MethodInfo> unpackMethods) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
409 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
410 RegisterPackMethods (packMethods); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
411 RegisterUnpackMethods (unpackMethods); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
412 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
413 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
414 #region Pack |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
415 static void RegisterPackMethods (Dictionary<Type, MethodInfo> packMethods) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
416 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
417 Type type = typeof (DefaultPackMethods); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
418 MethodInfo[] methods = type.GetMethods (BindingFlags.Static | BindingFlags.NonPublic); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
419 string methodName = "Pack"; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
420 for (int i = 0; i < methods.Length; i ++) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
421 if (!methodName.Equals (methods[i].Name)) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
422 continue; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
423 ParameterInfo[] parameters = methods[i].GetParameters (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
424 if (parameters.Length != 2 || parameters[0].ParameterType != typeof (MsgPackWriter)) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
425 continue; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
426 packMethods.Add (parameters[1].ParameterType, methods[i]); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
427 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
428 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
429 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
430 internal static void Pack (MsgPackWriter writer, string x) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
431 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
432 if (x == null) { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
433 writer.WriteNil (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
434 } else { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
435 writer.Write (x, false); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
436 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
437 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
438 #endregion |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
439 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
440 #region Unpack |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
441 static void RegisterUnpackMethods (Dictionary<Type, MethodInfo> unpackMethods) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
442 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
443 BindingFlags flags = BindingFlags.Static | BindingFlags.NonPublic; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
444 Type type = typeof (DefaultPackMethods); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
445 MethodInfo mi = type.GetMethod ("Unpack_Signed", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
446 unpackMethods.Add (typeof (sbyte), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
447 unpackMethods.Add (typeof (short), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
448 unpackMethods.Add (typeof (int), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
449 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
450 mi = type.GetMethod ("Unpack_Signed64", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
451 unpackMethods.Add (typeof (long), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
452 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
453 mi = type.GetMethod ("Unpack_Unsigned", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
454 unpackMethods.Add (typeof (byte), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
455 unpackMethods.Add (typeof (ushort), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
456 unpackMethods.Add (typeof (char), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
457 unpackMethods.Add (typeof (uint), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
458 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
459 mi = type.GetMethod ("Unpack_Unsigned64", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
460 unpackMethods.Add (typeof (ulong), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
461 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
462 mi = type.GetMethod ("Unpack_Boolean", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
463 unpackMethods.Add (typeof (bool), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
464 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
465 mi = type.GetMethod ("Unpack_Float", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
466 unpackMethods.Add (typeof (float), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
467 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
468 mi = type.GetMethod ("Unpack_Double", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
469 unpackMethods.Add (typeof (double), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
470 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
471 mi = type.GetMethod ("Unpack_String", flags); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
472 unpackMethods.Add (typeof (string), mi); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
473 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
474 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
475 internal static int Unpack_Signed (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
476 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
477 if (!reader.Read () || !reader.IsSigned ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
478 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
479 return reader.ValueSigned; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
480 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
481 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
482 internal static long Unpack_Signed64 (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
483 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
484 if (!reader.Read ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
485 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
486 if (reader.IsSigned ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
487 return reader.ValueSigned; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
488 if (reader.IsSigned64 ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
489 return reader.ValueSigned64; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
490 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
491 return 0; // unused |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
492 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
493 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
494 internal static uint Unpack_Unsigned (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
495 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
496 if (!reader.Read () || !reader.IsUnsigned ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
497 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
498 return reader.ValueUnsigned; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
499 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
500 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
501 internal static ulong Unpack_Unsigned64 (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
502 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
503 if (!reader.Read ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
504 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
505 if (reader.IsUnsigned ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
506 return reader.ValueUnsigned; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
507 if (reader.IsUnsigned64 ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
508 return reader.ValueUnsigned64; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
509 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
510 return 0; // unused |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
511 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
512 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
513 internal static bool Unpack_Boolean (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
514 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
515 if (!reader.Read () || !reader.IsBoolean ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
516 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
517 return reader.ValueBoolean; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
518 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
519 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
520 internal static float Unpack_Float (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
521 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
522 if (!reader.Read () || reader.Type != TypePrefixes.Float) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
523 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
524 return reader.ValueFloat; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
525 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
526 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
527 internal static double Unpack_Double (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
528 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
529 if (!reader.Read () || reader.Type != TypePrefixes.Double) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
530 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
531 return reader.ValueDouble; |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
532 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
533 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
534 internal static string Unpack_String (MsgPackReader reader) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
535 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
536 if (!reader.Read () || !reader.IsRaw ()) |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
537 UnpackFailed (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
538 return reader.ReadRawString (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
539 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
540 |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
541 internal static void UnpackFailed () |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
542 { |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
543 throw new FormatException (); |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
544 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
545 #endregion |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
546 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
547 #endregion |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
548 } |
abe0c247f5a5
Add Network module. but, unComplete NetworkDefaultJungleTreeEditor.cs
Kazuma Takeda <kazuma-arashi@hotmail.co.jp>
parents:
diff
changeset
|
549 } |