예제 #1
0
        /// <inheritdoc />
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="builder"/> is <see langword="null"/>.</exception>
        public sealed override void Write(IPacketBuilder builder)
        {
            Guard.NotNull(() => builder, builder);

            int bitCount    = Bits.Length;
            int numberCount = bitCount / IntBitCount;
            var numbers     = new uint[numberCount];

            int numberIndex = 0;

            for (int i = 0; i < bitCount; i++)
            {
                if (i > 0 && i % IntBitCount == 0)
                {
                    numberIndex++;
                }
                else
                {
                    // TODO: Actually figure out if this is how they're packed.
                    numbers[numberIndex] <<= 1;
                }

                numbers[numberIndex] |= Convert.ToUInt32(Bits[i]);
            }

            for (int i = 0; i < numberCount; i++)
            {
                builder.WriteInt32(numbers[i]);
            }
        }
예제 #2
0
        /// <inheritdoc />
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="builder"/> is <see langword="null"/>.</exception>
        public override sealed void Write(IPacketBuilder builder)
        {
            Guard.NotNull(() => builder, builder);

            int bitCount = this.Bits.Length;
            int numberCount = bitCount / IntBitCount;
            var numbers = new uint[numberCount];

            int numberIndex = 0;
            for (int i = 0; i < bitCount; i++)
            {
                if (i > 0 && i % IntBitCount == 0)
                {
                    numberIndex++;
                }
                else
                {
                    // TODO: Actually figure out if this is how they're packed.
                    numbers[numberIndex] <<= 1;
                }

                numbers[numberIndex] |= Convert.ToUInt32(this.Bits[i]);
            }

            for (int i = 0; i < numberCount; i++)
            {
                builder.WriteInt32(numbers[i]);
            }
        }
예제 #3
0
        /// <summary>
        /// Writes an <see cref="Int32" /> from the <see cref="PacketValueAttribute" /> value of the specified enum value.
        /// </summary>
        /// <param name="builder">The <see cref="IPacketBuilder">packet builder</see> to use.</param>
        /// <param name="enumValue">An enum value decorated with <see cref="PacketValueAttribute" />.</param>
        /// <inheritdoc cref="PacketValueExtensions.ToPacketValue(Enum)" select="exception[@cref='ArgumentException']" />
        /// <inheritdoc cref="PacketValueExtensions.ToPacketValue(Enum)" select="exception[@cref='ArgumentOutOfRangeException']" />
        /// <inheritdoc cref="PacketBuilder.WriteInt32(int)" select="exception[@cref='ObjectDisposedException']" />
        public static void WriteInt32(this IPacketBuilder builder, Enum enumValue)
        {
            Guard.NotNull(() => builder, builder);

            builder.WriteInt32(enumValue.ToPacketValue());
        }