예제 #1
0
        public void SetUInt32(long index, EcmaValue value, DataViewEndianness isLittleEndian)
        {
            Guard.BufferNotDetached(this);
            uint uintValue = value.ToUInt32();

            ThrowIfOutOfBound(index, sizeof(uint));
            this.Buffer.SetValue(index + ByteOffset, CheckAndSwap(uintValue, isLittleEndian));
        }
예제 #2
0
        public void SetFloat64(long index, EcmaValue value, DataViewEndianness isLittleEndian)
        {
            Guard.BufferNotDetached(this);
            double doubleValue = value.ToDouble();

            ThrowIfOutOfBound(index, sizeof(double));
            this.Buffer.SetValue(index + ByteOffset, CheckAndSwap(doubleValue, isLittleEndian));
        }
예제 #3
0
        private static bool IsByteSwapRequired(DataViewEndianness endian)
        {
            switch (endian)
            {
            case DataViewEndianness.BigEndian:
                return(BitConverter.IsLittleEndian);

            case DataViewEndianness.LittleEndian:
                return(!BitConverter.IsLittleEndian);
            }
            return(false);
        }
예제 #4
0
 public EcmaValue GetUInt16(long index, DataViewEndianness isLittleEndian)
 {
     Guard.BufferNotDetached(this);
     ThrowIfOutOfBound(index, sizeof(ushort));
     return(CheckAndSwap(this.Buffer.GetUInt16(index + ByteOffset), isLittleEndian));
 }
예제 #5
0
 private static float CheckAndSwap(float v, DataViewEndianness isLittleEndian)
 {
     return(IsByteSwapRequired(isLittleEndian) ? Int32BitsToSingle(SwapBytes(SingleToInt32Bits(v))) : v);
 }
예제 #6
0
 private static double CheckAndSwap(double v, DataViewEndianness isLittleEndian)
 {
     return(IsByteSwapRequired(isLittleEndian) ? BitConverter.Int64BitsToDouble(SwapBytes(BitConverter.DoubleToInt64Bits(v))) : v);
 }
예제 #7
0
 private static uint CheckAndSwap(uint v, DataViewEndianness isLittleEndian)
 {
     return(IsByteSwapRequired(isLittleEndian) ? SwapBytes(v) : v);
 }