2012-05-25 15:19:07 +10:00
|
|
|
/*
|
2018-08-04 15:14:06 +10:00
|
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
2012-05-25 15:19:07 +10:00
|
|
|
*
|
|
|
|
* Copyright 2011 Danny Robson <danny@nerdcruft.net>
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __UTIL_TYPES_BITS_HPP
|
|
|
|
#define __UTIL_TYPES_BITS_HPP
|
|
|
|
|
|
|
|
#include <cstdint>
|
2015-12-10 11:34:34 +11:00
|
|
|
#include <cstddef>
|
2012-05-25 15:19:07 +10:00
|
|
|
|
2018-08-05 14:42:02 +10:00
|
|
|
namespace cruft {
|
2016-10-11 23:47:57 +11:00
|
|
|
template <size_t BITS>
|
|
|
|
struct bits_type;
|
2012-05-25 15:19:07 +10:00
|
|
|
|
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
template <> struct bits_type< 8u> {
|
|
|
|
static const bool has_floating = false;
|
2012-05-25 15:19:07 +10:00
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
typedef uint8_t uint;
|
|
|
|
typedef int8_t sint;
|
|
|
|
typedef uint8_t floating;
|
|
|
|
};
|
2012-05-25 15:19:07 +10:00
|
|
|
|
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
template <> struct bits_type<16u> {
|
|
|
|
static const bool has_floating = false;
|
2012-05-25 15:19:07 +10:00
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
typedef uint16_t uint;
|
|
|
|
typedef int16_t sint;
|
|
|
|
typedef uint16_t floating;
|
|
|
|
};
|
2012-05-25 15:19:07 +10:00
|
|
|
|
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
template <> struct bits_type<32u> {
|
|
|
|
static const bool has_floating = true;
|
2012-05-25 15:19:07 +10:00
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
typedef uint32_t uint;
|
|
|
|
typedef int32_t sint;
|
|
|
|
typedef float floating;
|
|
|
|
};
|
2012-05-25 15:19:07 +10:00
|
|
|
|
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
template <> struct bits_type<64u> {
|
|
|
|
static const bool has_floating = true;
|
2012-05-25 15:19:07 +10:00
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
typedef uint64_t uint;
|
|
|
|
typedef int64_t sint;
|
|
|
|
typedef double floating;
|
|
|
|
};
|
2012-05-25 15:19:07 +10:00
|
|
|
|
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
template <size_t BYTES>
|
|
|
|
struct bytes_type : public bits_type<BYTES * 8u>
|
|
|
|
{ };
|
2015-12-10 11:34:56 +11:00
|
|
|
|
|
|
|
|
2016-10-11 23:47:57 +11:00
|
|
|
template <typename T>
|
|
|
|
struct sized_type : public bits_type<sizeof(T) * 8u>
|
|
|
|
{ };
|
2018-01-17 20:09:21 +11:00
|
|
|
|
|
|
|
|
|
|
|
template <std::size_t Size>
|
|
|
|
using bits_uint_t = typename bits_type<Size>::uint;
|
|
|
|
|
|
|
|
template <std::size_t Size>
|
|
|
|
using bytes_uint_t = typename bytes_type<Size>::uint;
|
2016-10-11 23:47:57 +11:00
|
|
|
}
|
2012-05-25 15:19:07 +10:00
|
|
|
#endif
|