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 }); }
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, }); }
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 }); }