19#ifndef FENNEC_MEMORY_BYTES_H
20#define FENNEC_MEMORY_BYTES_H
24#include <fennec/lang/hashing.h>
50 : _arr(static_cast<
byte_t*>(arr))
60 : _carr(static_cast<const
byte_t*>(arr))
69 template<
typename T,
size_t n>
78 template<
typename T,
size_t n>
85 constexpr size_t size()
const {
94 assertd(not _const,
"Attempted to Access Const-Qualified Memory as Non-Const");
95 assertd(i >= 0 && (
size_t)i < _size,
"Array Out of Bounds");
104 assertd(not _const,
"Attempted to Access Const-Qualified Memory as Non-Const");
105 assertd(i >= 0 && (
size_t)i < _size,
"Array Out of Bounds");
116 return static_cast<T*
>(temp);
124 constexpr const T*
cast()
const {
125 const void* temp = _carr;
126 return static_cast<const T*
>(temp);
142 size_t operator()(
const byte_array& bytes)
const {
145 static constexpr uint64_t m = 0xc6a4a7935bd1e995;
146 static constexpr uint64_t s = 0xff51afd7ed558ccd;
167 case 7: h ^=
uint64_t(b[6]) << 48; __attribute__((fallthrough));
168 case 6: h ^=
uint64_t(b[5]) << 40; __attribute__((fallthrough));
169 case 5: h ^=
uint64_t(b[4]) << 32; __attribute__((fallthrough));
170 case 4: h ^=
uint64_t(b[3]) << 24; __attribute__((fallthrough));
171 case 3: h ^=
uint64_t(b[2]) << 16; __attribute__((fallthrough));
172 case 2: h ^=
uint64_t(b[1]) << 8; __attribute__((fallthrough));
constexpr genType y()
Definition constants.h:672
container for handling byte arrays
Definition bytes.h:34
constexpr byte_array(void *arr, size_t n)
Buffer Constructor.
Definition bytes.h:49
constexpr T * cast()
Cast Function.
Definition bytes.h:114
constexpr byte_t operator[](int i) const
Const Array Access Operator.
Definition bytes.h:103
constexpr const T * cast() const
Const Cast Function.
Definition bytes.h:124
constexpr byte_array(const T(&arr)[n])
Const Buffer Constructor.
Definition bytes.h:79
constexpr byte_t & operator[](int i)
Array Access Operator.
Definition bytes.h:93
constexpr byte_array(const void *arr, size_t n)
Const Buffer Constructor.
Definition bytes.h:59
constexpr byte_array()
Default Constructor.
Definition bytes.h:39
constexpr size_t size() const
Definition bytes.h:85
constexpr byte_array(T(&arr)[n])
Buffer Constructor.
Definition bytes.h:70
Struct for hashing types, there is no default hashing function.
Definition hashing.h:32
::uint64_t uint64_t
Unsigned 64-bit integer.
Definition types.h:275
unsigned char byte_t
A type capable of holding a single byte.
Definition types.h:216
::uint8_t uint8_t
Unsigned 8-bit integer.
Definition types.h:272