Пример #1
0
        public static TermAtom Read(BinaryReader reader, EEncodingType encType, ETermSize size)
        {
            var enc = Enc.Enc.Get(encType);
            var len = size switch
            {
                ETermSize.Small => reader.ReadByte(),
                ETermSize.Large => reader.ReadUInt16(),
                _ => throw new NotSupportedException(),
            };
            var atomBytes = reader.ReadBytes(len);
            var atom      = enc.GetString(atomBytes);

            return(new TermAtom()
            {
                EncodingType = encType,
                Atom = atom
            });
        }
Пример #2
0
        public static TermTuple Read(EndianBinaryReader reader, ETermSize size)
        {
            var len = size switch
            {
                ETermSize.Small => reader.ReadByte(),
                ETermSize.Large => reader.ReadUInt32(),
                _ => throw new NotSupportedException(),
            };
            var elements = new IExtTerm[len];

            for (long i = 0; i < elements.LongLength; i++)
            {
                elements[i] = BeamTerm.BinaryToTerm(reader, false);
            }

            return(new TermTuple()
            {
                Elements = elements,
            });
        }
Пример #3
0
        public static TermBigNumber Read(EndianBinaryReader reader, ETermSize size)
        {
            var len = size switch
            {
                ETermSize.Large => reader.ReadUInt32(),
                ETermSize.Small => reader.ReadByte(),
                _ => throw new ArgumentOutOfRangeException(nameof(size), size, null)
            };
            var sign     = reader.ReadByte();
            var valBytes = reader.ReadBytes((int)len);
            var val      = new BigInteger(valBytes, true, true);

            if (sign == NegativeMark)
            {
                val *= -1;
            }

            return(new TermBigNumber()
            {
                Number = val,
                AddOneByte = valBytes.Length >= 2 && valBytes[0] == 0
            });
        }