[constexpr] BEInt
This commit is contained in:
parent
2fbd34f89a
commit
f8ebe1dacd
58
src/hb.hh
58
src/hb.hh
|
@ -530,25 +530,19 @@ template <typename Type>
|
||||||
struct BEInt<Type, 1>
|
struct BEInt<Type, 1>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BEInt<Type, 1>& operator = (Type V)
|
BEInt () = default;
|
||||||
{
|
constexpr BEInt (Type V) : v {V} {}
|
||||||
v = V;
|
constexpr operator Type () const { return v; }
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
operator Type () const { return v; }
|
|
||||||
private: uint8_t v;
|
private: uint8_t v;
|
||||||
};
|
};
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
struct BEInt<Type, 2>
|
struct BEInt<Type, 2>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BEInt<Type, 2>& operator = (Type V)
|
BEInt () = default;
|
||||||
{
|
constexpr BEInt (Type V) : v {(V >> 8) & 0xFF,
|
||||||
v[0] = (V >> 8) & 0xFF;
|
(V ) & 0xFF} {}
|
||||||
v[1] = (V ) & 0xFF;
|
constexpr operator Type () const
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
operator Type () const
|
|
||||||
{
|
{
|
||||||
#if ((defined(__GNUC__) && __GNUC__ >= 5) || defined(__clang__)) && \
|
#if ((defined(__GNUC__) && __GNUC__ >= 5) || defined(__clang__)) && \
|
||||||
defined(__BYTE_ORDER) && \
|
defined(__BYTE_ORDER) && \
|
||||||
|
@ -571,40 +565,28 @@ template <typename Type>
|
||||||
struct BEInt<Type, 3>
|
struct BEInt<Type, 3>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BEInt<Type, 3>& operator = (Type V)
|
BEInt () = default;
|
||||||
{
|
constexpr BEInt (Type V) : v {(V >> 16) & 0xFF,
|
||||||
v[0] = (V >> 16) & 0xFF;
|
(V >> 8) & 0xFF,
|
||||||
v[1] = (V >> 8) & 0xFF;
|
(V ) & 0xFF} {}
|
||||||
v[2] = (V ) & 0xFF;
|
constexpr operator Type () const { return (v[0] << 16)
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
operator Type () const
|
|
||||||
{
|
|
||||||
return (v[0] << 16)
|
|
||||||
+ (v[1] << 8)
|
+ (v[1] << 8)
|
||||||
+ (v[2] );
|
+ (v[2] ); }
|
||||||
}
|
|
||||||
private: uint8_t v[3];
|
private: uint8_t v[3];
|
||||||
};
|
};
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
struct BEInt<Type, 4>
|
struct BEInt<Type, 4>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
BEInt<Type, 4>& operator = (Type V)
|
BEInt () = default;
|
||||||
{
|
constexpr BEInt (Type V) : v {(V >> 24) & 0xFF,
|
||||||
v[0] = (V >> 24) & 0xFF;
|
(V >> 16) & 0xFF,
|
||||||
v[1] = (V >> 16) & 0xFF;
|
(V >> 8) & 0xFF,
|
||||||
v[2] = (V >> 8) & 0xFF;
|
(V ) & 0xFF} {}
|
||||||
v[3] = (V ) & 0xFF;
|
constexpr operator Type () const { return (v[0] << 24)
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
operator Type () const
|
|
||||||
{
|
|
||||||
return (v[0] << 24)
|
|
||||||
+ (v[1] << 16)
|
+ (v[1] << 16)
|
||||||
+ (v[2] << 8)
|
+ (v[2] << 8)
|
||||||
+ (v[3] );
|
+ (v[3] ); }
|
||||||
}
|
|
||||||
private: uint8_t v[4];
|
private: uint8_t v[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue