コード例 #1
0
        public static Bincoding GetValue(IWriteStream[] value)
        {
            List <Bincoding> value2 = new List <Bincoding>(value.Length);

            foreach (IWriteStream item in value)
            {
                value2.Add(Bincoding.GetValue(item));
            }

            return(new Bincoding(value2));
        }
コード例 #2
0
 public void Encode(string key, IWriteStream[] value)
 {
     Encode(Bincoding.GetValue(key, Bincoding.GetValue(value)));
 }
コード例 #3
0
 public void Encode(string key, List <Bincoding> value)
 {
     Encode(Bincoding.GetValue(key, Bincoding.GetValue(value)));
 }
コード例 #4
0
 public void Encode(string key, byte[] value)
 {
     Encode(Bincoding.GetValue(key, Bincoding.GetValue(value)));
 }
コード例 #5
0
 public void Encode(string key, DateTime value)
 {
     Encode(Bincoding.GetValue(key, Bincoding.GetValue(value)));
 }
コード例 #6
0
 public void Encode(string key, ulong value)
 {
     Encode(Bincoding.GetValue(key, Bincoding.GetValue(value)));
 }
コード例 #7
0
 public void Encode(KeyValuePair <string, Bincoding> value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #8
0
 public void Encode(bool value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #9
0
 public void Encode(List <Bincoding> value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #10
0
 public void Encode(Stream value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #11
0
 public void Encode(string value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #12
0
 public void Encode(byte[] value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #13
0
 public void Encode(DateTime value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #14
0
 public void Encode(uint value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #15
0
 public void Encode(short value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #16
0
 public void Encode(Dictionary <string, Bincoding> value)
 {
     Encode(Bincoding.GetValue(value));
 }
コード例 #17
0
        public Bincoding DecodeNext()
        {
            if (_lastStream != null)
            {
                if ((_lastStream.Length - _lastStream.Position) > 0)
                {
                    OffsetStream.StreamCopy(_lastStream, new NullStream());
                }

                _lastStream = null;
            }

            BincodingType type = (BincodingType)_s.ReadByte();

            switch (type)
            {
            case BincodingType.NULL:
                return(new Bincoding(type, null));

            case BincodingType.BOOLEAN:
            case BincodingType.BYTE:
            {
                byte value = (byte)_s.ReadByte();
                return(new Bincoding(type, new byte[] { value }));
            }

            case BincodingType.SHORT:
            case BincodingType.USHORT:
            {
                byte[] value = new byte[2];
                OffsetStream.StreamRead(_s, value, 0, 2);

                return(new Bincoding(type, value));
            }

            case BincodingType.INTEGER:
            case BincodingType.UINTEGER:
            {
                byte[] value = new byte[4];
                OffsetStream.StreamRead(_s, value, 0, 4);

                return(new Bincoding(type, value));
            }

            case BincodingType.LONG:
            case BincodingType.ULONG:
            case BincodingType.DATETIME:
            {
                byte[] value = new byte[8];
                OffsetStream.StreamRead(_s, value, 0, 8);

                return(new Bincoding(type, value));
            }

            case BincodingType.BINARY:
            case BincodingType.STRING:
            {
                int count = ReadLength(_s);

                byte[] value = new byte[count];
                OffsetStream.StreamRead(_s, value, 0, count);

                return(new Bincoding(type, value));
            }

            case BincodingType.STREAM:
            {
                int count = ReadLength(_s);

                _lastStream = new OffsetStream(_s, _s.Position, count, true, false);

                return(Bincoding.GetValue(_lastStream));
            }

            case BincodingType.LIST:
            {
                int count = ReadLength(_s);

                List <Bincoding> list = new List <Bincoding>(count);

                for (int i = 0; i < count; i++)
                {
                    list.Add(DecodeNext());
                }

                return(Bincoding.GetValue(list));
            }

            case BincodingType.KEY_VALUE_PAIR:
            {
                int    keyLen    = _s.ReadByte();
                byte[] keyBuffer = new byte[keyLen];
                OffsetStream.StreamRead(_s, keyBuffer, 0, keyLen);

                string    key   = Encoding.UTF8.GetString(keyBuffer, 0, keyLen);
                Bincoding value = DecodeNext();

                return(Bincoding.GetValue(new KeyValuePair <string, Bincoding>(key, value)));
            }

            case BincodingType.DICTIONARY:
            {
                int count = ReadLength(_s);

                Dictionary <string, Bincoding> dictionary = new Dictionary <string, Bincoding>(count);
                int    keyLen;
                byte[] keyBuffer = new byte[255];

                for (int i = 0; i < count; i++)
                {
                    keyLen = _s.ReadByte();
                    OffsetStream.StreamRead(_s, keyBuffer, 0, keyLen);

                    string    key   = Encoding.UTF8.GetString(keyBuffer, 0, keyLen);
                    Bincoding value = DecodeNext();

                    dictionary.Add(key, value);
                }

                return(Bincoding.GetValue(dictionary));
            }

            default:
                throw new InvalidDataException("Invalid bincoding type encountered while decoding data.");
            }
        }
コード例 #18
0
 public void Encode(IWriteStream[] value)
 {
     Encode(Bincoding.GetValue(value));
 }