mirror of https://github.com/SeanOMik/libki.git
pclass: Implement floating point primitives
This commit is contained in:
parent
1fbfaee8cb
commit
fd84614450
|
@ -69,3 +69,4 @@ namespace pclass
|
||||||
|
|
||||||
// Include all template specializations
|
// Include all template specializations
|
||||||
#include "ki/pclass/types/IntegralPrimitiveType.h"
|
#include "ki/pclass/types/IntegralPrimitiveType.h"
|
||||||
|
#include "ki/pclass/types/FloatingPointPrimitiveType.h"
|
|
@ -0,0 +1,51 @@
|
||||||
|
#pragma once
|
||||||
|
#include <type_traits>
|
||||||
|
#include "ki/util/BitTypes.h"
|
||||||
|
|
||||||
|
namespace ki
|
||||||
|
{
|
||||||
|
namespace pclass
|
||||||
|
{
|
||||||
|
template <typename ValueT>
|
||||||
|
struct PrimitiveTypeWriter<
|
||||||
|
ValueT,
|
||||||
|
typename std::enable_if<std::is_floating_point<ValueT>::value>::type
|
||||||
|
>
|
||||||
|
{
|
||||||
|
static void write_to(BitStream &stream, const ValueT &value)
|
||||||
|
{
|
||||||
|
// Reinterpret the reference as a reference to an integer
|
||||||
|
const uint_type &v = *((const uint_type *)&value);
|
||||||
|
stream.write<uint_type>(v, bitsizeof<ValueT>::value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* An unsigned integer type with the same size as the floating point type
|
||||||
|
* ValueT.
|
||||||
|
*/
|
||||||
|
using uint_type = typename bits<bitsizeof<ValueT>::value>::uint_type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename ValueT>
|
||||||
|
struct PrimitiveTypeReader<
|
||||||
|
ValueT,
|
||||||
|
typename std::enable_if<std::is_floating_point<ValueT>::value>::type
|
||||||
|
>
|
||||||
|
{
|
||||||
|
static void read_from(BitStream &stream, ValueT &value)
|
||||||
|
{
|
||||||
|
// Reinterpret the reference as a reference to an integer
|
||||||
|
uint_type &v = *((uint_type *)&value);
|
||||||
|
v = stream.read<uint_type>(bitsizeof<ValueT>::value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* An unsigned integer type with the same size as the floating point type
|
||||||
|
* ValueT.
|
||||||
|
*/
|
||||||
|
using uint_type = typename bits<bitsizeof<ValueT>::value>::uint_type;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
#include "ki/util/BitTypes.h"
|
||||||
|
|
||||||
namespace ki
|
namespace ki
|
||||||
{
|
{
|
||||||
|
|
|
@ -65,8 +65,10 @@ namespace pclass
|
||||||
define_primitive<bi<24>>("s24");
|
define_primitive<bi<24>>("s24");
|
||||||
define_primitive<bui<24>>("u24");
|
define_primitive<bui<24>>("u24");
|
||||||
|
|
||||||
// TODO: Define bit integer types
|
// Define floating point types
|
||||||
// TODO: Define floating point types
|
define_primitive<float>("float");
|
||||||
|
define_primitive<double>("double");
|
||||||
|
|
||||||
// TODO: Define bit floating point types
|
// TODO: Define bit floating point types
|
||||||
// TODO: Define string types
|
// TODO: Define string types
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue