Skip to content

Commit 857f53b

Browse files
committed
refactored MessagePack.java and TemplateRegistry.java
1 parent d998dfc commit 857f53b

4 files changed

Lines changed: 86 additions & 41 deletions

File tree

src/main/java/org/msgpack/MessagePack.java

Lines changed: 3 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,11 @@ public class MessagePack {
3636
private TemplateRegistry registry;
3737

3838
public MessagePack() {
39-
this.registry = new TemplateRegistry();
40-
loadDefaultTemplates(registry);
39+
registry = new TemplateRegistry();
4140
}
4241

4342
public MessagePack(MessagePack parent) {
44-
this.registry = new TemplateRegistry(parent.registry);
43+
registry = new TemplateRegistry(parent.registry);
4544
}
4645

4746
public <T> T unpack(InputStream in, T v) throws IOException {
@@ -170,31 +169,6 @@ public static <T> T unpack(ByteBuffer b, Class<T> c) {
170169
}
171170
*/
172171

173-
public static void loadDefaultTemplates(TemplateRegistry reg) {
174-
reg.register(boolean.class, BooleanTemplate.getInstance());
175-
reg.register(Boolean.class, BooleanTemplate.getInstance());
176-
reg.register(byte.class, ByteTemplate.getInstance());
177-
reg.register(Byte.class, ByteTemplate.getInstance());
178-
reg.register(short.class, ShortTemplate.getInstance());
179-
reg.register(Short.class, ShortTemplate.getInstance());
180-
reg.register(int.class, IntTemplate.getInstance());
181-
reg.register(Integer.class, IntTemplate.getInstance());
182-
reg.register(long.class, LongTemplate.getInstance());
183-
reg.register(Long.class, LongTemplate.getInstance());
184-
reg.register(float.class, FloatTemplate.getInstance());
185-
reg.register(Float.class, FloatTemplate.getInstance());
186-
reg.register(double.class, DoubleTemplate.getInstance());
187-
reg.register(Double.class, DoubleTemplate.getInstance());
188-
reg.register(BigInteger.class, BigIntegerTemplate.getInstance());
189-
reg.register(boolean[].class, ByteArrayTemplate.getInstance());
190-
reg.register(short[].class, ShortArrayTemplate.getInstance());
191-
reg.register(int[].class, IntArrayTemplate.getInstance());
192-
reg.register(long[].class, LongArrayTemplate.getInstance());
193-
reg.register(float[].class, FloatArrayTemplate.getInstance());
194-
reg.register(double[].class, DoubleArrayTemplate.getInstance());
195-
reg.register(String.class, StringTemplate.getInstance());
196-
reg.register(byte[].class, ByteArrayTemplate.getInstance());
197-
reg.register(Value.class, ValueTemplate.getInstance());
198-
}
172+
199173
}
200174

src/main/java/org/msgpack/TemplateRegistry.java

Lines changed: 81 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,37 +20,108 @@
2020
import java.util.Map;
2121
import java.util.HashMap;
2222
import java.lang.reflect.Type;
23-
import java.lang.reflect.ParameterizedType;
23+
import java.math.BigInteger;
24+
25+
import org.msgpack.template.BigIntegerTemplate;
26+
import org.msgpack.template.BooleanTemplate;
27+
import org.msgpack.template.ByteArrayTemplate;
28+
import org.msgpack.template.ByteTemplate;
29+
import org.msgpack.template.DoubleArrayTemplate;
30+
import org.msgpack.template.DoubleTemplate;
31+
import org.msgpack.template.FloatArrayTemplate;
32+
import org.msgpack.template.FloatTemplate;
33+
import org.msgpack.template.IntArrayTemplate;
34+
import org.msgpack.template.IntTemplate;
35+
import org.msgpack.template.LongArrayTemplate;
36+
import org.msgpack.template.LongTemplate;
37+
import org.msgpack.template.ShortArrayTemplate;
38+
import org.msgpack.template.ShortTemplate;
39+
import org.msgpack.template.StringTemplate;
2440
import org.msgpack.template.Template;
41+
import org.msgpack.template.ValueTemplate;
42+
import org.msgpack.value.Value;
43+
2544

2645
class TemplateRegistry {
27-
private TemplateRegistry parent;
28-
private Map<Type, Template> map;
2946

30-
public TemplateRegistry(TemplateRegistry parent) {
31-
this.parent = parent;
47+
static void loadDefaultTemplates(TemplateRegistry reg) {
48+
reg.register(boolean.class, BooleanTemplate.getInstance());
49+
reg.register(Boolean.class, BooleanTemplate.getInstance());
50+
reg.register(byte.class, ByteTemplate.getInstance());
51+
reg.register(Byte.class, ByteTemplate.getInstance());
52+
reg.register(short.class, ShortTemplate.getInstance());
53+
reg.register(Short.class, ShortTemplate.getInstance());
54+
reg.register(int.class, IntTemplate.getInstance());
55+
reg.register(Integer.class, IntTemplate.getInstance());
56+
reg.register(long.class, LongTemplate.getInstance());
57+
reg.register(Long.class, LongTemplate.getInstance());
58+
reg.register(float.class, FloatTemplate.getInstance());
59+
reg.register(Float.class, FloatTemplate.getInstance());
60+
reg.register(double.class, DoubleTemplate.getInstance());
61+
reg.register(Double.class, DoubleTemplate.getInstance());
62+
reg.register(BigInteger.class, BigIntegerTemplate.getInstance());
63+
reg.register(boolean[].class, ByteArrayTemplate.getInstance());
64+
reg.register(short[].class, ShortArrayTemplate.getInstance());
65+
reg.register(int[].class, IntArrayTemplate.getInstance());
66+
reg.register(long[].class, LongArrayTemplate.getInstance());
67+
reg.register(float[].class, FloatArrayTemplate.getInstance());
68+
reg.register(double[].class, DoubleArrayTemplate.getInstance());
69+
reg.register(String.class, StringTemplate.getInstance());
70+
reg.register(byte[].class, ByteArrayTemplate.getInstance());
71+
reg.register(Value.class, ValueTemplate.getInstance());
3272
}
3373

74+
private TemplateRegistry parent = null;
75+
76+
private Map<Type, Template> templateCache;
77+
3478
public TemplateRegistry() {
35-
map = new HashMap<Type, Template>();
79+
this(null);
80+
}
81+
82+
public TemplateRegistry(TemplateRegistry parent) {
83+
this.parent = parent;
84+
templateCache = new HashMap<Type, Template>();
85+
if (this.parent == null) {
86+
loadDefaultTemplates(this);
87+
}
3688
}
3789

3890
public Template lookup(Type type) {
3991
Template tmpl = tryLookup(type);
40-
if(tmpl == null && parent != null) {
92+
if (tmpl == null && parent != null) {
4193
tmpl = parent.tryLookup(type);
4294
}
4395
return tmpl;
4496
}
4597

4698
private Template tryLookup(Type type) {
4799
// TODO
48-
return map.get(type);
100+
return templateCache.get(type);
49101
}
50102

51103
public void register(Type type, Template tmpl) {
52104
// TODO
53-
map.put(type, tmpl);
105+
templateCache.put(type, tmpl);
54106
}
55-
}
56107

108+
public void unregister(Type type) {
109+
// TODO
110+
if (type == null) {
111+
throw new NullPointerException("Type is null");
112+
}
113+
114+
templateCache.clear();
115+
if (parent != null) {
116+
parent.unregister(type);
117+
}
118+
}
119+
120+
public void unregister() {
121+
// TODO
122+
templateCache.clear();
123+
if (parent != null) {
124+
parent.unregister();
125+
}
126+
}
127+
}

src/test/java/org/msgpack/TestCrossLang.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.msgpack.util;
1+
package org.msgpack;
22

33
import java.math.BigInteger;
44
import java.nio.ByteBuffer;

src/test/java/org/msgpack/TestSimplePackUnpack.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.msgpack.util;
1+
package org.msgpack;
22

33
import java.math.BigInteger;
44
import java.nio.ByteBuffer;

0 commit comments

Comments
 (0)