[ox/std] Add optional file/line information to ox::Error
This commit is contained in:
parent
d49f35f0f3
commit
0da80081f3
11
deps/ox/src/ox/std/bitops.hpp
vendored
11
deps/ox/src/ox/std/bitops.hpp
vendored
@ -8,8 +8,6 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "types.hpp"
|
|
||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@ -18,4 +16,13 @@ inline constexpr T rotateLeft(T i, int shift) {
|
|||||||
return (i << shift) | (i >> (bits - shift));
|
return (i << shift) | (i >> (bits - shift));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
constexpr T onMask(int bits) {
|
||||||
|
T out = 0;
|
||||||
|
for (auto i = 0; i < bits; i++) {
|
||||||
|
out |= 1 << i;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
6
deps/ox/src/ox/std/random.hpp
vendored
6
deps/ox/src/ox/std/random.hpp
vendored
@ -8,15 +8,13 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
uint64_t ox_rand();
|
#include "types.hpp"
|
||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
typedef uint64_t RandomSeed[2];
|
using RandomSeed = uint64_t[2];
|
||||||
|
|
||||||
class Random {
|
class Random {
|
||||||
public:
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
RandomSeed m_seed;
|
RandomSeed m_seed;
|
||||||
|
|
||||||
|
36
deps/ox/src/ox/std/types.hpp
vendored
36
deps/ox/src/ox/std/types.hpp
vendored
@ -8,6 +8,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "bitops.hpp"
|
||||||
|
|
||||||
#if OX_USE_STDLIB
|
#if OX_USE_STDLIB
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
@ -52,7 +54,39 @@ typedef uint32_t uintptr_t;
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
using Error = uint32_t;
|
using Error = uint64_t;
|
||||||
|
|
||||||
|
struct ErrorInfo {
|
||||||
|
const char *file = nullptr;
|
||||||
|
int line = -1;
|
||||||
|
Error errCode = 0;
|
||||||
|
|
||||||
|
ErrorInfo() = default;
|
||||||
|
|
||||||
|
ErrorInfo(Error err) {
|
||||||
|
this->file = reinterpret_cast<const char*>(err & onMask<Error>(48));
|
||||||
|
this->line = static_cast<int>((err >> 48) & onMask<Error>(5));
|
||||||
|
this->errCode = (err >> 59) & onMask<Error>(11);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr Error ErrorTags(Error line, Error errCode) {
|
||||||
|
line &= onMask<Error>(5);
|
||||||
|
line <<= 48;
|
||||||
|
errCode &= onMask<Error>(11);
|
||||||
|
errCode <<= 59;
|
||||||
|
return errCode | line;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
#define OxError(x) reinterpret_cast<uint64_t>(__FILE__) | ErrorTags(__LINE__, x)
|
||||||
|
#else
|
||||||
|
#define OxError(x) x
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace ox {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct ValErr {
|
struct ValErr {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user