using System;
using System.Reflection;
namespace Tmp
{
public class Packer
{
public Packer()
{
}
public void PackBoolean(bool value)
{
}
public void PackSByte(sbyte value)
{
//value.GetType();
Console.WriteLine("value({0}) < -1 => {1}", value, value < -1);
Console.WriteLine("value({0}) < -0x20 => {1}", value, value < -0x20);
Console.WriteLine("value({0}) < -0x80 => {1}", value, value < -0x80);
}
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(true);
packer.PackObject((sbyte)-0x40);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uUmVmbGVjdGlvbjsKCm5hbWVzcGFjZSBUbXAKewogIHB1YmxpYyBjbGFzcyBQYWNrZXIKICB7CiAgICBwdWJsaWMgUGFja2VyKCkKICAgIHsKICAgIH0KCiAgICBwdWJsaWMgdm9pZCBQYWNrQm9vbGVhbihib29sIHZhbHVlKQogICAgewogICAgfQoKICAgIHB1YmxpYyB2b2lkIFBhY2tTQnl0ZShzYnl0ZSB2YWx1ZSkKICAgIHsKICAgICAgLy92YWx1ZS5HZXRUeXBlKCk7CiAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJ2YWx1ZSh7MH0pIDwgICAgIC0xID0+IHsxfSIsIHZhbHVlLCB2YWx1ZSA8ICAgIC0xKTsKICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoInZhbHVlKHswfSkgPCAgLTB4MjAgPT4gezF9IiwgdmFsdWUsIHZhbHVlIDwgLTB4MjApOwogICAgICBDb25zb2xlLldyaXRlTGluZSgidmFsdWUoezB9KSA8ICAtMHg4MCA9PiB7MX0iLCB2YWx1ZSwgdmFsdWUgPCAtMHg4MCk7CiAgICB9CgogICAgcHVibGljIHZvaWQgUGFja09iamVjdDxUPihUIG9iaikKICAgIHsKICAgICAgVHlwZSB0aGlzX3R5cGUgPSB0aGlzLkdldFR5cGUoKTsKICAgICAgc3RyaW5nIG9ial90eXBlX25hbWUgPSBvYmouR2V0VHlwZSgpLlRvU3RyaW5nKCk7CiAgICAgIHN0cmluZyBtZXRob2RfbmFtZSA9ICJQYWNrIiArIG9ial90eXBlX25hbWUuU3Vic3RyaW5nKG9ial90eXBlX25hbWUuTGFzdEluZGV4T2YoIi4iKSArIDEpOwogICAgICAvL0NvbnNvbGUuV3JpdGVMaW5lKG1ldGhvZF9uYW1lKTsKICAgICAgTWV0aG9kSW5mbyBtaSA9IHRoaXNfdHlwZS5HZXRNZXRob2QobWV0aG9kX25hbWUpOwogICAgICBtaS5JbnZva2UodGhpcywgbmV3IG9iamVjdFtdIHsgb2JqIH0pOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKICAgIHsKICAgICAgUGFja2VyIHBhY2tlciA9IG5ldyBQYWNrZXIoKTsKICAgICAgcGFja2VyLlBhY2tPYmplY3QodHJ1ZSk7CiAgICAgIHBhY2tlci5QYWNrT2JqZWN0KChzYnl0ZSktMHg0MCk7CiAgICB9CiAgfQp9Cg==