using System;
using System.Reflection;
namespace Tmp
{
public class Packer
{
public Packer()
{
}
public void PackUInt16(ushort value)
{
}
public void PackInt16(short value)
{
//value.GetType();
Console.WriteLine("value({0}) < -0x80 => {1}", value, value < -0x80);
Console.WriteLine("value({0}) < -0x20 => {1}", value, value < -0x20);
Console.WriteLine("value({0}) < 0x80 => {1}", value, value < 0x80);
Console.WriteLine("value({0}) < 0x100 => {1}", value, value < 0x100);
}
public void PackObject<T>(T obj)
{
Type this_type = this.GetType();
string obj_type_name = obj.GetType().ToString();
string method_name = "Pack" + obj_type_name.Substring(obj_type_name.LastIndexOf(".") + 1);
//Console.WriteLine(method_name);
MethodInfo mi = this_type.GetMethod(method_name);
mi.Invoke(this, new object[] { obj });
}
public static void Main()
{
Packer packer = new Packer();
packer.PackObject((ushort)0);
packer.PackObject((short)-1);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKCm5hbWVzcGFjZSBUbXAKewogIHB1YmxpYyBjbGFzcyBQYWNrZXIKICB7CiAgICBwdWJsaWMgUGFja2VyKCkKICAgIHsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBQYWNrVUludDE2KHVzaG9ydCB2YWx1ZSkKICAgIHsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBQYWNrSW50MTYoc2hvcnQgdmFsdWUpCiAgICB7CiAgICAgIC8vdmFsdWUuR2V0VHlwZSgpOwogICAgICBDb25zb2xlLldyaXRlTGluZSgidmFsdWUoezB9KSA8ICAtMHg4MCA9PiB7MX0iLCB2YWx1ZSwgdmFsdWUgPCAtMHg4MCk7CiAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ2YWx1ZSh7MH0pIDwgIC0weDIwID0+IHsxfSIsIHZhbHVlLCB2YWx1ZSA8IC0weDIwKTsKICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInZhbHVlKHswfSkgPCAgIDB4ODAgPT4gezF9IiwgdmFsdWUsIHZhbHVlIDwgMHg4MCk7CiAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ2YWx1ZSh7MH0pIDwgIDB4MTAwID0+IHsxfSIsIHZhbHVlLCB2YWx1ZSA8IDB4MTAwKTsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBQYWNrT2JqZWN0PFQ+KFQgb2JqKQogICAgewogICAgICBUeXBlIHRoaXNfdHlwZSA9IHRoaXMuR2V0VHlwZSgpOwogICAgICBzdHJpbmcgb2JqX3R5cGVfbmFtZSA9IG9iai5HZXRUeXBlKCkuVG9TdHJpbmcoKTsKICAgICAgc3RyaW5nIG1ldGhvZF9uYW1lID0gIlBhY2siICsgb2JqX3R5cGVfbmFtZS5TdWJzdHJpbmcob2JqX3R5cGVfbmFtZS5MYXN0SW5kZXhPZigiLiIpICsgMSk7CiAgICAgIC8vQ29uc29sZS5Xcml0ZUxpbmUobWV0aG9kX25hbWUpOwogICAgICBNZXRob2RJbmZvIG1pID0gdGhpc190eXBlLkdldE1ldGhvZChtZXRob2RfbmFtZSk7CiAgICAgIG1pLkludm9rZSh0aGlzLCBuZXcgb2JqZWN0W10geyBvYmogfSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQogICAgewogICAgICBQYWNrZXIgcGFja2VyID0gbmV3IFBhY2tlcigpOwogICAgICBwYWNrZXIuUGFja09iamVjdCgodXNob3J0KTApOwogICAgICBwYWNrZXIuUGFja09iamVjdCgoc2hvcnQpLTEpOwogICAgfQogIH0KfQ==