Skip to content

Commit d42464e

Browse files
committed
up
1 parent cddd146 commit d42464e

File tree

3 files changed

+398
-349
lines changed

3 files changed

+398
-349
lines changed

DataTypes.cs

Lines changed: 74 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,18 @@
1111
entitydef所支持的基本数据类型
1212
改模块中的类抽象出了所有的支持类型并提供了这些类型的数据序列化成二进制数据与反序列化操作(主要用于网络通讯的打包与解包)
1313
*/
14-
1514
public class KBEDATATYPE_BASE
1615
{
16+
public static bool isNumeric(object v)
17+
{
18+
return v is sbyte || v is byte ||
19+
v is short || v is ushort ||
20+
v is int || v is uint ||
21+
v is long || v is ulong ||
22+
v is char || v is decimal || v is float ||
23+
v is double || v is Int16 || v is Int64 ||
24+
v is UInt16 || v is UInt64;
25+
}
1726
public static float KBE_FLT_MAX = float.MaxValue;
1827

1928
public virtual void bind()
@@ -61,7 +70,11 @@ public override object parseDefaultValStr(string v)
6170

6271
public override bool isSameType(object v)
6372
{
64-
return v != null && v.GetType() == typeof(SByte);
73+
if (!KBEDATATYPE_BASE.isNumeric (v))
74+
return false;
75+
76+
decimal v1 = Convert.ToDecimal (v);
77+
return v1 >= sbyte.MinValue && v1 <= sbyte.MaxValue;
6578
}
6679
}
6780

@@ -86,7 +99,11 @@ public override object parseDefaultValStr(string v)
8699

87100
public override bool isSameType(object v)
88101
{
89-
return v != null && v.GetType() == typeof(Int16);
102+
if (!KBEDATATYPE_BASE.isNumeric (v))
103+
return false;
104+
105+
decimal v1 = Convert.ToDecimal (v);
106+
return v1 >= Int16.MinValue && v1 <= Int16.MaxValue;
90107
}
91108
}
92109

@@ -111,7 +128,11 @@ public override object parseDefaultValStr(string v)
111128

112129
public override bool isSameType(object v)
113130
{
114-
return v != null && v.GetType() == typeof(Int32);
131+
if (!KBEDATATYPE_BASE.isNumeric (v))
132+
return false;
133+
134+
decimal v1 = Convert.ToDecimal (v);
135+
return v1 >= Int32.MinValue && v1 <= Int32.MaxValue;
115136
}
116137
}
117138

@@ -136,7 +157,11 @@ public override object parseDefaultValStr(string v)
136157

137158
public override bool isSameType(object v)
138159
{
139-
return v != null && v.GetType() == typeof(Int64);
160+
if (!KBEDATATYPE_BASE.isNumeric (v))
161+
return false;
162+
163+
decimal v1 = Convert.ToDecimal (v);
164+
return v1 >= Int64.MinValue && v1 <= Int64.MaxValue;
140165
}
141166
}
142167

@@ -161,7 +186,11 @@ public override object parseDefaultValStr(string v)
161186

162187
public override bool isSameType(object v)
163188
{
164-
return v != null && v.GetType() == typeof(Byte);
189+
if (!KBEDATATYPE_BASE.isNumeric (v))
190+
return false;
191+
192+
decimal v1 = Convert.ToDecimal (v);
193+
return v1 >= Byte.MinValue && v1 <= Byte.MaxValue;
165194
}
166195
}
167196

@@ -186,7 +215,11 @@ public override object parseDefaultValStr(string v)
186215

187216
public override bool isSameType(object v)
188217
{
189-
return v != null && v.GetType() == typeof(UInt16);
218+
if (!KBEDATATYPE_BASE.isNumeric (v))
219+
return false;
220+
221+
decimal v1 = Convert.ToDecimal (v);
222+
return v1 >= UInt16.MinValue && v1 <= UInt16.MaxValue;
190223
}
191224
}
192225

@@ -211,7 +244,11 @@ public override object parseDefaultValStr(string v)
211244

212245
public override bool isSameType(object v)
213246
{
214-
return v != null && v.GetType() == typeof(UInt32);
247+
if (!KBEDATATYPE_BASE.isNumeric (v))
248+
return false;
249+
250+
decimal v1 = Convert.ToDecimal (v);
251+
return v1 >= UInt32.MinValue && v1 <= UInt32.MaxValue;
215252
}
216253
}
217254

@@ -236,7 +273,11 @@ public override object parseDefaultValStr(string v)
236273

237274
public override bool isSameType(object v)
238275
{
239-
return v != null && v.GetType() == typeof(UInt64);
276+
if (!KBEDATATYPE_BASE.isNumeric (v))
277+
return false;
278+
279+
decimal v1 = Convert.ToDecimal (v);
280+
return v1 >= UInt64.MinValue && v1 <= UInt64.MaxValue;
240281
}
241282
}
242283

@@ -261,7 +302,12 @@ public override object parseDefaultValStr(string v)
261302

262303
public override bool isSameType(object v)
263304
{
264-
return v != null && v.GetType() == typeof(float);
305+
if(v is float)
306+
return (float)v >= float.MinValue && (float)v <= float.MaxValue;
307+
else if(v is double)
308+
return (double)v >= float.MinValue && (double)v <= float.MaxValue;
309+
310+
return false;
265311
}
266312
}
267313

@@ -286,7 +332,12 @@ public override object parseDefaultValStr(string v)
286332

287333
public override bool isSameType(object v)
288334
{
289-
return v != null && v.GetType() == typeof(double);
335+
if(v is float)
336+
return (float)v >= double.MinValue && (float)v <= double.MaxValue;
337+
else if(v is double)
338+
return (double)v >= double.MinValue && (double)v <= double.MaxValue;
339+
340+
return false;
290341
}
291342
}
292343

@@ -503,15 +554,15 @@ public override bool isSameType(object v)
503554

504555
public class KBEDATATYPE_ARRAY : KBEDATATYPE_BASE
505556
{
506-
public object type;
557+
public object vtype;
507558

508559
public override void bind()
509560
{
510-
if(type.GetType() == typeof(KBEDATATYPE_BASE).GetType())
511-
((KBEDATATYPE_BASE)type).bind();
561+
if(vtype.GetType ().BaseType.ToString() == "KBEngine.KBEDATATYPE_BASE")
562+
((KBEDATATYPE_BASE)vtype).bind();
512563
else
513-
if(EntityDef.iddatatypes.ContainsKey((UInt16)type))
514-
type = EntityDef.iddatatypes[(UInt16)type];
564+
if(EntityDef.iddatatypes.ContainsKey((UInt16)vtype))
565+
vtype = EntityDef.iddatatypes[(UInt16)vtype];
515566
}
516567

517568
public override object createFromStream(MemoryStream stream)
@@ -522,7 +573,7 @@ public override object createFromStream(MemoryStream stream)
522573
while(size > 0)
523574
{
524575
size--;
525-
datas.Add(((KBEDATATYPE_BASE)type).createFromStream(stream));
576+
datas.Add(((KBEDATATYPE_BASE)vtype).createFromStream(stream));
526577
};
527578

528579
return datas;
@@ -533,7 +584,7 @@ public override void addToStream(Bundle stream, object v)
533584
stream.writeUint32((UInt32)((List<object>)v).Count);
534585
for(int i=0; i<((List<object>)v).Count; i++)
535586
{
536-
((KBEDATATYPE_BASE)type).addToStream(stream, ((List<object>)v)[i]);
587+
((KBEDATATYPE_BASE)vtype).addToStream(stream, ((List<object>)v)[i]);
537588
}
538589
}
539590

@@ -544,20 +595,20 @@ public override object parseDefaultValStr(string v)
544595

545596
public override bool isSameType(object v)
546597
{
547-
if(type.GetType() != typeof(KBEDATATYPE_BASE))
598+
if(vtype.GetType ().BaseType.ToString() != "KBEngine.KBEDATATYPE_BASE")
548599
{
549600
Dbg.ERROR_MSG(string.Format("KBEDATATYPE_ARRAY::isSameType: has not bind!"));
550601
return false;
551602
}
552-
603+
553604
if(v == null || v.GetType() != typeof(List<object>))
554605
{
555606
return false;
556607
}
557608

558609
for(int i=0; i<((List<object>)v).Count; i++)
559610
{
560-
if(!((KBEDATATYPE_BASE)type).isSameType(((List<object>)v)[i]))
611+
if(!((KBEDATATYPE_BASE)vtype).isSameType(((List<object>)v)[i]))
561612
{
562613
return false;
563614
}
@@ -581,7 +632,7 @@ public override void bind()
581632
{
582633
object type = dicttype[itemkey];
583634

584-
if(type.GetType() == typeof(KBEDATATYPE_BASE).GetType())
635+
if(type.GetType ().BaseType.ToString() == "KBEngine.KBEDATATYPE_BASE")
585636
((KBEDATATYPE_BASE)type).bind();
586637
else
587638
if(EntityDef.iddatatypes.ContainsKey((UInt16)type))
@@ -622,10 +673,8 @@ public override object parseDefaultValStr(string v)
622673
public override bool isSameType(object v)
623674
{
624675
if(v == null || v.GetType() != typeof(Dictionary<string, object>))
625-
{
626676
return false;
627-
}
628-
677+
629678
foreach(KeyValuePair<string, object> item in dicttype)
630679
{
631680
object value;

0 commit comments

Comments
 (0)