Пример #1
0
        internal IntegerLiteral(IntegerLiteralString integerLiteralString)
        {
            Debug.Assert(integerLiteralString != null);

            this.originalString = integerLiteralString;
            this.ProcessOriginalString();
        }
Пример #2
0
        public void UnsignedTooBigInteger()
        {
            string plainNumber          = "18446744073709551617";
            string numberSuffix         = "u";
            string integerString        = plainNumber + numberSuffix;
            var    stringRepresentation = new IntegerLiteralString(integerString);

            Assert.ThrowsException <NotSupportedException>(
                () => new IntegerLiteral(stringRepresentation));
        }
Пример #3
0
        public void SignedTooBigInteger()
        {
            string plainNumber          = "9223372036854775808";
            string numberSuffix         = string.Empty;
            string integerString        = plainNumber + numberSuffix;
            var    stringRepresentation = new IntegerLiteralString(integerString);

            Assert.ThrowsException <NotSupportedException>(
                () => new IntegerLiteral(stringRepresentation));
        }
        public void OctalValues(string plainNumber, string numberSuffix)
        {
            string integerString = plainNumber + numberSuffix;

            var value = new IntegerLiteralString(integerString);

            Assert.IsTrue(StringComparer.InvariantCulture.Equals(value.PlainNumber, plainNumber));
            Assert.AreEqual(numberSuffix, value.NumberSuffix);
            Assert.AreEqual(NumberRadixFormat.Octal, value.Radix);
        }
Пример #5
0
        public void Unsigned3BitInteger()
        {
            string plainNumber          = "4";
            string numberSuffix         = "u";
            string integerString        = plainNumber + numberSuffix;
            var    stringRepresentation = new IntegerLiteralString(integerString);

            var value = new IntegerLiteral(stringRepresentation);

            Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed);
            Assert.AreEqual(3, value.RequiredBitCount);
            Assert.AreEqual(4ul, value.ValueAsUlong);
        }
Пример #6
0
        public void Signed1BitInteger()
        {
            string plainNumber          = "1";
            string numberSuffix         = string.Empty;
            string integerString        = plainNumber + numberSuffix;
            var    stringRepresentation = new IntegerLiteralString(integerString);

            var value = new IntegerLiteral(stringRepresentation);

            Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed);
            Assert.AreEqual(2, value.RequiredBitCount);
            Assert.AreEqual(1, value.ValueAsLong);
        }
Пример #7
0
        public void Unsigned8BitInteger()
        {
            byte   startingValue        = byte.MaxValue;
            string plainNumber          = startingValue.ToString();
            string numberSuffix         = "u";
            string integerString        = plainNumber + numberSuffix;
            var    stringRepresentation = new IntegerLiteralString(integerString);

            var value = new IntegerLiteral(stringRepresentation);

            Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed);
            Assert.AreEqual(8, value.RequiredBitCount);
            Assert.AreEqual(startingValue, value.ValueAsUlong);
        }
Пример #8
0
        public void SignedHigh9BitsInteger()
        {
            short  startingValue        = sbyte.MaxValue + 1;
            string plainNumber          = startingValue.ToString();
            string numberSuffix         = string.Empty;
            string integerString        = plainNumber + numberSuffix;
            var    stringRepresentation = new IntegerLiteralString(integerString);

            var value = new IntegerLiteral(stringRepresentation);

            Assert.AreEqual(!numberSuffix.Contains('u'), value.Signed);
            Assert.AreEqual(9, value.RequiredBitCount);
            Assert.AreEqual(startingValue, value.ValueAsLong);
        }
Пример #9
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="integerAsString">integer value as a string</param>
        /// <returns>An IntegerLiteral instance</returns>
        internal static IntegerLiteral CreateIntegerLiteral(string integerAsString)
        {
            var integerString = new IntegerLiteralString(integerAsString);

            return(new IntegerLiteral(integerString));
        }
        /// <inheritdoc />
        public override CtfFieldValue Read(IPacketReader reader, CtfFieldValue parent = null)
        {
            Guard.NotNull(reader, nameof(reader));

            // this will align to the underlying type when we do a Type.read

            List <CtfFieldValue> values = new List <CtfFieldValue>();

            try
            {
                IntegerLiteral integerValue;
                if (IntegerLiteralString.TryCreate(this.Index, out var integerStringIndex))
                {
                    integerValue = new IntegerLiteral(integerStringIndex);
                }
                else
                {
                    Debug.Assert(parent != null);
                    if (parent == null)
                    {
                        return(null);
                    }

                    var indexField = parent.FindField(this.Index);
                    if (!(indexField is CtfIntegerValue indexValue))
                    {
                        Debug.Assert(false, "is this a valid value?");
                        return(null);
                    }

                    integerValue = indexValue.Value;
                }

                if (integerValue.Signed)
                {
                    if (integerValue.ValueAsLong < 0)
                    {
                        // we shouldn't hit this, it should be caught before now
                        throw new CtfPlaybackException("Negative array indexing is not supported.");
                    }

                    for (long x = 0; x < integerValue.ValueAsLong; x++)
                    {
                        values.Add(this.Type.Read(reader));
                    }

                    return(new CtfArrayValue(values.ToArray()));
                }

                for (ulong x = 0; x < integerValue.ValueAsUlong; x++)
                {
                    values.Add(this.Type.Read(reader));
                }

                return(new CtfArrayValue(values.ToArray()));
            }
            catch (ArgumentException)
            {
                Debug.Assert(false, "What did I miss?");
                return(null);
            }
        }