Exemplo n.º 1
0
    // 読み込む
    public static PackElement CreateFromBuf(Buf b)
    {
        // 名前
        string name = b.ReadStr(true);

        // 種類
        PackValueType type = (PackValueType)b.ReadInt();

        // 項目数
        uint num = b.ReadInt();

        PackElement e = new PackElement(name, type);

        // 値
        uint i;

        for (i = 0; i < num; i++)
        {
            PackValue v = PackValue.CreateFromBuf(b, i, type) !;

            e.AddValue(v);
        }

        return(e);
    }
Exemplo n.º 2
0
 // コンストラクタ
 public PackElement(string name, PackValueType type)
 {
     this.name   = name;
     this.type   = type;
     maxIndex    = 0;
     this.values = new Dictionary <uint, PackValue>();
 }
Exemplo n.º 3
0
    // 書き出す
    public void WriteToBuf(Buf b, PackValueType type)
    {
        switch (type)
        {
        case PackValueType.Int:
            b.WriteInt(IntValue);
            break;

        case PackValueType.Int64:
            b.WriteInt64(Int64Value);
            break;

        case PackValueType.Data:
            b.WriteInt((uint)Data.Length);
            b.Write(Data);
            break;

        case PackValueType.Str:
            b.WriteStr(StrValue.Trim());
            break;

        case PackValueType.UniStr:
            byte[] data = Str.Utf8Encoding.GetBytes(StrValue.Trim());
            b.WriteInt((uint)data.Length + 1);
            b.Write(data);
            b.WriteByte(0);
            break;
        }
    }
Exemplo n.º 4
0
    // 読み込む
    public static PackValue?CreateFromBuf(Buf b, uint index, PackValueType type)
    {
        switch (type)
        {
        case PackValueType.Int:
            return(new PackValue(index, b.ReadInt()));

        case PackValueType.Int64:
            return(new PackValue(index, b.ReadInt64()));

        case PackValueType.Str:
            return(new PackValue(index, b.ReadStr().Trim()));

        case PackValueType.UniStr:
            uint len = b.ReadInt();
            if (len == 0)
            {
                return(new PackValue(index, ""));
            }
            else
            {
                byte[] data = b.Read(len - 1);
                b.Read(1);
                return(new PackValue(index, Str.Utf8Encoding.GetString(data).Trim()));
            }

        case PackValueType.Data:
            uint size = b.ReadInt();
            return(new PackValue(index, b.Read(size)));
        }

        return(null);
    }
Exemplo n.º 5
0
        PackElement getElementAndCreateIfNotExists(string name, PackValueType type)
        {
            PackElement?e = getElement(name);

            if (e != null)
            {
                return(e);
            }

            e = new PackElement(name, type);
            addElement(e);

            return(e);
        }
Exemplo n.º 6
0
    // デフォルトの値
    public static PackValue?GetDefaultValue(uint index, PackValueType type)
    {
        switch (type)
        {
        case PackValueType.Int:
            return(new PackValue(index, 0));

        case PackValueType.Int64:
            return(new PackValue(index, 0));

        case PackValueType.Str:
            return(new PackValue(index, ""));

        case PackValueType.UniStr:
            return(new PackValue(index, ""));

        case PackValueType.Data:
            return(new PackValue(index, new byte[0]));
        }

        return(null);
    }
Exemplo n.º 7
0
 // 型のチェック
 public bool CheckType(PackValueType type)
 {
     return(this.type == type);
 }