Пример #1
0
        public static TdfBlob ReadTdfBlob(Tdf head, Stream s)
        {
            TdfBlob res = new TdfBlob();

            res.Label = head.Label;
            res.Tag   = head.Tag;
            res.Type  = head.Type;
            res.Data  = new byte[DecompressInteger(s)];
            for (int i = 0; i < res.Data.Length; i++)
            {
                res.Data[i] = (byte)s.ReadByte();
            }
            return(res);
        }
Пример #2
0
            public static TdfBlob Create(string Label, byte[] data = null)
            {
                TdfBlob res = new TdfBlob();

                res.Set(Label, 2);
                if (data == null)
                {
                    res.Data = new byte[0];
                }
                else
                {
                    res.Data = data;
                }
                return(res);
            }
Пример #3
0
        public static void WriteTdf(Tdf tdf, Stream s)
        {
            s.WriteByte((byte)(tdf.Tag >> 24));
            s.WriteByte((byte)(tdf.Tag >> 16));
            s.WriteByte((byte)(tdf.Tag >> 8));
            s.WriteByte(tdf.Type);
            switch (tdf.Type)
            {
            case 0:
                TdfInteger ti = (TdfInteger)tdf;
                CompressInteger(ti.Value, s);
                break;

            case 1:
                TdfString ts = (TdfString)tdf;
                WriteString(ts.Value, s);
                break;

            case 2:
                TdfBlob tb = (TdfBlob)tdf;
                CompressInteger(tb.Data.Length, s);
                for (int i = 0; i < tb.Data.Length; i++)
                {
                    s.WriteByte(tb.Data[i]);
                }
                break;

            case 3:
                TdfStruct tst = (TdfStruct)tdf;
                if (tst.startswith2)
                {
                    s.WriteByte(2);
                }
                foreach (Tdf ttdf in tst.Values)
                {
                    WriteTdf(ttdf, s);
                }
                s.WriteByte(0);
                break;

            case 4:
                WriteTdfList((TdfList)tdf, s);
                break;

            case 5:
                WriteTdfDoubleList((TdfDoubleList)tdf, s);
                break;

            case 6:
                TdfUnion tu = (TdfUnion)tdf;
                s.WriteByte(tu.UnionType);
                if (tu.UnionType != 0x7F)
                {
                    WriteTdf(tu.UnionContent, s);
                }
                break;

            case 7:
                TdfIntegerList til = (TdfIntegerList)tdf;
                CompressInteger(til.Count, s);
                if (til.Count != 0)
                {
                    foreach (long l in til.List)
                    {
                        CompressInteger(l, s);
                    }
                }
                break;

            case 8:
                WriteDoubleValue(((TdfDoubleVal)tdf).Value, s);
                break;

            case 9:
                WriteTrippleValue(((TdfTrippleVal)tdf).Value, s);
                break;

            case 0xA:
                TdfFloat tf = (TdfFloat)tdf;
                WriteFloat(s, tf.Value);
                break;
            }
        }