36 lines
888 B
C++
36 lines
888 B
C++
#ifndef __JABYENGINE__H__
|
|
#define __JABYENGINE__H__
|
|
#include "../stdint.h"
|
|
|
|
namespace JabyEngine {
|
|
struct NextRoutine {
|
|
static constexpr uintptr_t OverlayBit = (1 << ((sizeof(uintptr_t)*8) - 2));
|
|
typedef NextRoutine (*MainRoutine)();
|
|
|
|
uintptr_t value;
|
|
|
|
constexpr static NextRoutine null() {
|
|
return {.value = 0};
|
|
}
|
|
|
|
static NextRoutine from(MainRoutine function) {
|
|
return {.value = reinterpret_cast<uintptr_t>(function)};
|
|
}
|
|
|
|
constexpr bool is_overlay() const {
|
|
return (this->value & OverlayBit);
|
|
}
|
|
|
|
constexpr bool is_absolute() const {
|
|
return !NextRoutine::is_overlay();
|
|
}
|
|
|
|
constexpr bool is_null() const {
|
|
return this->value == 0;
|
|
}
|
|
};
|
|
|
|
typedef NextRoutine::MainRoutine MainRoutine;
|
|
}
|
|
|
|
#endif //!__JABYENGINE__H__
|