mirror of https://github.com/oliverbooth/X10D
(#28) Add floating point read support
Introduces: - ReadDecimal([Endianness]) - ReadDouble([Endianness]) - ReadSingle([Endianness])
This commit is contained in:
parent
ba71f814c0
commit
34ee60437b
|
@ -53,6 +53,68 @@ namespace X10D.StreamExtensions
|
||||||
return crypt.ComputeHash(stream);
|
return crypt.ComputeHash(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads a decimal value from the current stream using the system's default endian encoding, and advances the stream
|
||||||
|
/// position by sixteen bytes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream to read.</param>
|
||||||
|
/// <returns>A sixteen-byte decimal value read from the stream.</returns>
|
||||||
|
public static decimal ReadDecimal(this Stream stream)
|
||||||
|
{
|
||||||
|
return stream.ReadDecimal(DefaultEndianness);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads a decimal value from the current stream using a specified endian encoding, and advances the stream position
|
||||||
|
/// by sixteen bytes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream from which the value should be read.</param>
|
||||||
|
/// <param name="endianness">The endian encoding to use.</param>
|
||||||
|
/// <returns>A decimal value read from the stream.</returns>
|
||||||
|
public static decimal ReadDecimal(this Stream stream, Endianness endianness)
|
||||||
|
{
|
||||||
|
const int decimalSize = sizeof(decimal);
|
||||||
|
const int int32Size = sizeof(int);
|
||||||
|
const int partitionSize = decimalSize / int32Size;
|
||||||
|
|
||||||
|
var buffer = new byte[decimalSize];
|
||||||
|
stream.Read(buffer, 0, decimalSize);
|
||||||
|
|
||||||
|
Util.SwapIfNeeded(ref buffer, endianness);
|
||||||
|
|
||||||
|
var bits = new int[partitionSize];
|
||||||
|
for (var index = 0; index < partitionSize; index += int32Size)
|
||||||
|
{
|
||||||
|
Array.Copy(buffer, index, bits, 0, int32Size);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new decimal(bits);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads a double-precision floating point value from the current stream using the system's default endian encoding,
|
||||||
|
/// and advances the stream position by eight bytes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream from which the value should be read.</param>
|
||||||
|
/// <returns>A double-precision floating point value read from the stream.</returns>
|
||||||
|
public static double ReadDouble(this Stream stream)
|
||||||
|
{
|
||||||
|
return stream.ReadDouble(DefaultEndianness);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads a double-precision floating point value from the current stream using a specified endian encoding, and
|
||||||
|
/// advances the stream position by eight bytes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream from which the value should be read.</param>
|
||||||
|
/// <param name="endianness">The endian encoding to use.</param>
|
||||||
|
/// <returns>A double-precision floating point value read from the stream.</returns>
|
||||||
|
public static double ReadDouble(this Stream stream, Endianness endianness)
|
||||||
|
{
|
||||||
|
var value = ReadInternal<double>(stream, endianness);
|
||||||
|
return BitConverter.ToDouble(value, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads a two-byte signed integer from the current stream using the system's default endian encoding, and advances
|
/// Reads a two-byte signed integer from the current stream using the system's default endian encoding, and advances
|
||||||
/// the stream position by two bytes.
|
/// the stream position by two bytes.
|
||||||
|
@ -125,6 +187,30 @@ namespace X10D.StreamExtensions
|
||||||
return BitConverter.ToInt64(value, 0);
|
return BitConverter.ToInt64(value, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads a single-precision floating point value from the current stream using the system's default endian encoding,
|
||||||
|
/// and advances the stream position by four bytes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream from which the value should be read.</param>
|
||||||
|
/// <returns>A single-precision floating point value read from the stream.</returns>
|
||||||
|
public static double ReadSingle(this Stream stream)
|
||||||
|
{
|
||||||
|
return stream.ReadSingle(DefaultEndianness);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Reads a double-precision floating point value from the current stream using a specified endian encoding, and
|
||||||
|
/// advances the stream position by four bytes.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="stream">The stream from which the value should be read.</param>
|
||||||
|
/// <param name="endianness">The endian encoding to use.</param>
|
||||||
|
/// <returns>A single-precision floating point value read from the stream.</returns>
|
||||||
|
public static double ReadSingle(this Stream stream, Endianness endianness)
|
||||||
|
{
|
||||||
|
var value = ReadInternal<double>(stream, endianness);
|
||||||
|
return BitConverter.ToSingle(value, 0);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reads a two-byte unsigned integer from the current stream using the system's default endian encoding, and advances
|
/// Reads a two-byte unsigned integer from the current stream using the system's default endian encoding, and advances
|
||||||
/// the stream position by two bytes.
|
/// the stream position by two bytes.
|
||||||
|
|
Loading…
Reference in New Issue