**Sample API Doc**
1.1 Release
This is the markdeep generic "Company API" template. Replace
`company-logo-512.png` with your organization's logo and adjust the
`company-api.css` styling to match the desired colors.
See `CA::OpenHandle()` for an example of an auto-generated API link.
The rest of the information on this page is bogus placeholder to show the formatting.
API Modules
====================================================================================
The CA library is a layer on top of the resource manager and parsing libraries that
provides utilities for streaming processing and client-side process construction.
ENUMS
====================================================================================
ClockDirection
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum ClockDirection {
CLOCKWISE,
COUNTERCLOCKWISE
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Orientation
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum Orientation {
HORIZONTAL,
VERTICAL
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HAlign
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum HAlign {
HALIGN_LEFT,
HALIGN_CENTER,
HALIGN_RIGHT
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VAlign
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum VAlign {
VALIGN_TOP,
VALIGN_CENTER,
VALIGN_BOTTOM
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Margin
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum Margin {
MARGIN_LEFT,
MARGIN_TOP,
MARGIN_RIGHT,
MARGIN_BOTTOM
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Side
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum Side {
SIDE_LEFT,
SIDE_TOP,
SIDE_RIGHT,
SIDE_BOTTOM
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Corner
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum Corner {
CORNER_TOP_LEFT,
CORNER_TOP_RIGHT,
CORNER_BOTTOM_RIGHT,
CORNER_BOTTOM_LEFT
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Error
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum Error {
OK,
FAILED,
ERR_UNAVAILABLE,
ERR_UNCONFIGURED,
ERR_UNAUTHORIZED,
ERR_PARAMETER_RANGE_ERROR,
ERR_OUT_OF_MEMORY,
ERR_FILE_NOT_FOUND,
ERR_FILE_BAD_DRIVE,
ERR_FILE_BAD_PATH,
ERR_FILE_NO_PERMISSION,
ERR_FILE_ALREADY_IN_USE,
ERR_FILE_CANT_OPEN,
ERR_FILE_CANT_WRITE,
ERR_FILE_CANT_READ,
ERR_FILE_UNRECOGNIZED,
ERR_FILE_CORRUPT,
ERR_FILE_MISSING_DEPENDENCIES,
ERR_FILE_EOF,
ERR_CANT_OPEN,
ERR_CANT_CREATE,
ERR_QUERY_FAILED,
ERR_ALREADY_IN_USE,
ERR_LOCKED,
ERR_TIMEOUT,
ERR_CANT_CONNECT,
ERR_CANT_RESOLVE,
ERR_CONNECTION_ERROR,
ERR_CANT_ACQUIRE_RESOURCE,
ERR_CANT_FORK,
ERR_INVALID_DATA,
ERR_INVALID_PARAMETER,
ERR_ALREADY_EXISTS,
ERR_DOES_NOT_EXIST,
ERR_DATABASE_CANT_READ,
ERR_DATABASE_CANT_WRITE,
ERR_COMPILATION_FAILED,
ERR_METHOD_NOT_FOUND,
ERR_LINK_FAILED,
ERR_SCRIPT_FAILED,
ERR_CYCLIC_LINK,
ERR_INVALID_DECLARATION,
ERR_DUPLICATE_SYMBOL,
ERR_PARSE_ERROR,
ERR_BUSY,
ERR_SKIP,
ERR_HELP,
ERR_BUG,
ERR_PRINTER_ON_FIRE,
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum {
POOL_ALLOCATOR_INVALID_ID = -1
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum {
KEYBOARD_SPKEY = (1 << 24)
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KeyList
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum KeyList {
KEY_ESCAPE = KEYBOARD_SPKEY | 0x01,
KEY_TAB = KEYBOARD_SPKEY | 0x02,
KEY_BACKTAB = KEYBOARD_SPKEY | 0x03,
KEY_BACKSPACE = KEYBOARD_SPKEY | 0x04,
KEY_ENTER = KEYBOARD_SPKEY | 0x05,
KEY_KP_ENTER = KEYBOARD_SPKEY | 0x06,
KEY_INSERT = KEYBOARD_SPKEY | 0x07,
KEY_DELETE = KEYBOARD_SPKEY | 0x08,
KEY_PAUSE = KEYBOARD_SPKEY | 0x09,
KEY_PRINT = KEYBOARD_SPKEY | 0x0A,
KEY_SYSREQ = KEYBOARD_SPKEY | 0x0B,
KEY_CLEAR = KEYBOARD_SPKEY | 0x0C,
KEY_HOME = KEYBOARD_SPKEY | 0x0D,
KEY_END = KEYBOARD_SPKEY | 0x0E,
KEY_LEFT = KEYBOARD_SPKEY | 0x0F,
KEY_UP = KEYBOARD_SPKEY | 0x10,
KEY_RIGHT = KEYBOARD_SPKEY | 0x11,
KEY_DOWN = KEYBOARD_SPKEY | 0x12,
KEY_PAGEUP = KEYBOARD_SPKEY | 0x13,
KEY_PAGEDOWN = KEYBOARD_SPKEY | 0x14,
KEY_SHIFT = KEYBOARD_SPKEY | 0x15,
KEY_CONTROL = KEYBOARD_SPKEY | 0x16,
KEY_META = KEYBOARD_SPKEY | 0x17,
KEY_ALT = KEYBOARD_SPKEY | 0x18,
KEY_CAPSLOCK = KEYBOARD_SPKEY | 0x19,
KEY_NUMLOCK = KEYBOARD_SPKEY | 0x1A,
KEY_SCROLLLOCK = KEYBOARD_SPKEY | 0x1B,
KEY_F1 = KEYBOARD_SPKEY | 0x1C,
KEY_F2 = KEYBOARD_SPKEY | 0x1D,
KEY_F3 = KEYBOARD_SPKEY | 0x1E,
KEY_F4 = KEYBOARD_SPKEY | 0x1F,
KEY_F5 = KEYBOARD_SPKEY | 0x20,
KEY_F6 = KEYBOARD_SPKEY | 0x21,
KEY_F7 = KEYBOARD_SPKEY | 0x22,
KEY_F8 = KEYBOARD_SPKEY | 0x23,
KEY_F9 = KEYBOARD_SPKEY | 0x24,
KEY_F10 = KEYBOARD_SPKEY | 0x25,
KEY_F11 = KEYBOARD_SPKEY | 0x26,
KEY_F12 = KEYBOARD_SPKEY | 0x27,
KEY_F13 = KEYBOARD_SPKEY | 0x28,
KEY_F14 = KEYBOARD_SPKEY | 0x29,
KEY_F15 = KEYBOARD_SPKEY | 0x2A,
KEY_F16 = KEYBOARD_SPKEY | 0x2B,
KEY_KP_MULTIPLY = KEYBOARD_SPKEY | 0x81,
KEY_KP_DIVIDE = KEYBOARD_SPKEY | 0x82,
KEY_KP_SUBTRACT = KEYBOARD_SPKEY | 0x83,
KEY_KP_PERIOD = KEYBOARD_SPKEY | 0x84,
KEY_KP_ADD = KEYBOARD_SPKEY | 0x85,
KEY_KP_0 = KEYBOARD_SPKEY | 0x86,
KEY_KP_1 = KEYBOARD_SPKEY | 0x87,
KEY_KP_2 = KEYBOARD_SPKEY | 0x88,
KEY_KP_3 = KEYBOARD_SPKEY | 0x89,
KEY_KP_4 = KEYBOARD_SPKEY | 0x8A,
KEY_KP_5 = KEYBOARD_SPKEY | 0x8B,
KEY_KP_6 = KEYBOARD_SPKEY | 0x8C,
KEY_KP_7 = KEYBOARD_SPKEY | 0x8D,
KEY_KP_8 = KEYBOARD_SPKEY | 0x8E,
KEY_KP_9 = KEYBOARD_SPKEY | 0x8F,
KEY_SUPER_L = KEYBOARD_SPKEY | 0x2C,
KEY_SUPER_R = KEYBOARD_SPKEY | 0x2D,
KEY_MENU = KEYBOARD_SPKEY | 0x2E,
KEY_HYPER_L = KEYBOARD_SPKEY | 0x2F,
KEY_HYPER_R = KEYBOARD_SPKEY | 0x30,
KEY_HELP = KEYBOARD_SPKEY | 0x31,
KEY_DIRECTION_L = KEYBOARD_SPKEY | 0x32,
KEY_DIRECTION_R = KEYBOARD_SPKEY | 0x33,
KEY_BACK = KEYBOARD_SPKEY | 0x40,
KEY_FORWARD = KEYBOARD_SPKEY | 0x41,
KEY_STOP = KEYBOARD_SPKEY | 0x42,
KEY_REFRESH = KEYBOARD_SPKEY | 0x43,
KEY_VOLUMEDOWN = KEYBOARD_SPKEY | 0x44,
KEY_VOLUMEMUTE = KEYBOARD_SPKEY | 0x45,
KEY_VOLUMEUP = KEYBOARD_SPKEY | 0x46,
KEY_BASSBOOST = KEYBOARD_SPKEY | 0x47,
KEY_BASSUP = KEYBOARD_SPKEY | 0x48,
KEY_BASSDOWN = KEYBOARD_SPKEY | 0x49,
KEY_TREBLEUP = KEYBOARD_SPKEY | 0x4A,
KEY_TREBLEDOWN = KEYBOARD_SPKEY | 0x4B,
KEY_MEDIAPLAY = KEYBOARD_SPKEY | 0x4C,
KEY_MEDIASTOP = KEYBOARD_SPKEY | 0x4D,
KEY_MEDIAPREVIOUS = KEYBOARD_SPKEY | 0x4E,
KEY_MEDIANEXT = KEYBOARD_SPKEY | 0x4F,
KEY_MEDIARECORD = KEYBOARD_SPKEY | 0x50,
KEY_HOMEPAGE = KEYBOARD_SPKEY | 0x51,
KEY_FAVORITES = KEYBOARD_SPKEY | 0x52,
KEY_SEARCH = KEYBOARD_SPKEY | 0x53,
KEY_STANDBY = KEYBOARD_SPKEY | 0x54,
KEY_OPENURL = KEYBOARD_SPKEY | 0x55,
KEY_LAUNCHMAIL = KEYBOARD_SPKEY | 0x56,
KEY_LAUNCHMEDIA = KEYBOARD_SPKEY | 0x57,
KEY_LAUNCH0 = KEYBOARD_SPKEY | 0x58,
KEY_LAUNCH1 = KEYBOARD_SPKEY | 0x59,
KEY_LAUNCH2 = KEYBOARD_SPKEY | 0x5A,
KEY_LAUNCH3 = KEYBOARD_SPKEY | 0x5B,
KEY_LAUNCH4 = KEYBOARD_SPKEY | 0x5C,
KEY_LAUNCH5 = KEYBOARD_SPKEY | 0x5D,
KEY_LAUNCH6 = KEYBOARD_SPKEY | 0x5E,
KEY_LAUNCH7 = KEYBOARD_SPKEY | 0x5F,
KEY_LAUNCH8 = KEYBOARD_SPKEY | 0x60,
KEY_LAUNCH9 = KEYBOARD_SPKEY | 0x61,
KEY_LAUNCHA = KEYBOARD_SPKEY | 0x62,
KEY_LAUNCHB = KEYBOARD_SPKEY | 0x63,
KEY_LAUNCHC = KEYBOARD_SPKEY | 0x64,
KEY_LAUNCHD = KEYBOARD_SPKEY | 0x65,
KEY_LAUNCHE = KEYBOARD_SPKEY | 0x66,
KEY_LAUNCHF = KEYBOARD_SPKEY | 0x67,
KEY_UNKNOWN = KEYBOARD_SPKEY | 0xFFFFFF,
KEY_SPACE = 0x0020,
KEY_EXCLAM = 0x0021,
KEY_QUOTEDBL = 0x0022,
KEY_NUMBERSIGN = 0x0023,
KEY_DOLLAR = 0x0024,
KEY_PERCENT = 0x0025,
KEY_AMPERSAND = 0x0026,
KEY_APOSTROPHE = 0x0027,
KEY_PARENLEFT = 0x0028,
KEY_PARENRIGHT = 0x0029,
KEY_ASTERISK = 0x002A,
KEY_PLUS = 0x002B,
KEY_COMMA = 0x002C,
KEY_MINUS = 0x002D,
KEY_PERIOD = 0x002E,
KEY_SLASH = 0x002F,
KEY_0 = 0x0030,
KEY_1 = 0x0031,
KEY_2 = 0x0032,
KEY_3 = 0x0033,
KEY_4 = 0x0034,
KEY_5 = 0x0035,
KEY_6 = 0x0036,
KEY_7 = 0x0037,
KEY_8 = 0x0038,
KEY_9 = 0x0039,
KEY_COLON = 0x003A,
KEY_SEMICOLON = 0x003B,
KEY_LESS = 0x003C,
KEY_EQUAL = 0x003D,
KEY_GREATER = 0x003E,
KEY_QUESTION = 0x003F,
KEY_AT = 0x0040,
KEY_A = 0x0041,
KEY_B = 0x0042,
KEY_C = 0x0043,
KEY_D = 0x0044,
KEY_E = 0x0045,
KEY_F = 0x0046,
KEY_G = 0x0047,
KEY_H = 0x0048,
KEY_I = 0x0049,
KEY_J = 0x004A,
KEY_K = 0x004B,
KEY_L = 0x004C,
KEY_M = 0x004D,
KEY_N = 0x004E,
KEY_O = 0x004F,
KEY_P = 0x0050,
KEY_Q = 0x0051,
KEY_R = 0x0052,
KEY_S = 0x0053,
KEY_T = 0x0054,
KEY_U = 0x0055,
KEY_V = 0x0056,
KEY_W = 0x0057,
KEY_X = 0x0058,
KEY_Y = 0x0059,
KEY_Z = 0x005A,
KEY_BRACKETLEFT = 0x005B,
KEY_BACKSLASH = 0x005C,
KEY_BRACKETRIGHT = 0x005D,
KEY_ASCIICIRCUM = 0x005E,
KEY_UNDERSCORE = 0x005F,
KEY_QUOTELEFT = 0x0060,
KEY_BRACELEFT = 0x007B,
KEY_BAR = 0x007C,
KEY_BRACERIGHT = 0x007D,
KEY_ASCIITILDE = 0x007E,
KEY_NOBREAKSPACE = 0x00A0,
KEY_EXCLAMDOWN = 0x00A1,
KEY_CENT = 0x00A2,
KEY_STERLING = 0x00A3,
KEY_CURRENCY = 0x00A4,
KEY_YEN = 0x00A5,
KEY_BROKENBAR = 0x00A6,
KEY_SECTION = 0x00A7,
KEY_DIAERESIS = 0x00A8,
KEY_COPYRIGHT = 0x00A9,
KEY_ORDFEMININE = 0x00AA,
KEY_GUILLEMOTLEFT = 0x00AB,
KEY_NOTSIGN = 0x00AC,
KEY_HYPHEN = 0x00AD,
KEY_REGISTERED = 0x00AE,
KEY_MACRON = 0x00AF,
KEY_DEGREE = 0x00B0,
KEY_PLUSMINUS = 0x00B1,
KEY_TWOSUPERIOR = 0x00B2,
KEY_THREESUPERIOR = 0x00B3,
KEY_ACUTE = 0x00B4,
KEY_MU = 0x00B5,
KEY_PARAGRAPH = 0x00B6,
KEY_PERIODCENTERED = 0x00B7,
KEY_CEDILLA = 0x00B8,
KEY_ONESUPERIOR = 0x00B9,
KEY_MASCULINE = 0x00BA,
KEY_GUILLEMOTRIGHT = 0x00BB,
KEY_ONEQUARTER = 0x00BC,
KEY_ONEHALF = 0x00BD,
KEY_THREEQUARTERS = 0x00BE,
KEY_QUESTIONDOWN = 0x00BF,
KEY_AGRAVE = 0x00C0,
KEY_AACUTE = 0x00C1,
KEY_ACIRCUMFLEX = 0x00C2,
KEY_ATILDE = 0x00C3,
KEY_ADIAERESIS = 0x00C4,
KEY_ARING = 0x00C5,
KEY_AE = 0x00C6,
KEY_CCEDILLA = 0x00C7,
KEY_EGRAVE = 0x00C8,
KEY_EACUTE = 0x00C9,
KEY_ECIRCUMFLEX = 0x00CA,
KEY_EDIAERESIS = 0x00CB,
KEY_IGRAVE = 0x00CC,
KEY_IACUTE = 0x00CD,
KEY_ICIRCUMFLEX = 0x00CE,
KEY_IDIAERESIS = 0x00CF,
KEY_ETH = 0x00D0,
KEY_NTILDE = 0x00D1,
KEY_OGRAVE = 0x00D2,
KEY_OACUTE = 0x00D3,
KEY_OCIRCUMFLEX = 0x00D4,
KEY_OTILDE = 0x00D5,
KEY_ODIAERESIS = 0x00D6,
KEY_MULTIPLY = 0x00D7,
KEY_OOBLIQUE = 0x00D8,
KEY_UGRAVE = 0x00D9,
KEY_UACUTE = 0x00DA,
KEY_UCIRCUMFLEX = 0x00DB,
KEY_UDIAERESIS = 0x00DC,
KEY_YACUTE = 0x00DD,
KEY_THORN = 0x00DE,
KEY_SSHARP = 0x00DF,
KEY_DIVISION = 0x00F7,
KEY_YDIAERESIS = 0x00FF,
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KeyModifierMask
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum KeyModifierMask {
KEY_CODE_MASK = ((1 << 25) - 1),
KEY_MODIFIER_MASK = (0xFF << 24),
KEY_MASK_SHIFT = (1 << 25),
KEY_MASK_ALT = (1 << 26),
KEY_MASK_META = (1 << 27),
KEY_MASK_CTRL = (1 << 28),
#ifdef APPLE_STYLE_KEYS
KEY_MASK_CMD = KEY_MASK_META,
#else
KEY_MASK_CMD = KEY_MASK_CTRL,
#endif
KEY_MASK_KPAD = (1 << 29),
KEY_MASK_GROUP_SWITCH = (1 << 30)
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ButtonList
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
enum ButtonList {
BUTTON_LEFT = 1,
BUTTON_RIGHT = 2,
BUTTON_MIDDLE = 3,
BUTTON_WHEEL_UP = 4,
BUTTON_WHEEL_DOWN = 5,
BUTTON_WHEEL_LEFT = 6,
BUTTON_WHEEL_RIGHT = 7,
BUTTON_XBUTTON1 = 8,
BUTTON_XBUTTON2 = 9,
BUTTON_MASK_LEFT = (1 << (BUTTON_LEFT - 1)),
BUTTON_MASK_RIGHT = (1 << (BUTTON_RIGHT - 1)),
BUTTON_MASK_MIDDLE = (1 << (BUTTON_MIDDLE - 1)),
BUTTON_MASK_XBUTTON1 = (1 << (BUTTON_XBUTTON1 - 1)),
BUTTON_MASK_XBUTTON2 = (1 << (BUTTON_XBUTTON2 - 1))
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
STRUCTS
====================================================================================
Comparator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Comparator {
_ALWAYS_INLINE_ bool operator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_GlobalLock
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct _GlobalLock {
_GlobalLock();
~_GlobalLock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_GlobalNil
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct _GlobalNil {
int color;
_GlobalNil *right;
_GlobalNil *left;
_GlobalNil *parent;
_GlobalNil();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_GlobalNilClass
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct _GlobalNilClass {
static _GlobalNil _nil;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
_DefaultComparator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct _DefaultComparator {
bool operator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CharRange
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct CharRange {
char32_t start;
char32_t end;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
StrRange
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct StrRange {
const CharType *c_str;
int len;
StrRange(const CharType *p_c_str = nullptr, int p_len = 0);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NoCaseComparator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct NoCaseComparator {
bool operator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
NaturalNoCaseComparator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct NaturalNoCaseComparator {
bool operator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
StaticCString
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct StaticCString {
const char *ptr;
static StaticCString create(const char *p_ptr);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MemoryPool
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct MemoryPool {
static PoolAllocator *memory_pool;
static uint8_t *pool_memory;
static size_t *pool_size;
struct Alloc {
SafeRefCount refcount;
SafeNumeric lock;
void *mem;
PoolAllocator::ID pool_id;
size_t size;
Alloc *free_list;
Alloc();
};
static Alloc *allocs;
static Alloc *free_list;
static uint32_t alloc_count;
static uint32_t allocs_used;
static Mutex alloc_mutex;
static size_t total_memory;
static size_t max_memory;
static void setup(uint32_t p_max_allocs = (1 << 16);
static void cleanup();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Color
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Color {
union {
struct {
float r;
float g;
float b;
float a;
};
float components[4];
};
bool operator==(const Color &p_color);
bool operator!=(const Color &p_color);
uint32_t to_rgba32();
uint32_t to_argb32();
uint32_t to_abgr32();
uint64_t to_rgba64();
uint64_t to_argb64();
uint64_t to_abgr64();
float get_h();
float get_s();
float get_v();
void set_hsv(float p_h, float p_s, float p_v, float p_alpha = 1.0);
float &operator[](int idx);
const float &operator[](int idx);
Color operator+(const Color &p_color);
void operator+=(const Color &p_color);
Color operator-();
Color operator-(const Color &p_color);
void operator-=(const Color &p_color);
Color operator*(const Color &p_color);
Color operator*(const real_t &rvalue);
void operator*=(const Color &p_color);
void operator*=(const real_t &rvalue);
Color operator/(const Color &p_color);
Color operator/(const real_t &rvalue);
void operator/=(const Color &p_color);
void operator/=(const real_t &rvalue);
bool is_equal_approx(const Color &p_color);
Color clamp(const Color &p_min = Color(0, 0, 0, 0);
void invert();
void contrast();
Color inverted();
Color contrasted();
float get_luminance();
Color linear_interpolate(const Color &p_to, float p_weight);
Color darkened(float p_amount);
Color lightened(float p_amount);
uint32_t to_rgbe9995();
Color blend(const Color &p_over);
Color to_linear();
Color to_srgb();
static Color hex(uint32_t p_hex);
static Color hex64(uint64_t p_hex);
static Color html(const String &p_color);
static bool html_is_valid(const String &p_color);
String to_html(bool p_alpha = true);
Color from_hsv(float p_h, float p_s, float p_v, float p_a);
static Color from_rgbe9995(uint32_t p_rgbe);
bool operator<(const Color &p_color);
operator String();
static Color color8(int r, int g, int b);
static Color color8(int r, int g, int b, int a);
void set_r8(int32_t r8);
int32_t get_r8();
void set_g8(int32_t g8);
int32_t get_g8();
void set_b8(int32_t b8);
int32_t get_b8();
void set_a8(int32_t a8);
int32_t get_a8();
void set_h(float p_h);
void set_s(float p_s);
void set_v(float p_v);
Color();
Color(float p_r, float p_g, float p_b, float p_a = 1.0);
Color(const Color &p_c, float p_a);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector2
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Vector2 {
static const int AXIS_COUNT = 2;
enum Axis {
AXIS_X,
AXIS_Y,
};
union {
struct {
union {
real_t x;
real_t width;
};
union {
real_t y;
real_t height;
};
};
real_t coord[2];
};
real_t &operator[](int p_idx);
const real_t &operator[](int p_idx);
void set_all(real_t p_value);
int min_axis();
int max_axis();
void normalize();
Vector2 normalized();
bool is_normalized();
real_t length();
real_t length_squared();
Vector2 limit_length(const real_t p_len = 1.0);
Vector2 min(const Vector2 &p_vector2);
Vector2 max(const Vector2 &p_vector2);
real_t distance_to(const Vector2 &p_vector2);
real_t distance_squared_to(const Vector2 &p_vector2);
real_t angle_to(const Vector2 &p_vector2);
real_t angle_to_point(const Vector2 &p_vector2);
Vector2 direction_to(const Vector2 &p_to);
real_t dot(const Vector2 &p_other);
real_t cross(const Vector2 &p_other);
Vector2 posmod(const real_t p_mod);
Vector2 posmodv(const Vector2 &p_modv);
Vector2 project(const Vector2 &p_to);
Vector2 plane_project(real_t p_d, const Vector2 &p_vec);
static Vector2 linear_interpolate(const Vector2 &p_a, const Vector2 &p_b, real_t p_weight);
Vector2 linear_interpolate(const Vector2 &p_to, real_t p_weight);
Vector2 slerp(const Vector2 &p_to, real_t p_weight);
Vector2 cubic_interpolate(const Vector2 &p_b, const Vector2 &p_pre_a, const Vector2 &p_post_b, real_t p_weight);
Vector2 bezier_interpolate(const Vector2 &p_control_1, const Vector2 &p_control_2, const Vector2 &p_end, const real_t p_t);
Vector2 move_toward(const Vector2 &p_to, const real_t p_delta);
Vector2 slide(const Vector2 &p_normal);
Vector2 bounce(const Vector2 &p_normal);
Vector2 reflect(const Vector2 &p_normal);
bool is_equal_approx(const Vector2 &p_v);
Vector2 operator+(const Vector2 &p_v);
void operator+=(const Vector2 &p_v);
Vector2 operator-(const Vector2 &p_v);
void operator-=(const Vector2 &p_v);
Vector2 operator*(const Vector2 &p_v1);
Vector2 operator*(const real_t &rvalue);
void operator*=(const real_t &rvalue);
void operator*=(const Vector2 &rvalue);
Vector2 operator/(const Vector2 &p_v1);
Vector2 operator/(const real_t &rvalue);
void operator/=(const real_t &rvalue);
void operator/=(const Vector2 &rvalue);
Vector2 operator-();
bool operator==(const Vector2 &p_vec2);
bool operator!=(const Vector2 &p_vec2);
bool operator<(const Vector2 &p_vec2);
bool operator>(const Vector2 &p_vec2);
bool operator<=(const Vector2 &p_vec2);
bool operator>=(const Vector2 &p_vec2);
real_t angle();
void set_rotation(real_t p_radians);
Vector2 abs();
Vector2 rotated(real_t p_by);
Vector2 tangent();
Vector2 orthogonal();
Vector2 sign();
Vector2 floor();
Vector2 ceil();
Vector2 round();
Vector2 snapped(const Vector2 &p_by);
real_t aspect();
operator String();
Vector2(real_t p_x, real_t p_y);
Vector2();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector2i
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Vector2i {
enum Axis {
AXIS_X,
AXIS_Y,
};
union {
struct {
union {
int x;
int width;
};
union {
int y;
int height;
};
};
int coord[2];
};
int &operator[](int p_idx);
const int &operator[](int p_idx);
void set_all(int p_value);
int min_axis();
int max_axis();
Vector2i min(const Vector2i &p_vector2i);
Vector2i max(const Vector2i &p_vector2i);
static Vector2i linear_interpolate(const Vector2i &p_a, const Vector2i &p_b, real_t p_weight);
Vector2i linear_interpolate(const Vector2i &p_to, real_t p_weight);
Vector2i operator+(const Vector2i &p_v);
void operator+=(const Vector2i &p_v);
Vector2i operator-(const Vector2i &p_v);
void operator-=(const Vector2i &p_v);
Vector2i operator*(const Vector2i &p_v1);
Vector2i operator*(const int &rvalue);
void operator*=(const int &rvalue);
Vector2i operator/(const Vector2i &p_v1);
Vector2i operator/(const int &rvalue);
void operator/=(const int &rvalue);
Vector2i operator-();
bool operator<(const Vector2i &p_vec2);
bool operator>(const Vector2i &p_vec2);
bool operator<=(const Vector2 &p_vec2);
bool operator>=(const Vector2 &p_vec2);
bool operator==(const Vector2i &p_vec2);
bool operator!=(const Vector2i &p_vec2);
int64_t length_squared();
double length();
real_t aspect();
Vector2i sign();
Vector2i abs();
Vector2i clamp(const Vector2i &p_min, const Vector2i &p_max);
Vector2 to_vector2();
operator String();
operator Vector2();
Vector2i(const Vector2 &p_vec2);
Vector2i(int p_x, int p_y);
Vector2i();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Rect2
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Rect2 {
Point2 position;
Size2 size;
const Vector2 &get_position();
void set_position(const Vector2 &p_pos);
const Vector2 &get_size();
void set_size(const Vector2 &p_size);
real_t get_area();
Vector2 get_center();
bool intersects(const Rect2 &p_rect, const bool p_include_borders = false);
real_t distance_to(const Vector2 &p_point);
bool intersects_transformed(const Transform2D &p_xform, const Rect2 &p_rect);
bool intersects_segment(const Point2 &p_from, const Point2 &p_to, Point2 *r_pos = nullptr, Point2 *r_normal = nullptr);
bool encloses(const Rect2 &p_rect);
bool has_no_area();
Rect2 clip(const Rect2 &p_rect);
Rect2 intersection(const Rect2 &p_rect);
Rect2 merge(const Rect2 &p_rect);
bool has_point(const Point2 &p_point);
bool is_equal_approx(const Rect2 &p_rect);
bool operator==(const Rect2 &p_rect);
bool operator!=(const Rect2 &p_rect);
Rect2 grow(real_t p_by);
void grow_by(real_t p_by);
Rect2 grow_margin(Margin p_margin, real_t p_amount);
Rect2 grow_side(Side p_side, real_t p_amount);
Rect2 grow_individual(real_t p_left, real_t p_top, real_t p_right, real_t p_bottom);
Rect2 expand(const Vector2 &p_vector);
void expand_to(const Vector2 &p_vector);
Rect2 abs();
Vector2 get_support(const Vector2 &p_normal);
bool intersects_filled_polygon(const Vector2 *p_points, int p_point_count);
void set_end(const Vector2 &p_end);
Vector2 get_end();
operator String();
Rect2();
Rect2(real_t p_x, real_t p_y, real_t p_width, real_t p_height);
Rect2(const Point2 &p_pos, const Size2 &p_size);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Rect2i
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Rect2i {
Point2i position;
Size2i size;
const Point2i &get_position();
void set_position(const Point2i &p_position);
const Size2i &get_size();
void set_size(const Size2i &p_size);
int get_area();
Vector2i get_center();
bool intersects(const Rect2i &p_rect);
bool encloses(const Rect2i &p_rect);
bool has_no_area();
Rect2i clip(const Rect2i &p_rect);
Rect2i intersection(const Rect2i &p_rect);
Rect2i merge(const Rect2i &p_rect);
bool has_point(const Point2i &p_point);
bool operator==(const Rect2i &p_rect);
bool operator!=(const Rect2i &p_rect);
Rect2i grow(int p_by);
void grow_by(int p_by);
Rect2i grow_margin(Margin p_margin, int p_amount);
Rect2i grow_side(Side p_side, int p_amount);
Rect2i grow_individual(int p_left, int p_top, int p_right, int p_bottom);
Rect2i expand(const Vector2i &p_vector);
void expand_to(const Point2i &p_vector);
Rect2i abs();
void set_end(const Vector2i &p_end);
Vector2i get_end();
Rect2 to_rect2();
operator String();
operator Rect2();
Rect2i(const Rect2 &p_r2);
Rect2i();
Rect2i(int p_x, int p_y, int p_width, int p_height);
Rect2i(const Point2 &p_pos, const Size2 &p_size);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector3
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Vector3 {
static const int AXIS_COUNT = 3;
enum Axis {
AXIS_X,
AXIS_Y,
AXIS_Z,
};
union {
struct {
real_t x;
real_t y;
real_t z;
};
real_t coord[3];
};
const real_t &operator[](int p_axis);
real_t &operator[](int p_axis);
void set_axis(int p_axis, real_t p_value);
real_t get_axis(int p_axis);
void set_all(real_t p_value);
int min_axis();
int max_axis();
real_t length();
real_t length_squared();
void normalize();
Vector3 normalized();
bool is_normalized();
Vector3 inverse();
Vector3 limit_length(const real_t p_len = 1.0);
void zero();
void snap(const Vector3 &p_val);
Vector3 snapped(const Vector3 &p_val);
void rotate(const Vector3 &p_axis, real_t p_phi);
Vector3 rotated(const Vector3 &p_axis, real_t p_phi);
Vector3 linear_interpolate(const Vector3 &p_to, real_t p_weight);
Vector3 slerp(const Vector3 &p_to, real_t p_weight);
Vector3 cubic_interpolate(const Vector3 &p_b, const Vector3 &p_pre_a, const Vector3 &p_post_b, real_t p_weight);
Vector3 bezier_interpolate(const Vector3 &p_control_1, const Vector3 &p_control_2, const Vector3 &p_end, const real_t p_t);
Vector3 move_toward(const Vector3 &p_to, const real_t p_delta);
Vector3 cross(const Vector3 &p_b);
real_t dot(const Vector3 &p_b);
Basis outer(const Vector3 &p_b);
Basis to_diagonal_matrix();
Vector3 abs();
Vector3 floor();
Vector3 sign();
Vector3 ceil();
Vector3 round();
Vector3 clamp(const Vector3 &p_min, const Vector3 &p_max);
real_t distance_to(const Vector3 &p_to);
real_t distance_squared_to(const Vector3 &p_to);
Vector3 posmod(const real_t p_mod);
Vector3 posmodv(const Vector3 &p_modv);
Vector3 project(const Vector3 &p_to);
real_t angle_to(const Vector3 &p_to);
real_t signed_angle_to(const Vector3 &p_to, const Vector3 &p_axis);
Vector3 direction_to(const Vector3 &p_to);
Vector3 slide(const Vector3 &p_normal);
Vector3 bounce(const Vector3 &p_normal);
Vector3 reflect(const Vector3 &p_normal);
bool is_equal_approx(const Vector3 &p_v);
bool is_equal_approx(const Vector3 &p_v, real_t p_tolerance);
bool is_equal_approxt(const Vector3 &p_v, real_t p_tolerance);
Vector3 &operator+=(const Vector3 &p_v);
Vector3 operator+(const Vector3 &p_v);
Vector3 &operator-=(const Vector3 &p_v);
Vector3 operator-(const Vector3 &p_v);
Vector3 &operator*=(const Vector3 &p_v);
Vector3 operator*(const Vector3 &p_v);
Vector3 &operator/=(const Vector3 &p_v);
Vector3 operator/(const Vector3 &p_v);
Vector3 &operator*=(real_t p_scalar);
Vector3 operator*(real_t p_scalar);
Vector3 &operator/=(real_t p_scalar);
Vector3 operator/(real_t p_scalar);
Vector3 operator-();
bool operator==(const Vector3 &p_v);
bool operator!=(const Vector3 &p_v);
bool operator<(const Vector3 &p_v);
bool operator<=(const Vector3 &p_v);
bool operator>(const Vector3 &p_v);
bool operator>=(const Vector3 &p_v);
operator String();
Vector3(real_t p_x, real_t p_y, real_t p_z);
Vector3();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector3i
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Vector3i {
enum Axis {
AXIS_X,
AXIS_Y,
AXIS_Z,
};
union {
struct {
int32_t x;
int32_t y;
int32_t z;
};
int32_t coord[3];
};
const int32_t &operator[](const int p_axis);
int32_t &operator[](const int p_axis);
void set_axis(const int p_axis, const int32_t p_value);
int32_t get_axis(const int p_axis);
void set_all(int32_t p_value);
Vector3i::Axis min_axis();
Vector3i::Axis max_axis();
int64_t length_squared();
double length();
void zero();
Vector3i abs();
Vector3i sign();
Vector3i clamp(const Vector3i &p_min, const Vector3i &p_max);
Vector3i linear_interpolate(const Vector3i &p_to, real_t p_weight);
Vector3i &operator+=(const Vector3i &p_v);
Vector3i operator+(const Vector3i &p_v);
Vector3i &operator-=(const Vector3i &p_v);
Vector3i operator-(const Vector3i &p_v);
Vector3i &operator*=(const Vector3i &p_v);
Vector3i operator*(const Vector3i &p_v);
Vector3i &operator/=(const Vector3i &p_v);
Vector3i operator/(const Vector3i &p_v);
Vector3i &operator%=(const Vector3i &p_v);
Vector3i operator%(const Vector3i &p_v);
Vector3i &operator*=(const int32_t p_scalar);
Vector3i operator*(const int32_t p_scalar);
Vector3i &operator/=(const int32_t p_scalar);
Vector3i operator/(const int32_t p_scalar);
Vector3i &operator%=(const int32_t p_scalar);
Vector3i operator%(const int32_t p_scalar);
Vector3i operator-();
bool operator==(const Vector3i &p_v);
bool operator!=(const Vector3i &p_v);
bool operator<(const Vector3i &p_v);
bool operator<=(const Vector3i &p_v);
bool operator>(const Vector3i &p_v);
bool operator>=(const Vector3i &p_v);
Vector3 to_vector3();
operator String();
operator Vector3();
Vector3i();
Vector3i(const int32_t p_x, const int32_t p_y, const int32_t p_z);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector4
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Vector4 {
enum Axis {
AXIS_X,
AXIS_Y,
AXIS_Z,
AXIS_W,
};
union {
struct {
real_t x;
real_t y;
real_t z;
real_t w;
};
real_t components[4];
};
real_t &operator[](const int p_axis);
const real_t &operator[](const int p_axis);
void set_all(const real_t p_value);
void set_axis(const int p_axis, const real_t p_value);
real_t get_axis(const int p_axis);
Vector4::Axis min_axis();
Vector4::Axis max_axis();
real_t length_squared();
bool is_equal_approx(const Vector4 &p_vec4);
real_t length();
void normalize();
Vector4 normalized();
bool is_normalized();
Vector4 limit_length(const real_t p_len = 1.0);
void zero();
real_t distance_to(const Vector4 &p_to);
real_t distance_squared_to(const Vector4 &p_to);
Vector4 direction_to(const Vector4 &p_to);
Vector4 abs();
Vector4 sign();
Vector4 floor();
Vector4 ceil();
Vector4 round();
Vector4 linear_interpolate(const Vector4 &p_to, const real_t p_weight);
Vector4 cubic_interpolate(const Vector4 &p_b, const Vector4 &p_pre_a, const Vector4 &p_post_b, const real_t p_weight);
Vector4 posmod(const real_t p_mod);
Vector4 posmodv(const Vector4 &p_modv);
void snap(const Vector4 &p_step);
Vector4 snapped(const Vector4 &p_step);
Vector4 clamp(const Vector4 &p_min, const Vector4 &p_max);
Vector4 inverse();
real_t dot(const Vector4 &p_vec4);
void operator+=(const Vector4 &p_vec4);
void operator-=(const Vector4 &p_vec4);
void operator*=(const Vector4 &p_vec4);
void operator/=(const Vector4 &p_vec4);
void operator*=(const real_t &s);
void operator/=(const real_t &s);
Vector4 operator+(const Vector4 &p_vec4);
Vector4 operator-(const Vector4 &p_vec4);
Vector4 operator*(const Vector4 &p_vec4);
Vector4 operator/(const Vector4 &p_vec4);
Vector4 operator-();
Vector4 operator*(const real_t &s);
Vector4 operator/(const real_t &s);
bool operator==(const Vector4 &p_vec4);
bool operator!=(const Vector4 &p_vec4);
bool operator>(const Vector4 &p_vec4);
bool operator<(const Vector4 &p_vec4);
bool operator>=(const Vector4 &p_vec4);
bool operator<=(const Vector4 &p_vec4);
operator String();
Vector4();
Vector4(real_t p_x, real_t p_y, real_t p_z, real_t p_w);
Vector4(const Vector4 &p_vec4);
void operator=(const Vector4 &p_vec4);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector4i
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Vector4i {
enum Axis {
AXIS_X,
AXIS_Y,
AXIS_Z,
AXIS_W,
};
union {
struct {
int32_t x;
int32_t y;
int32_t z;
int32_t w;
};
int32_t coord[4];
};
const int32_t &operator[](const int p_axis);
int32_t &operator[](const int p_axis);
void set_all(const int32_t p_value);
void set_axis(const int p_axis, const int32_t p_value);
int32_t get_axis(const int p_axis);
Vector4i::Axis min_axis();
Vector4i::Axis max_axis();
int64_t length_squared();
double length();
void zero();
Vector4i abs();
Vector4i sign();
Vector4i clamp(const Vector4i &p_min, const Vector4i &p_max);
Vector4i linear_interpolate(const Vector4i &p_to, const real_t p_weight);
Vector4i &operator+=(const Vector4i &p_v);
Vector4i operator+(const Vector4i &p_v);
Vector4i &operator-=(const Vector4i &p_v);
Vector4i operator-(const Vector4i &p_v);
Vector4i &operator*=(const Vector4i &p_v);
Vector4i operator*(const Vector4i &p_v);
Vector4i &operator/=(const Vector4i &p_v);
Vector4i operator/(const Vector4i &p_v);
Vector4i &operator%=(const Vector4i &p_v);
Vector4i operator%(const Vector4i &p_v);
Vector4i &operator*=(const int32_t p_scalar);
Vector4i operator*(const int32_t p_scalar);
Vector4i &operator/=(const int32_t p_scalar);
Vector4i operator/(const int32_t p_scalar);
Vector4i &operator%=(const int32_t p_scalar);
Vector4i operator%(const int32_t p_scalar);
Vector4i operator-();
bool operator==(const Vector4i &p_v);
bool operator!=(const Vector4i &p_v);
bool operator<(const Vector4i &p_v);
bool operator<=(const Vector4i &p_v);
bool operator>(const Vector4i &p_v);
bool operator>=(const Vector4i &p_v);
Vector4 to_vector4();
operator String();
operator Vector4();
Vector4i();
Vector4i(const int32_t p_x, const int32_t p_y, const int32_t p_z, const int32_t p_w);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Plane
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Plane {
Vector3 normal;
real_t d;
void set_normal(const Vector3 &p_normal);
Vector3 get_normal();
void normalize();
Plane normalized();
Vector3 center();
Vector3 get_any_point();
Vector3 get_any_perpendicular_normal();
bool is_point_over(const Vector3 &p_point);
real_t distance_to(const Vector3 &p_point);
bool has_point(const Vector3 &p_point, real_t _epsilon = CMP_EPSILON);
bool intersect_3(const Plane &p_plane1, const Plane &p_plane2, Vector3 *r_result = nullptr);
bool intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *p_intersection);
bool intersects_segment(const Vector3 &p_begin, const Vector3 &p_end, Vector3 *p_intersection);
Vector3 project(const Vector3 &p_point);
Plane operator-();
bool is_equal_approx(const Plane &p_plane);
bool is_equal_approx_any_side(const Plane &p_plane);
bool operator==(const Plane &p_plane);
bool operator!=(const Plane &p_plane);
operator String();
Plane();
Plane(real_t p_a, real_t p_b, real_t p_c, real_t p_d);
Plane(const Vector3 &p_normal, real_t p_d);
Plane(const Vector3 &p_point, const Vector3 &p_normal);
Plane(const Vector3 &p_point1, const Vector3 &p_point2, const Vector3 &p_point3, ClockDirection p_dir = CLOCKWISE);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
AABB
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct AABB {
Vector3 position;
Vector3 size;
real_t get_volume();
bool has_no_volume();
bool has_no_surface();
const Vector3 &get_position();
void set_position(const Vector3 &p_pos);
const Vector3 &get_size();
void set_size(const Vector3 &p_size);
bool operator==(const AABB &p_rval);
bool operator!=(const AABB &p_rval);
bool is_equal_approx(const AABB &p_aabb);
bool intersects(const AABB &p_aabb);
bool intersects_inclusive(const AABB &p_aabb);
bool encloses(const AABB &p_aabb);
AABB merge(const AABB &p_with);
void merge_with(const AABB &p_aabb);
AABB intersection(const AABB &p_aabb);
bool intersects_segment(const Vector3 &p_from, const Vector3 &p_to, Vector3 *r_clip = nullptr, Vector3 *r_normal = nullptr);
bool intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *r_clip = nullptr, Vector3 *r_normal = nullptr);
bool smits_intersect_ray(const Vector3 &p_from, const Vector3 &p_dir, real_t t0, real_t t1);
bool intersects_convex_shape(const Plane *p_planes, int p_plane_count, const Vector3 *p_points, int p_point_count);
bool inside_convex_shape(const Plane *p_planes, int p_plane_count);
bool intersects_plane(const Plane &p_plane);
bool has_point(const Vector3 &p_point);
Vector3 get_support(const Vector3 &p_normal);
Vector3 get_longest_axis();
int get_longest_axis_index();
real_t get_longest_axis_size();
Vector3 get_shortest_axis();
int get_shortest_axis_index();
real_t get_shortest_axis_size();
AABB grow(real_t p_by);
void grow_by(real_t p_amount);
void get_edge(int p_edge, Vector3 &r_from, Vector3 &r_to);
Vector3 get_endpoint(int p_point);
AABB expand(const Vector3 &p_vector);
void project_range_in_plane(const Plane &p_plane, real_t &r_min, real_t &r_max);
void expand_to(const Vector3 &p_vector);
bool create_from_points(const Vector &p_points);
AABB abs();
void quantize(real_t p_unit);
AABB quantized(real_t p_unit);
void set_end(const Vector3 &p_end);
Vector3 get_end();
Vector3 get_center();
operator String();
AABB();
AABB(const Vector3 &p_pos, const Vector3 &p_size);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Quaternion
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Quaternion {
union {
struct {
real_t x;
real_t y;
real_t z;
real_t w;
};
real_t components[4];
};
real_t &operator[](int idx);
const real_t &operator[](int idx);
real_t length_squared();
bool is_equal_approx(const Quaternion &p_quat);
real_t length();
void normalize();
Quaternion normalized();
bool is_normalized();
Quaternion inverse();
Quaternion log();
Quaternion exp();
real_t dot(const Quaternion &p_q);
real_t angle_to(const Quaternion &p_to);
void set_euler_xyz(const Vector3 &p_euler);
Vector3 get_euler_xyz();
void set_euler_yxz(const Vector3 &p_euler);
Vector3 get_euler_yxz();
void set_euler(const Vector3 &p_euler);
Vector3 get_euler();
Quaternion slerp(const Quaternion &p_to, const real_t &p_weight);
Quaternion slerpni(const Quaternion &p_to, const real_t &p_weight);
Quaternion cubic_slerp(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight);
Quaternion spherical_cubic_interpolate(const Quaternion &p_b, const Quaternion &p_pre_a, const Quaternion &p_post_b, const real_t &p_weight);
Vector3 get_axis();
float get_angle();
void set_axis_angle(const Vector3 &axis, const real_t &angle);
void get_axis_angle(Vector3 &r_axis, real_t &r_angle);
void operator*=(const Quaternion &p_q);
Quaternion operator*(const Quaternion &p_q);
Quaternion operator*(const Vector3 &v);
Vector3 xform(const Vector3 &v);
void operator+=(const Quaternion &p_q);
void operator-=(const Quaternion &p_q);
void operator*=(const real_t &s);
void operator/=(const real_t &s);
Quaternion operator+(const Quaternion &q2);
Quaternion operator-(const Quaternion &q2);
Quaternion operator-();
Quaternion operator*(const real_t &s);
Quaternion operator/(const real_t &s);
bool operator==(const Quaternion &p_quat);
bool operator!=(const Quaternion &p_quat);
operator String();
void set(real_t p_x, real_t p_y, real_t p_z, real_t p_w);
Quaternion(real_t p_x, real_t p_y, real_t p_z, real_t p_w);
Quaternion(const Vector3 &axis, const real_t &angle);
Quaternion(const Vector3 &euler);
Quaternion(const Quaternion &p_q);
Quaternion &operator=(const Quaternion &p_q);
Quaternion(const Vector3 &v0, const Vector3 &v1);
Quaternion();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Projection
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Projection {
enum Planes {
PLANE_NEAR,
PLANE_FAR,
PLANE_LEFT,
PLANE_TOP,
PLANE_RIGHT,
PLANE_BOTTOM
};
Vector4 matrix[4];
const Vector4 &operator[](const int p_axis);
Vector4 &operator[](const int p_axis);
float determinant();
void set_identity();
void set_zero();
void set_light_bias();
void set_depth_correction(bool p_flip_y = true);
void set_light_atlas_rect(const Rect2 &p_rect);
void set_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov = false);
void set_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov, int p_eye, real_t p_intraocular_dist, real_t p_convergence_dist);
void set_for_hmd(int p_eye, real_t p_aspect, real_t p_intraocular_dist, real_t p_display_width, real_t p_display_to_lens, real_t p_oversample, real_t p_z_near, real_t p_z_far);
void set_orthogonal(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar);
void set_orthogonal(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov = false);
void set_frustum(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far);
void set_frustum(real_t p_size, real_t p_aspect, Vector2 p_offset, real_t p_near, real_t p_far, bool p_flip_fov = false);
void adjust_perspective_znear(real_t p_new_znear);
static Projection create_depth_correction(bool p_flip_y);
static Projection create_light_atlas_rect(const Rect2 &p_rect);
static Projection create_perspective(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov = false);
static Projection create_perspective_hmd(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov, int p_eye, real_t p_intraocular_dist, real_t p_convergence_dist);
static Projection create_for_hmd(int p_eye, real_t p_aspect, real_t p_intraocular_dist, real_t p_display_width, real_t p_display_to_lens, real_t p_oversample, real_t p_z_near, real_t p_z_far);
static Projection create_orthogonal(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar);
static Projection create_orthogonal_aspect(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov = false);
static Projection create_frustum(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far);
static Projection create_frustum_aspect(real_t p_size, real_t p_aspect, Vector2 p_offset, real_t p_near, real_t p_far, bool p_flip_fov = false);
static Projection create_fit_aabb(const AABB &p_aabb);
Projection perspective_znear_adjusted(real_t p_new_znear);
Plane get_projection_plane(Planes p_plane);
Projection flipped_y();
Projection jitter_offseted(const Vector2 &p_offset);
static real_t get_fovy(real_t p_fovx, real_t p_aspect);
real_t calculate_fovy(real_t p_fovx, real_t p_aspect);
real_t get_z_far();
real_t get_z_near();
real_t get_aspect();
real_t get_fov();
bool is_orthogonal();
Vector get_projection_planes(const Transform &p_transform);
bool get_endpoints(const Transform &p_transform, Vector3 *p_8points);
Vector2 get_viewport_half_extents();
Vector2 get_far_plane_half_extents();
void invert();
Projection inverse();
Projection operator*(const Projection &p_matrix);
Vector4 xform(const Vector4 &p_vec4);
Vector4 xform_inv(const Vector4 &p_vec4);
Vector3 xform(const Vector3 &p_vector);
Plane xform(const Plane &p_plane);
operator String();
void scale_translate_to_fit(const AABB &p_aabb);
void add_jitter_offset(const Vector2 &p_offset);
void make_scale(const Vector3 &p_scale);
int get_pixels_per_meter(int p_for_pixel_width);
operator Transform();
void flip_y();
bool operator==(const Projection &p_cam);
bool operator!=(const Projection &p_cam);
float get_lod_multiplier();
void set_perspective1(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov = false);
void set_perspective2(real_t p_fovy_degrees, real_t p_aspect, real_t p_z_near, real_t p_z_far, bool p_flip_fov, int p_eye, real_t p_intraocular_dist, real_t p_convergence_dist);
void set_orthogonal1(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_znear, real_t p_zfar);
void set_orthogonal2(real_t p_size, real_t p_aspect, real_t p_znear, real_t p_zfar, bool p_flip_fov = false);
void set_frustum1(real_t p_left, real_t p_right, real_t p_bottom, real_t p_top, real_t p_near, real_t p_far);
void set_frustum2(real_t p_size, real_t p_aspect, Vector2 p_offset, real_t p_near, real_t p_far, bool p_flip_fov = false);
Projection();
Projection(const Vector4 &p_x, const Vector4 &p_y, const Vector4 &p_z, const Vector4 &p_w);
Projection(const Transform &p_transform);
~Projection();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Basis
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Basis {
Vector3 rows[3] = {
Vector3(1, 0, 0);
}
Vector3 &operator[](int p_row);
void invert();
void transpose();
Basis inverse();
Basis transposed();
real_t determinant();
void from_z(const Vector3 &p_z);
void rotate(const Vector3 &p_axis, real_t p_phi);
Basis rotated(const Vector3 &p_axis, real_t p_phi);
void rotate_local(const Vector3 &p_axis, real_t p_phi);
Basis rotated_local(const Vector3 &p_axis, real_t p_phi);
void rotate(const Vector3 &p_euler);
Basis rotated(const Vector3 &p_euler);
void rotate(const Quaternion &p_quat);
Basis rotated(const Quaternion &p_quat);
void rotatev(const Vector3 &p_euler);
Basis rotatedv(const Vector3 &p_euler);
void rotateq(const Quaternion &p_quat);
Basis rotatedq(const Quaternion &p_quat);
Vector3 get_rotation_euler();
void get_rotation_axis_angle(Vector3 &p_axis, real_t &p_angle);
void get_rotation_axis_angle_local(Vector3 &p_axis, real_t &p_angle);
Quaternion get_rotation_quaternion();
Vector3 get_rotation();
void rotate_to_align(const Vector3 &p_start_direction, const Vector3 &p_end_direction);
Vector3 rotref_posscale_decomposition(Basis &rotref);
Vector3 get_euler_xyz();
void set_euler_xyz(const Vector3 &p_euler);
Vector3 get_euler_xzy();
void set_euler_xzy(const Vector3 &p_euler);
Vector3 get_euler_yzx();
void set_euler_yzx(const Vector3 &p_euler);
Vector3 get_euler_yxz();
void set_euler_yxz(const Vector3 &p_euler);
Vector3 get_euler_zxy();
void set_euler_zxy(const Vector3 &p_euler);
Vector3 get_euler_zyx();
void set_euler_zyx(const Vector3 &p_euler);
Vector3 get_euler();
void set_euler(const Vector3 &p_euler);
Quaternion get_quaternion();
void set_quaternion(const Quaternion &p_quat);
void get_axis_angle(Vector3 &r_axis, real_t &r_angle);
void set_axis_angle(const Vector3 &p_axis, real_t p_phi);
void scale(const Vector3 &p_scale);
Basis scaled(const Vector3 &p_scale);
void scale_local(const Vector3 &p_scale);
Basis scaled_local(const Vector3 &p_scale);
void scale_orthogonal(const Vector3 &p_scale);
Basis scaled_orthogonal(const Vector3 &p_scale);
void make_scale_uniform();
real_t get_uniform_scale();
Vector3 get_scale();
Vector3 get_scale_abs();
Vector3 get_scale_local();
void set_axis_angle_scale(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale);
void set_euler_scale(const Vector3 &p_euler, const Vector3 &p_scale);
void set_quaternion_scale(const Quaternion &p_quat, const Vector3 &p_scale);
real_t tdotx(const Vector3 &v);
real_t tdoty(const Vector3 &v);
real_t tdotz(const Vector3 &v);
bool is_equal_approx(const Basis &p_basis);
bool is_equal_approx_ratio(const Basis &a, const Basis &b, real_t p_epsilon = UNIT_EPSILON);
bool operator==(const Basis &p_matrix);
bool operator!=(const Basis &p_matrix);
Vector3 xform(const Vector3 &p_vector);
Vector3 xform_inv(const Vector3 &p_vector);
Vector3i xform(const Vector3i &p_vector);
Vector3i xform_inv(const Vector3i &p_vector);
void operator*=(const Basis &p_matrix);
Basis operator*(const Basis &p_matrix);
void operator+=(const Basis &p_matrix);
Basis operator+(const Basis &p_matrix);
void operator-=(const Basis &p_matrix);
Basis operator-(const Basis &p_matrix);
void operator*=(real_t p_val);
Basis operator*(real_t p_val);
int get_orthogonal_index();
void set_orthogonal_index(int p_index);
void set_diagonal(const Vector3 &p_diag);
bool is_orthogonal();
bool is_diagonal();
bool is_rotation();
Basis slerp(const Basis &p_to, const real_t &p_weight);
Basis lerp(const Basis &p_to, const real_t &p_weight);
void rotate_sh(real_t *p_values);
operator String();
void set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz);
void set(const Vector3 &p_x, const Vector3 &p_y, const Vector3 &p_z);
Vector3 get_column(int i);
void set_column(int p_index, const Vector3 &p_value);
void set_columns(const Vector3 &p_x, const Vector3 &p_y, const Vector3 &p_z);
Vector3 get_row(int i);
void set_row(int i, const Vector3 &p_row);
Vector3 get_axis(int i);
void set_axis(int p_index, const Vector3 &p_value);
Vector3 get_main_diagonal();
void set_zero();
Basis transpose_xform(const Basis &m);
Basis(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz);
void orthonormalize();
Basis orthonormalized();
void orthogonalize();
Basis orthogonalized();
bool is_symmetric();
Basis diagonalize();
Basis get_normal_xform_basis();
Vector3 xform_normal_fast(const Vector3 &p_vector);
Vector3 xform_normal(const Vector3 &p_vector);
static Basis looking_at(const Vector3 &p_target, const Vector3 &p_up = Vector3(0, 1, 0);
static Basis from_scale(const Vector3 &p_scale);
operator Quaternion();
Basis(const Quaternion &p_quat);
Basis(const Quaternion &p_quat, const Vector3 &p_scale);
Basis(const Vector3 &p_euler);
Basis(const Vector3 &p_euler, const Vector3 &p_scale);
Basis(const Vector3 &p_axis, real_t p_phi);
Basis(const Vector3 &p_axis, real_t p_phi, const Vector3 &p_scale);
Basis(const Vector3 &row0, const Vector3 &row1, const Vector3 &row2);
Basis();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Transform2D
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Transform2D {
Vector2 columns[3];
real_t tdotx(const Vector2 &v);
real_t tdoty(const Vector2 &v);
const Vector2 &operator[](int p_idx);
Vector2 &operator[](int p_idx);
Vector2 get_axis(int p_axis);
void set_axis(int p_axis, const Vector2 &p_vec);
Vector2 get_column(int p_colum);
void set_column(int p_colum, const Vector2 &p_vec);
void invert();
Transform2D inverse();
void affine_invert();
Transform2D affine_inverse();
void set_rotation(real_t p_rot);
real_t get_rotation();
real_t get_skew();
void set_skew(const real_t p_angle);
void set_rotation_and_scale(real_t p_rot, const Size2 &p_scale);
void set_rotation_scale_and_skew(const real_t p_rot, const Size2 &p_scale, const real_t p_skew);
void rotate(real_t p_phi);
void scale(const Size2 &p_scale);
void scale_basis(const Size2 &p_scale);
void translate(real_t p_tx, real_t p_ty);
void translate(const Vector2 &p_offset);
void translate_local(real_t p_tx, real_t p_ty);
void translate_local(const Vector2 &p_translation);
void translater(real_t p_tx, real_t p_ty);
void translatev(const Vector2 &p_offset);
void translate_localr(real_t p_tx, real_t p_ty);
void translate_localv(const Vector2 &p_translation);
real_t basis_determinant();
Size2 get_scale();
void set_scale(const Size2 &p_scale);
const Vector2 &get_origin();
void set_origin(const Vector2 &p_origin);
Transform2D basis_scaled(const Size2 &p_scale);
Transform2D scaled(const Size2 &p_scale);
Transform2D scaled_local(const Size2 &p_scale);
Transform2D translated(const Vector2 &p_offset);
Transform2D translated_local(const Vector2 &p_offset);
Transform2D rotated(const real_t p_angle);
Transform2D rotated_local(const real_t p_angle);
Transform2D untranslated();
void orthonormalize();
Transform2D orthonormalized();
bool is_equal_approx(const Transform2D &p_transform);
Transform2D looking_at(const Vector2 &p_target);
bool operator==(const Transform2D &p_transform);
bool operator!=(const Transform2D &p_transform);
void operator*=(const Transform2D &p_transform);
Transform2D operator*(const Transform2D &p_transform);
void operator*=(const real_t p_val);
Transform2D operator*(const real_t p_val);
Transform2D interpolate_with(const Transform2D &p_transform, real_t p_c);
Vector2 basis_xform(const Vector2 &p_vec);
Vector2 basis_xform_inv(const Vector2 &p_vec);
Vector2 xform(const Vector2 &p_vec);
Vector2 xform_inv(const Vector2 &p_vec);
Rect2 xform(const Rect2 &p_rect);
Rect2 xform_inv(const Rect2 &p_rect);
Vector2i basis_xform(const Vector2i &p_vec);
Vector2i basis_xform_inv(const Vector2i &p_vec);
Vector2i xform(const Vector2i &p_vec);
Vector2i xform_inv(const Vector2i &p_vec);
PoolVector xform(const PoolVector &p_array);
PoolVector xform_inv(const PoolVector &p_array);
PoolVector xform(const PoolVector &p_array);
PoolVector xform_inv(const PoolVector &p_array);
operator String();
Transform2D(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy);
Transform2D(const Vector2 &p_x, const Vector2 &p_y, const Vector2 &p_origin);
Transform2D(real_t p_rot, const Vector2 &p_pos);
Transform2D(const real_t p_rot, const Size2 &p_scale, const real_t p_skew, const Vector2 &p_pos);
Transform2D();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Face3
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Face3 {
enum Side {
SIDE_OVER,
SIDE_UNDER,
SIDE_SPANNING,
SIDE_COPLANAR
};
Vector3 vertex[3];
int split_by_plane(const Plane &p_plane, Face3 *p_res, bool *p_is_point_over);
Plane get_plane(ClockDirection p_dir = CLOCKWISE);
Vector3 get_random_point_inside();
Side get_side_of(const Face3 &p_face, ClockDirection p_clock_dir = CLOCKWISE);
bool is_degenerate();
real_t get_area();
real_t get_twice_area_squared();
Vector3 get_median_point();
Vector3 get_closest_point_to(const Vector3 &p_point);
bool intersects_ray(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *p_intersection = nullptr);
bool intersects_segment(const Vector3 &p_from, const Vector3 &p_dir, Vector3 *p_intersection = nullptr);
ClockDirection get_clock_dir();
void get_support(const Vector3 &p_normal, const Transform &p_transform, Vector3 *p_vertices, int *p_count, int p_max);
void project_range(const Vector3 &p_normal, const Transform &p_transform, real_t &r_min, real_t &r_max);
AABB get_aabb();
bool intersects_aabb(const AABB &p_aabb);
bool intersects_aabb2(const AABB &p_aabb);
operator String();
Face3();
Face3(const Vector3 &p_v1, const Vector3 &p_v2, const Vector3 &p_v3);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Transform
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Transform {
Basis basis;
Vector3 origin;
void invert();
Transform inverse();
void affine_invert();
Transform affine_inverse();
Transform rotated(const Vector3 &p_axis, real_t p_phi);
Transform rotated_local(const Vector3 &p_axis, real_t p_phi);
void rotate(const Vector3 &p_axis, real_t p_phi);
void rotate_local(const Vector3 &p_axis, real_t p_phi);
void rotate_basis(const Vector3 &p_axis, real_t p_phi);
void set_look_at(const Vector3 &p_eye, const Vector3 &p_target, const Vector3 &p_up);
Transform looking_at(const Vector3 &p_target, const Vector3 &p_up);
void scale(const Vector3 &p_scale);
Transform scaled(const Vector3 &p_scale);
Transform scaled_local(const Vector3 &p_scale);
void scale_basis(const Vector3 &p_scale);
void translate_local(real_t p_tx, real_t p_ty, real_t p_tz);
void translate_local(const Vector3 &p_translation);
void translate_localr(real_t p_tx, real_t p_ty, real_t p_tz);
void translate_localv(const Vector3 &p_translation);
Transform translated(const Vector3 &p_translation);
Transform translated_local(const Vector3 &p_translation);
const Basis &get_basis();
void set_basis(const Basis &p_basis);
const Vector3 &get_origin();
void set_origin(const Vector3 &p_origin);
void orthonormalize();
Transform orthonormalized();
void orthogonalize();
Transform orthogonalized();
bool is_equal_approx(const Transform &p_transform);
bool operator==(const Transform &p_transform);
bool operator!=(const Transform &p_transform);
Vector3 xform(const Vector3 &p_vector);
Vector3i xform(const Vector3i &p_vector);
AABB xform(const AABB &p_aabb);
PoolVector xform(const PoolVector &p_array);
PoolVector xform(const PoolVector &p_array);
Vector3 xform_inv(const Vector3 &p_vector);
Vector3i xform_inv(const Vector3i &p_vector);
AABB xform_inv(const AABB &p_aabb);
PoolVector xform_inv(const PoolVector &p_array);
PoolVector xform_inv(const PoolVector &p_array);
Plane xform(const Plane &p_plane);
Plane xform_inv(const Plane &p_plane);
Plane xform_fast(const Plane &p_plane, const Basis &p_basis_inverse_transpose);
static Plane xform_inv_fast(const Plane &p_plane, const Transform &p_inverse, const Basis &p_basis_transpose);
void operator*=(const Transform &p_transform);
Transform operator*(const Transform &p_transform);
void operator*=(const real_t p_val);
Transform operator*(const real_t p_val);
Transform spherical_interpolate_with(const Transform &p_transform, real_t p_c);
Transform interpolate_with(const Transform &p_transform, real_t p_c);
Transform inverse_xform(const Transform &t);
void set(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz, real_t tx, real_t ty, real_t tz);
operator String();
Transform(real_t xx, real_t xy, real_t xz, real_t yx, real_t yy, real_t yz, real_t zx, real_t zy, real_t zz, real_t ox, real_t oy, real_t oz);
Transform(const Basis &p_basis, const Vector3 &p_origin = Vector3();
Transform(const Vector3 &p_x, const Vector3 &p_y, const Vector3 &p_z, const Vector3 &p_origin);
Transform();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMapHasherDefault
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct HashMapHasherDefault {
template
static uint32_t hash(const T *p_pointer);
template
static uint32_t hash(const Ref &p_ref);
static uint32_t hash(const String &p_string);
static uint32_t hash(const char *p_cstr);
static uint32_t hash(const wchar_t p_wchar);
static uint32_t hash(const char16_t p_uchar);
static uint32_t hash(const char32_t p_uchar);
static uint32_t hash(const StringName &p_string_name);
static uint32_t hash(const uint64_t p_int);
static uint32_t hash(const int64_t p_int);
static uint32_t hash(const float p_float);
static uint32_t hash(const double p_double);
static uint32_t hash(const uint32_t p_int);
static uint32_t hash(const int32_t p_int);
static uint32_t hash(const uint16_t p_int);
static uint32_t hash(const int16_t p_int);
static uint32_t hash(const uint8_t p_int);
static uint32_t hash(const int8_t p_int);
static uint32_t hash(const Vector2i &p_vec);
static uint32_t hash(const Vector3i &p_vec);
static uint32_t hash(const Vector4i &p_vec);
static uint32_t hash(const Vector2 &p_vec);
static uint32_t hash(const Vector3 &p_vec);
static uint32_t hash(const Vector4 &p_vec);
static uint32_t hash(const Rect2i &p_rect);
static uint32_t hash(const Rect2 &p_rect);
static uint32_t hash(const AABB &p_aabb);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMapComparatorDefault
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct HashMapComparatorDefault {
static bool compare(const T &p_lhs, const T &p_rhs);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMapComparatorDefault
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct HashMapComparatorDefault {
static bool compare(const float &p_lhs, const float &p_rhs);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMapComparatorDefault
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct HashMapComparatorDefault {
static bool compare(const double &p_lhs, const double &p_rhs);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMapComparatorDefault
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct HashMapComparatorDefault {
static bool compare(const Vector2 &p_lhs, const Vector2 &p_rhs);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMapComparatorDefault
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct HashMapComparatorDefault {
static bool compare(const Vector3 &p_lhs, const Vector3 &p_rhs);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Pair
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct Pair {
F first;
S second;
Pair();
Pair(F p_first, const S &p_second);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PairSort
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct PairSort {
bool operator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PairHash
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct PairHash {
static uint32_t hash(const Pair &P);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KeyValue
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct KeyValue {
const K key;
V value;
void operator=(const KeyValue &p_kv);
KeyValue(const KeyValue &p_kv);
KeyValue(const K &p_key, const V &p_value);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
KeyValueSort
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct KeyValueSort {
bool operator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VariantHasher
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct VariantHasher {
static uint32_t hash(const Variant &p_variant);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VariantComparator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
struct VariantComparator {
static bool compare(const Variant &p_lhs, const Variant &p_rhs);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CLASSES
====================================================================================
RLogger
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RLogger {
public:
static void print_trace(const String &str);
static void print_trace(const char *str);
static void print_trace(const char *p_function, const char *p_file, int p_line, const String &str);
static void print_trace(const char *p_function, const char *p_file, int p_line, const char *str);
static void print_message(const String &str);
static void print_message(const char *str);
static void print_message(const char *p_function, const char *p_file, int p_line, const String &str);
static void print_message(const char *p_function, const char *p_file, int p_line, const char *str);
static void print_warning(const String &str);
static void print_warning(const char *str);
static void print_warning(const char *p_function, const char *p_file, int p_line, const String &str);
static void print_warning(const char *p_function, const char *p_file, int p_line, const char *str);
static void print_error(const String &str);
static void print_error(const char *str);
static void print_error(const char *p_function, const char *p_file, int p_line, const char *str);
static void print_error(const char *p_function, const char *p_file, int p_line, const String &str);
static void print_msg_error(const char *p_function, const char *p_file, int p_line, const char *p_msg, const char *str);
static void print_index_error(const char *p_function, const char *p_file, int p_line, const int index, const int size, const char *str);
static void log_trace(const String &str);
static void log_trace(const char *str);
static void log_trace(const char *p_function, const char *p_file, int p_line, const String &str);
static void log_trace(const char *p_function, const char *p_file, int p_line, const char *str);
static void log_message(const String &str);
static void log_message(const char *str);
static void log_message(const char *p_function, const char *p_file, int p_line, const String &str);
static void log_message(const char *p_function, const char *p_file, int p_line, const char *str);
static void log_warning(const String &str);
static void log_warning(const char *str);
static void log_warning(const char *p_function, const char *p_file, int p_line, const String &str);
static void log_warning(const char *p_function, const char *p_file, int p_line, const char *str);
static void log_error(const String &str);
static void log_error(const char *str);
static void log_error(const char *p_function, const char *p_file, int p_line, const char *str);
static void log_error(const char *p_function, const char *p_file, int p_line, const String &str);
static void log_msg_error(const char *p_function, const char *p_file, int p_line, const char *p_msg, const char *str);
static void log_index_error(const char *p_function, const char *p_file, int p_line, const int index, const int size, const char *str);
static void log_index_error(const char *p_function, const char *p_file, int p_line, const int index, const int size, const String &str);
static String *get_string_ptr(const int p_default_size = 100);
static String *get_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
static String *get_string_ptr(const char *p_prefix, const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
static void return_string_ptr(String *str);
static String *get_trace_string_ptr(const int p_default_size = 100);
static String *get_message_string_ptr(const int p_default_size = 100);
static String *get_warning_string_ptr(const int p_default_size = 100);
static String *get_error_string_ptr(const int p_default_size = 100);
static String *get_trace_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
static String *get_message_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
static String *get_warning_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
static String *get_error_string_ptr(const char *p_function, const char *p_file, int p_line, const int p_default_size = 300);
static void log_ptr(String *str);
static void log_ret_ptr(String *str);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
STime
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class STime {
public:
static uint64_t date();
static uint64_t date_epoch();
static char *date_string();
static double time_hh();
static double time_mm();
static double time_ss();
static uint64_t time_ms();
static uint64_t time_us();
static uint64_t time_ns();
static void sleep_ss(double ss);
static void sleep_ms(double ms);
static void sleep_us(double us);
static void sleep_ns(double us);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SafeNumeric
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SafeNumeric {
std::atomic value;
public:
_ALWAYS_INLINE_ void set(T p_value);
_ALWAYS_INLINE_ T get();
_ALWAYS_INLINE_ T increment();
_ALWAYS_INLINE_ T postincrement();
_ALWAYS_INLINE_ T decrement();
_ALWAYS_INLINE_ T postdecrement();
_ALWAYS_INLINE_ T add(T p_value);
_ALWAYS_INLINE_ T postadd(T p_value);
_ALWAYS_INLINE_ T sub(T p_value);
_ALWAYS_INLINE_ T postsub(T p_value);
_ALWAYS_INLINE_ T exchange_if_greater(T p_value);
_ALWAYS_INLINE_ T conditional_increment();
_ALWAYS_INLINE_ explicit SafeNumeric(T p_value = static_cast(0);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SafeFlag
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SafeFlag {
std::atomic_bool flag;
public:
_ALWAYS_INLINE_ bool is_set();
_ALWAYS_INLINE_ void set();
_ALWAYS_INLINE_ void clear();
_ALWAYS_INLINE_ void set_to(bool p_value);
_ALWAYS_INLINE_ explicit SafeFlag(bool p_value = false);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SafeRefCount
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SafeRefCount {
SafeNumeric count;
public:
_ALWAYS_INLINE_ bool ref();
_ALWAYS_INLINE_ uint32_t refval();
_ALWAYS_INLINE_ bool unref();
_ALWAYS_INLINE_ uint32_t unrefval();
_ALWAYS_INLINE_ uint32_t get();
_ALWAYS_INLINE_ void init(uint32_t p_value = 1);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SafeNumeric
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SafeNumeric {
protected:
T value;
public:
_ALWAYS_INLINE_ void set(T p_value);
_ALWAYS_INLINE_ T get();
_ALWAYS_INLINE_ T increment();
_ALWAYS_INLINE_ T postincrement();
_ALWAYS_INLINE_ T decrement();
_ALWAYS_INLINE_ T postdecrement();
_ALWAYS_INLINE_ T add(T p_value);
_ALWAYS_INLINE_ T postadd(T p_value);
_ALWAYS_INLINE_ T sub(T p_value);
_ALWAYS_INLINE_ T postsub(T p_value);
_ALWAYS_INLINE_ T exchange_if_greater(T p_value);
_ALWAYS_INLINE_ T conditional_increment();
_ALWAYS_INLINE_ explicit SafeNumeric(T p_value = static_cast(0);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SafeFlag
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SafeFlag {
protected:
bool flag;
public:
_ALWAYS_INLINE_ bool is_set();
_ALWAYS_INLINE_ void set();
_ALWAYS_INLINE_ void clear();
_ALWAYS_INLINE_ void set_to(bool p_value);
_ALWAYS_INLINE_ explicit SafeFlag(bool p_value = false);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SafeRefCount
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SafeRefCount {
uint32_t count;
public:
_ALWAYS_INLINE_ bool ref();
_ALWAYS_INLINE_ uint32_t refval();
_ALWAYS_INLINE_ bool unref();
_ALWAYS_INLINE_ uint32_t unrefval();
_ALWAYS_INLINE_ uint32_t get();
_ALWAYS_INLINE_ void init(uint32_t p_value = 1);
SafeRefCount();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Memory
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Memory {
#ifdef DEBUG_ENABLED
static SafeNumeric mem_usage;
static SafeNumeric max_usage;
#endif
static SafeNumeric alloc_count;
public:
static void *alloc_static(size_t p_bytes, bool p_pad_align = false);
static void *realloc_static(void *p_memory, size_t p_bytes, bool p_pad_align = false);
static void free_static(void *p_ptr, bool p_pad_align = false);
static uint64_t get_mem_available();
static uint64_t get_mem_usage();
static uint64_t get_mem_max_usage();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DefaultAllocator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class DefaultAllocator {
public:
static void *alloc(size_t p_memory);
static void free(void *p_ptr);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MutexImpl
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class MutexImpl {
mutable StdMutexT mutex;
friend class MutexLock;
public:
_ALWAYS_INLINE_ void lock();
_ALWAYS_INLINE_ void unlock();
_ALWAYS_INLINE_ Error try_lock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MutexLock
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class MutexLock {
union {
std::recursive_mutex *recursive_mutex;
std::mutex *mutex;
};
bool recursive;
public:
_ALWAYS_INLINE_ explicit MutexLock(const MutexImpl &p_mutex);
_ALWAYS_INLINE_ explicit MutexLock(const MutexImpl &p_mutex);
_ALWAYS_INLINE_ ~MutexLock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FakeMutex
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class FakeMutex {
FakeMutex();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MutexImpl
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class MutexImpl {
public:
_ALWAYS_INLINE_ void lock();
_ALWAYS_INLINE_ void unlock();
_ALWAYS_INLINE_ Error try_lock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MutexLock
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class MutexLock {
public:
explicit MutexLock(const MutexImpl &p_mutex);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RWLock
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RWLock {
mutable std::shared_timed_mutex mutex;
public:
void read_lock();
void read_unlock();
Error read_try_lock();
void write_lock();
void write_unlock();
Error write_try_lock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RWLock
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RWLock {
public:
void read_lock();
void read_unlock();
Error read_try_lock();
void write_lock();
void write_unlock();
Error write_try_lock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RWLockRead
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RWLockRead {
const RWLock &lock;
public:
RWLockRead(const RWLock &p_lock);
~RWLockRead();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RWLockWrite
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RWLockWrite {
RWLock &lock;
public:
RWLockWrite(RWLock &p_lock);
~RWLockWrite();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SpinLock
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SpinLock {
std::atomic_flag locked = ATOMIC_FLAG_INIT;
public:
_ALWAYS_INLINE_ void lock();
_ALWAYS_INLINE_ void unlock();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RandomPCG
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RandomPCG {
pcg32_random_t pcg;
uint64_t current_seed;
uint64_t current_inc;
public:
static const uint64_t DEFAULT_SEED = 12047754176567800795U;
static const uint64_t DEFAULT_INC = PCG_DEFAULT_INC_64;
RandomPCG(uint64_t p_seed = DEFAULT_SEED, uint64_t p_inc = DEFAULT_INC);
void seed(uint64_t p_seed);
uint64_t get_seed();
void set_state(uint64_t p_state);
uint64_t get_state();
void randomize();
uint32_t rand();
uint32_t rand(uint32_t bounds);
double randd();
float randf();
double randfn(double p_mean, double p_deviation);
float randfn(float p_mean, float p_deviation);
double random(double p_from, double p_to);
float random(float p_from, float p_to);
real_t randomr(real_t p_from, real_t p_to);
int random(int p_from, int p_to);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Math
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Math {
static RandomPCG default_rand;
public:
Math();
static const uint64_t RANDOM_32BIT_MAX = 0xFFFFFFFF;
static _ALWAYS_INLINE_ double sin(double p_x);
static _ALWAYS_INLINE_ float sin(float p_x);
static _ALWAYS_INLINE_ double cos(double p_x);
static _ALWAYS_INLINE_ float cos(float p_x);
static _ALWAYS_INLINE_ double tan(double p_x);
static _ALWAYS_INLINE_ float tan(float p_x);
static _ALWAYS_INLINE_ double sinh(double p_x);
static _ALWAYS_INLINE_ float sinh(float p_x);
static _ALWAYS_INLINE_ float sinc(float p_x);
static _ALWAYS_INLINE_ double sinc(double p_x);
static _ALWAYS_INLINE_ float sincn(float p_x);
static _ALWAYS_INLINE_ double sincn(double p_x);
static _ALWAYS_INLINE_ double cosh(double p_x);
static _ALWAYS_INLINE_ float cosh(float p_x);
static _ALWAYS_INLINE_ double tanh(double p_x);
static _ALWAYS_INLINE_ float tanh(float p_x);
static _ALWAYS_INLINE_ double asin(double p_x);
static _ALWAYS_INLINE_ float asin(float p_x);
static _ALWAYS_INLINE_ double acos(double p_x);
static _ALWAYS_INLINE_ float acos(float p_x);
static _ALWAYS_INLINE_ double asin_unsafe(double p_x);
static _ALWAYS_INLINE_ float asin_unsafe(float p_x);
static _ALWAYS_INLINE_ double acos_unsafe(double p_x);
static _ALWAYS_INLINE_ float acos_unsafe(float p_x);
static _ALWAYS_INLINE_ double atan(double p_x);
static _ALWAYS_INLINE_ float atan(float p_x);
static _ALWAYS_INLINE_ double atan2(double p_y, double p_x);
static _ALWAYS_INLINE_ float atan2(float p_y, float p_x);
static _ALWAYS_INLINE_ double sqrt(double p_x);
static _ALWAYS_INLINE_ float sqrt(float p_x);
static _ALWAYS_INLINE_ double fmod(double p_x, double p_y);
static _ALWAYS_INLINE_ float fmod(float p_x, float p_y);
static _ALWAYS_INLINE_ double floor(double p_x);
static _ALWAYS_INLINE_ float floor(float p_x);
static _ALWAYS_INLINE_ int floorf_int(const float x);
static _ALWAYS_INLINE_ double ceil(double p_x);
static _ALWAYS_INLINE_ float ceil(float p_x);
static _ALWAYS_INLINE_ double pow(double p_x, double p_y);
static _ALWAYS_INLINE_ float pow(float p_x, float p_y);
static _ALWAYS_INLINE_ double log(double p_x);
static _ALWAYS_INLINE_ float log(float p_x);
static _ALWAYS_INLINE_ double log1p(double p_x);
static _ALWAYS_INLINE_ float log1p(float p_x);
static _ALWAYS_INLINE_ double log10(double p_x);
static _ALWAYS_INLINE_ float log10(float p_x);
static _ALWAYS_INLINE_ double log2(double p_x);
static _ALWAYS_INLINE_ float log2(float p_x);
static _ALWAYS_INLINE_ double exp(double p_x);
static _ALWAYS_INLINE_ float exp(float p_x);
static _ALWAYS_INLINE_ double erf(double p_x);
static _ALWAYS_INLINE_ float erf(float p_x);
static float divf(const float a, const float b);
static _ALWAYS_INLINE_ bool is_nan(double p_val);
static _ALWAYS_INLINE_ bool is_nan(float p_val);
static _ALWAYS_INLINE_ bool is_inf(double p_val);
static _ALWAYS_INLINE_ bool is_inf(float p_val);
static _ALWAYS_INLINE_ double abs(double g);
static _ALWAYS_INLINE_ float abs(float g);
static _ALWAYS_INLINE_ int abs(int g);
static _ALWAYS_INLINE_ int64_t abs(int64_t g);
static _ALWAYS_INLINE_ int absi(int g);
static _ALWAYS_INLINE_ int64_t absi(int64_t g);
static _ALWAYS_INLINE_ double fposmod(double p_x, double p_y);
static _ALWAYS_INLINE_ float fposmod(float p_x, float p_y);
static _ALWAYS_INLINE_ float fposmodp(float p_x, float p_y);
static _ALWAYS_INLINE_ double fposmodp(double p_x, double p_y);
static _ALWAYS_INLINE_ int64_t posmod(int64_t p_x, int64_t p_y);
static _ALWAYS_INLINE_ double deg2rad(double p_y);
static _ALWAYS_INLINE_ float deg2rad(float p_y);
static _ALWAYS_INLINE_ double rad2deg(double p_y);
static _ALWAYS_INLINE_ float rad2deg(float p_y);
static _ALWAYS_INLINE_ double lerp(double p_from, double p_to, double p_weight);
static _ALWAYS_INLINE_ float lerp(float p_from, float p_to, float p_weight);
static _ALWAYS_INLINE_ double lerp_angle(double p_from, double p_to, double p_weight);
static _ALWAYS_INLINE_ float lerp_angle(float p_from, float p_to, float p_weight);
static _ALWAYS_INLINE_ double inverse_lerp(double p_from, double p_to, double p_value);
static _ALWAYS_INLINE_ float inverse_lerp(float p_from, float p_to, float p_value);
static _ALWAYS_INLINE_ double range_lerp(double p_value, double p_istart, double p_istop, double p_ostart, double p_ostop);
static _ALWAYS_INLINE_ float range_lerp(float p_value, float p_istart, float p_istop, float p_ostart, float p_ostop);
static _ALWAYS_INLINE_ double cubic_interpolate(double p_from, double p_to, double p_pre, double p_post, double p_weight);
static _ALWAYS_INLINE_ float cubic_interpolate(float p_from, float p_to, float p_pre, float p_post, float p_weight);
static _ALWAYS_INLINE_ double bezier_interpolate(double p_start, double p_control_1, double p_control_2, double p_end, double p_t);
static _ALWAYS_INLINE_ float bezier_interpolate(float p_start, float p_control_1, float p_control_2, float p_end, float p_t);
static _ALWAYS_INLINE_ double smoothstep(double p_from, double p_to, double p_s);
static _ALWAYS_INLINE_ float smoothstep(float p_from, float p_to, float p_s);
static _ALWAYS_INLINE_ double move_toward(double p_from, double p_to, double p_delta);
static _ALWAYS_INLINE_ float move_toward(float p_from, float p_to, float p_delta);
static _ALWAYS_INLINE_ double linear2db(double p_linear);
static _ALWAYS_INLINE_ float linear2db(float p_linear);
static _ALWAYS_INLINE_ double db2linear(double p_db);
static _ALWAYS_INLINE_ float db2linear(float p_db);
static _ALWAYS_INLINE_ double round(double p_val);
static _ALWAYS_INLINE_ float round(float p_val);
static _ALWAYS_INLINE_ int64_t wrapi(int64_t value, int64_t min, int64_t max);
static _ALWAYS_INLINE_ double wrapf(double value, double min, double max);
static _ALWAYS_INLINE_ float wrapf(float value, float min, float max);
static _ALWAYS_INLINE_ float fract(float value);
static _ALWAYS_INLINE_ double fract(double value);
static _ALWAYS_INLINE_ float pingpong(float value, float length);
static _ALWAYS_INLINE_ double pingpong(double value, double length);
static double ease(double p_x, double p_c);
static int step_decimals(double p_step);
static int range_step_decimals(double p_step);
static double stepify(double p_value, double p_step);
static double dectime(double p_value, double p_amount, double p_step);
static uint32_t larger_prime(uint32_t p_val);
static void seed(uint64_t x);
static void randomize();
static uint32_t rand_from_seed(uint64_t *seed);
static uint32_t rand();
static _ALWAYS_INLINE_ double randd();
static _ALWAYS_INLINE_ float randf();
static double randfn(double mean, double deviation);
static double random(double from, double to);
static float random(float from, float to);
static real_t randomr(real_t from, real_t to);
static int random(int from, int to);
static _ALWAYS_INLINE_ int randomi(int from, int to);
static _ALWAYS_INLINE_ bool is_equal_approx_ratio(real_t a, real_t b, real_t epsilon = CMP_EPSILON, real_t min_epsilon = CMP_EPSILON);
static _ALWAYS_INLINE_ bool is_equal_approx(float a, float b);
static _ALWAYS_INLINE_ bool is_equal_approx(float a, float b, float tolerance);
static _ALWAYS_INLINE_ bool is_equal_approxt(float a, float b, float tolerance);
static _ALWAYS_INLINE_ bool is_zero_approx(float s);
static _ALWAYS_INLINE_ bool is_equal_approx(double a, double b);
static _ALWAYS_INLINE_ bool is_equal_approx(double a, double b, double tolerance);
static _ALWAYS_INLINE_ bool is_zero_approx(double s);
static _ALWAYS_INLINE_ float absf(float g);
static _ALWAYS_INLINE_ double absd(double g);
static _ALWAYS_INLINE_ int fast_ftoi(float a);
static _ALWAYS_INLINE_ uint32_t halfbits_to_floatbits(uint16_t h);
static _ALWAYS_INLINE_ float halfptr_to_float(const uint16_t *h);
static _ALWAYS_INLINE_ float half_to_float(const uint16_t h);
static _ALWAYS_INLINE_ uint16_t make_half_float(float f);
static _ALWAYS_INLINE_ float snap_scalar(float p_offset, float p_step, float p_target);
static _ALWAYS_INLINE_ float snap_scalar_separation(float p_offset, float p_step, float p_target, float p_separation);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CowData
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class CowData {
template
friend class Vector;
friend class String;
friend class Char16String;
friend class CharString;
template
friend class VMap;
private:
mutable T *_ptr;
SafeNumeric *_get_refcount();
uint32_t *_get_size();
size_t _get_alloc_size(size_t p_elements);
bool _get_alloc_size_checked(size_t p_elements, size_t *out);
void _unref(void *p_data);
void _ref(const CowData *p_from);
void _ref(const CowData &p_from);
uint32_t _copy_on_write();
public:
void operator=(const CowData &p_from);
T *ptrw();
const T *ptr();
int size();
void clear();
bool empty();
void set(int p_index, const T &p_elem);
T &get_m(int p_index);
const T &get(int p_index);
Error resize(int p_size);
void remove(int p_index);
Error insert(int p_pos, const T &p_val);
void fill(const T &p_val);
int find(const T &p_val, int p_from = 0);
CowData();
~CowData();
CowData(CowData &p_from);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SortArray
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SortArray {
enum {
INTROSORT_THRESHOLD = 16
};
public:
Comparator compare;
const T &median_of_3(const T &a, const T &b, const T &c);
int bitlog(int n);
void push_heap(int p_first, int p_hole_idx, int p_top_index, T p_value, T *p_array);
void pop_heap(int p_first, int p_last, int p_result, T p_value, T *p_array);
void pop_heap(int p_first, int p_last, T *p_array);
void adjust_heap(int p_first, int p_hole_idx, int p_len, T p_value, T *p_array);
void sort_heap(int p_first, int p_last, T *p_array);
void make_heap(int p_first, int p_last, T *p_array);
void partial_sort(int p_first, int p_last, int p_middle, T *p_array);
void partial_select(int p_first, int p_last, int p_middle, T *p_array);
int partitioner(int p_first, int p_last, T p_pivot, T *p_array);
void introsort(int p_first, int p_last, T *p_array, int p_max_depth);
void introselect(int p_first, int p_nth, int p_last, T *p_array, int p_max_depth);
void unguarded_linear_insert(int p_last, T p_value, T *p_array);
void linear_insert(int p_first, int p_last, T *p_array);
void insertion_sort(int p_first, int p_last, T *p_array);
void unguarded_insertion_sort(int p_first, int p_last, T *p_array);
void final_insertion_sort(int p_first, int p_last, T *p_array);
void sort_range(int p_first, int p_last, T *p_array);
void sort(T *p_array, int p_len);
void nth_element(int p_first, int p_last, int p_nth, T *p_array);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RBMap
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RBMap {
enum Color {
RED,
BLACK
};
struct _Data;
public:
class Element {
private:
friend class RBMap;
int color;
Element *right;
Element *left;
Element *parent;
Element *_next;
Element *_prev;
K _key;
V _value;
public:
const Element *next();
Element *next();
const Element *prev();
Element *prev();
const K &key();
V &value();
const V &value();
V &get();
const V &get();
Element();
};
private:
struct _Data {
Element *_root;
Element *_nil;
int size_cache;
_Data();
void _create_root();
void _free_root();
~_Data();
};
_Data _data;
void _set_color(Element *p_node, int p_color);
void _rotate_left(Element *p_node);
void _rotate_right(Element *p_node);
Element *_successor(Element *p_node);
Element *_predecessor(Element *p_node);
Element *_find(const K &p_key);
Element *_find_closest(const K &p_key);
void _insert_rb_fix(Element *p_new_node);
Element *_insert(const K &p_key, const V &p_value);
void _erase_fix_rb(Element *p_node);
void _erase(Element *p_node);
void _calculate_depth(Element *p_element, int &max_d, int d);
void _cleanup_tree(Element *p_element);
void _copy_from(const RBMap &p_map);
public:
const Element *find(const K &p_key);
Element *find(const K &p_key);
const Element *find_closest(const K &p_key);
Element *find_closest(const K &p_key);
bool has(const K &p_key);
Element *insert(const K &p_key, const V &p_value);
void erase(Element *p_element);
bool erase(const K &p_key);
const V &operator[](const K &p_key);
V &operator[](const K &p_key);
Element *front();
Element *back();
bool empty();
int size();
int calculate_depth();
void clear();
void operator=(const RBMap &p_map);
RBMap(const RBMap &p_map);
RBMap();
~RBMap();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RBSet
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RBSet {
enum Color {
RED,
BLACK
};
struct _Data;
public:
class Element {
private:
friend class RBSet;
int color;
Element *right;
Element *left;
Element *parent;
Element *_next;
Element *_prev;
T value;
public:
const Element *next();
Element *next();
const Element *prev();
Element *prev();
const T &get();
Element();
};
private:
struct _Data {
Element *_root;
Element *_nil;
int size_cache;
_Data();
void _create_root();
void _free_root();
~_Data();
};
_Data _data;
void _set_color(Element *p_node, int p_color);
void _rotate_left(Element *p_node);
void _rotate_right(Element *p_node);
Element *_successor(Element *p_node);
Element *_predecessor(Element *p_node);
Element *_find(const T &p_value);
Element *_lower_bound(const T &p_value);
void _insert_rb_fix(Element *p_new_node);
Element *_insert(const T &p_value);
void _erase_fix_rb(Element *p_node);
void _erase(Element *p_node);
void _calculate_depth(Element *p_element, int &max_d, int d);
void _cleanup_tree(Element *p_element);
void _copy_from(const RBSet &p_set);
public:
const Element *find(const T &p_value);
Element *find(const T &p_value);
Element *lower_bound(const T &p_value);
bool has(const T &p_value);
Element *insert(const T &p_value);
void erase(Element *p_element);
bool erase(const T &p_value);
Element *front();
Element *back();
bool empty();
int size();
int calculate_depth();
void clear();
void operator=(const RBSet &p_set);
RBSet(const RBSet &p_set);
RBSet();
~RBSet();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VMap
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class VMap {
public:
struct Pair {
T key;
V value;
Pair();
Pair(const T &p_key, const V &p_value);
};
private:
CowData _cowdata;
int _find(const T &p_val, bool &r_exact);
int _find_exact(const T &p_val);
public:
int insert(const T &p_key, const V &p_val);
bool has(const T &p_val);
void erase(const T &p_val);
int find(const T &p_val);
int find_nearest(const T &p_val);
int size();
bool empty();
const Pair *get_array();
Pair *get_array();
const V &getv(int p_index);
V &getv(int p_index);
const T &getk(int p_index);
T &getk(int p_index);
const V &operator[](const T &p_key);
V &operator[](const T &p_key);
VMap();
VMap(const VMap &p_from);
VMap &operator=(const VMap &p_from);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VectorWriteProxy
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class VectorWriteProxy {
public:
T &operator[](int p_index);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Vector
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Vector {
friend class VectorWriteProxy;
public:
VectorWriteProxy write;
private:
CowData _cowdata;
public:
bool push_back(T p_elem);
void remove(int p_index);
bool erase(const T &p_val);
void invert();
T *ptrw();
const T *ptr();
void clear();
bool empty();
T get(int p_index);
const T &get(int p_index);
void set(int p_index, const T &p_elem);
int size();
Error resize(int p_size);
const T &operator[](int p_index);
Error insert(int p_pos, T p_val);
int find(const T &p_val, int p_from = 0);
void fill(const T &p_val);
void append_array(Vector p_other);
template
void sort_custom();
void sort();
void ordered_insert(const T &p_val);
Vector();
Vector(const Vector &p_from);
Vector &operator=(const Vector &p_from);
Vector to_byte_array();
Vector slice(int p_begin, int p_end = INT32_MAX);
~Vector();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
VSet
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class VSet {
Vector _data;
int _find(const T &p_val, bool &r_exact);
int _find_exact(const T &p_val);
public:
void insert(const T &p_val);
bool has(const T &p_val);
void erase(const T &p_val);
int find(const T &p_val);
bool empty();
int size();
T &operator[](int p_index);
const T &operator[](int p_index);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
List
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class List {
struct _Data;
public:
class Element {
private:
friend class List;
T value;
Element *next_ptr;
Element *prev_ptr;
_Data *data;
public:
const Element *next();
Element *next();
const Element *prev();
Element *prev();
const T &operator*();
const T *operator->();
T &operator*();
T *operator->();
T &get();
const T &get();
void set(const T &p_value);
void erase();
Element();
};
private:
struct _Data {
Element *first;
Element *last;
int size_cache;
bool erase(const Element *p_I);
};
_Data *_data;
public:
const Element *front();
Element *front();
const Element *back();
Element *back();
Element *push_back(const T &value);
void pop_back();
Element *push_front(const T &value);
void pop_front();
Element *insert_after(Element *p_element, const T &p_value);
Element *insert_before(Element *p_element, const T &p_value);
template
Element *find(const T_v &p_val);
bool erase(const Element *p_I);
bool erase(const T &value);
bool empty();
void clear();
int size();
void swap(Element *p_A, Element *p_B);
void operator=(const List &p_list);
T &operator[](int p_index);
const T &operator[](int p_index);
void move_to_back(Element *p_I);
void invert();
void move_to_front(Element *p_I);
void move_before(Element *value, Element *where);
void sort();
template
void sort_custom_inplace();
template
struct AuxiliaryComparator {
C compare;
bool operator();
};
template
void sort_custom();
const void *id();
List(const List &p_list);
List();
~List();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RingBuffer
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RingBuffer {
Vector data;
int read_pos;
int write_pos;
int size_mask;
int inc(int &p_var, int p_size);
public:
T read();
int read(T *p_buf, int p_size, bool p_advance = true);
int copy(T *p_buf, int p_offset, int p_size);
int find(const T &t, int p_offset, int p_max_size);
int advance_read(int p_n);
int decrease_write(int p_n);
Error write(const T &p_v);
int write(const T *p_buf, int p_size);
int space_left();
int data_left();
int size();
void clear();
void resize(int p_power);
RingBuffer(int p_power = 0);
~RingBuffer();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PagedAllocator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class PagedAllocator {
T **page_pool = nullptr;
T ***available_pool = nullptr;
uint32_t pages_allocated = 0;
uint32_t allocs_available = 0;
uint32_t page_shift = 0;
uint32_t page_mask = 0;
uint32_t page_size = 0;
SpinLock spin_lock;
public:
T *alloc();
void free(T *p_mem);
void reset(bool p_allow_unfreed = false);
bool is_configured();
void configure(uint32_t p_page_size);
PagedAllocator(uint32_t p_page_size = 4096);
~PagedAllocator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PoolAllocator
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class PoolAllocator {
public:
typedef int ID;
private:
enum {
CHECK_BITS = 8,
CHECK_LEN = (1 << CHECK_BITS);
unsigned int len;
unsigned int lock;
unsigned int check;
void clear();
Entry();
};
typedef int EntryArrayPos;
typedef int EntryIndicesPos;
Entry *entry_array;
int *entry_indices;
int entry_max;
int entry_count;
uint8_t *pool;
void *mem_ptr;
int pool_size;
int free_mem;
int free_mem_peak;
unsigned int check_count;
int align;
bool needs_locking;
int entry_end(const Entry &p_entry);
int aligned(int p_size);
void compact(int p_up_to = -1);
void compact_up(int p_from = 0);
bool get_free_entry(EntryArrayPos *p_pos);
bool find_hole(EntryArrayPos *p_pos, int p_for_size);
bool find_entry_index(EntryIndicesPos *p_map_pos, Entry *p_entry);
Entry *get_entry(ID p_mem);
const Entry *get_entry(ID p_mem);
void create_pool(void *p_mem, int p_size, int p_max_entries);
protected:
virtual void mt_lock();
virtual void mt_unlock();
public:
enum {
DEFAULT_MAX_ALLOCS = 4096,
};
ID alloc(int p_size);
void free(ID p_mem);
Error resize(ID p_mem, int p_new_size);
int get_size(ID p_mem);
int get_free_mem();
int get_used_mem();
int get_free_peak();
Error lock(ID p_mem);
void *get(ID p_mem);
const void *get(ID p_mem);
void unlock(ID p_mem);
bool is_locked(ID p_mem);
PoolAllocator(int p_size, bool p_needs_locking = false, int p_max_entries = DEFAULT_MAX_ALLOCS);
PoolAllocator(void *p_mem, int p_size, int p_align = 1, bool p_needs_locking = false, int p_max_entries = DEFAULT_MAX_ALLOCS);
PoolAllocator(int p_align, int p_size, bool p_needs_locking = false, int p_max_entries = DEFAULT_MAX_ALLOCS);
virtual ~PoolAllocator();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CharProxy
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class CharProxy {
friend class Char16String;
friend class CharString;
friend class String;
const int _index;
CowData &_cowdata;
static const T _null = 0;
CharProxy(const int &p_index, CowData &p_cowdata);
public:
CharProxy(const CharProxy &p_other);
operator T();
const T *operator&();
void operator=(const T &p_other);
void operator=(const CharProxy &p_other);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Char16String
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Char16String {
CowData _cowdata;
static const char16_t _null;
public:
char16_t *ptrw();
const char16_t *ptr();
int size();
Error resize(int p_size);
char16_t get(int p_index);
void set(int p_index, const char16_t &p_elem);
const char16_t &operator[](int p_index);
CharProxy operator[](int p_index);
Char16String();
Char16String(const Char16String &p_str);
void operator=(const Char16String &p_str);
Char16String(const char16_t *p_cstr);
void operator=(const char16_t *p_cstr);
bool operator<(const Char16String &p_right);
Char16String &operator+=(char16_t p_char);
int length();
const char16_t *get_data();
operator const char16_t *();
protected:
void copy_from(const char16_t *p_cstr);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CharString
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class CharString {
CowData _cowdata;
static const char _null;
public:
char *ptrw();
const char *ptr();
int size();
Error resize(int p_size);
char get(int p_index);
void set(int p_index, const char &p_elem);
const char &operator[](int p_index);
CharProxy operator[](int p_index);
CharString();
CharString(const CharString &p_str);
void operator=(const CharString &p_str);
CharString(const char *p_cstr);
void operator=(const char *p_cstr);
bool operator<(const CharString &p_right);
CharString &operator+=(char p_char);
int length();
const char *get_data();
operator const char *();
protected:
void copy_from(const char *p_cstr);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
String
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class String {
public:
enum {
npos = -1
};
CharType *ptrw();
const CharType *ptr();
void remove(int p_index);
void clear();
CharType get(int p_index);
void set(int p_index, const CharType &p_elem);
int size();
Error resize(int p_size);
Error set_length(int p_length);
const CharType &operator[](int p_index);
CharProxy operator[](int p_index);
bool operator==(const String &p_str);
bool operator!=(const String &p_str);
String operator+(const String &p_str);
String &operator+=(const String &);
String &operator+=(CharType p_char);
String &operator+=(const char *p_str);
String &operator+=(const wchar_t *p_str);
String &operator+=(const CharType *p_str);
void operator=(const char *p_str);
void operator=(const wchar_t *p_str);
void operator=(const CharType *p_str);
bool operator==(const char *p_str);
bool operator==(const wchar_t *p_str);
bool operator==(const CharType *p_str);
bool operator==(const StrRange &p_str_range);
bool operator!=(const char *p_str);
bool operator!=(const wchar_t *p_str);
bool operator!=(const CharType *p_str);
bool operator<(const CharType *p_str);
bool operator<(const char *p_str);
bool operator<(const wchar_t *p_str);
bool operator<(const String &p_str);
bool operator<=(const String &p_str);
bool operator>(const String &p_str);
bool operator>=(const String &p_str);
signed char casecmp_to(const String &p_str);
signed char nocasecmp_to(const String &p_str);
signed char naturalnocasecmp_to(const String &p_str);
const CharType *get_data();
int length();
bool is_valid_string();
void print_unicode_error(const String &p_message, bool p_critical = false);
String substr(int p_from, int p_chars = -1);
String substr_index(const int p_start_index, const int p_end_index);
int find(const String &p_str, int p_from = 0);
int find(const char *p_str, int p_from = 0);
int find_char(const CharType &p_char, int p_from = 0);
int find_last(const String &p_str);
int findn(const String &p_str, int p_from = 0);
int rfind(const String &p_str, int p_from = -1);
int rfindn(const String &p_str, int p_from = -1);
int findmk(const Vector &p_keys, int p_from = 0, int *r_key = nullptr);
int find_first_difference_index(const String &p_str);
bool is_word_at(const int p_index, const char *p_str);
bool is_word_at(const int p_index, const String &p_str);
bool match(const String &p_wildcard);
bool matchn(const String &p_wildcard);
bool begins_with(const String &p_string);
bool begins_with(const char *p_string);
bool ends_with(const String &p_string);
bool is_enclosed_in(const String &p_string);
bool is_subsequence_of(const String &p_string);
bool is_subsequence_ofi(const String &p_string);
bool is_quoted();
Vector bigrams();
float similarity(const String &p_string);
String replace_first(const String &p_key, const String &p_with);
String replace(const String &p_key, const String &p_with);
String replace(const char *p_key, const char *p_with);
String replacen(const String &p_key, const String &p_with);
String newline_to_br();
String repeat(int p_count);
String insert(int p_at_pos, const String &p_string);
String pad_decimals(int p_digits);
String pad_zeros(int p_digits);
String trim_prefix(const String &p_prefix);
String trim_suffix(const String &p_suffix);
String lpad(int min_length, const String &character = " ");
String rpad(int min_length, const String &character = " ");
String quote(String quotechar = "\"");
String unquote();
static String num(double p_num, int p_decimals = -1);
static String num_scientific(double p_num);
static String num_real(double p_num);
static String num_int64(int64_t p_num, int base = 10, bool capitalize_hex = false);
static String num_uint64(uint64_t p_num, int base = 10, bool capitalize_hex = false);
static String chr(CharType p_char);
static String md5(const uint8_t *p_md5);
static String hex_encode_buffer(const uint8_t *p_buffer, int p_len);
static String bool_num(bool p_val);
static String bool_str(bool p_val);
bool is_numeric();
bool is_zero();
double to_double();
float to_float();
int to_int();
bool to_bool();
uint32_t to_uint();
int hex_to_int(bool p_with_prefix = true);
int64_t hex_to_int64(bool p_with_prefix = true);
int64_t bin_to_int64(bool p_with_prefix = true);
int64_t to_int64();
static int64_t to_int(const char *p_str, int p_len = -1);
static int64_t to_int(const wchar_t *p_str, int p_len = -1);
static int64_t to_int(const CharType *p_str, int p_len = -1, bool p_clamp = false);
static double to_float(const char *p_str);
static double to_float(const wchar_t *p_str, const wchar_t **r_end = nullptr);
static double to_float(const CharType *p_str, const CharType **r_end = nullptr);
static double to_double(const char *p_str);
static double to_double(const wchar_t *p_str, const wchar_t **r_end = nullptr);
static double to_double(const CharType *p_str, const CharType **r_end = nullptr);
static uint32_t num_characters(int64_t p_int);
String capitalize();
String camelcase_to_underscore(bool lowercase = true);
int get_slice_count(String p_splitter);
String get_slice(String p_splitter, int p_slice);
String get_slicec(CharType p_splitter, int p_slice);
Vector split(const String &p_splitter, bool p_allow_empty = true, int p_maxsplit = 0);
Vector rsplit(const String &p_splitter, bool p_allow_empty = true, int p_maxsplit = 0);
Vector split_spaces();
Vector split_floats(const String &p_splitter, bool p_allow_empty = true);
Vector split_floats_mk(const Vector &p_splitters, bool p_allow_empty = true);
Vector split_ints(const String &p_splitter, bool p_allow_empty = true);
Vector split_ints_mk(const Vector &p_splitters, bool p_allow_empty = true);
String join(const Vector &parts);
static CharType char_uppercase(CharType p_char);
static CharType char_lowercase(CharType p_char);
String to_upper();
String to_lower();
int count(const String &p_string, int p_from = 0, int p_to = 0);
int countn(const String &p_string, int p_from = 0, int p_to = 0);
String left(int p_pos);
String right(int p_pos);
String indent(const String &p_prefix);
String dedent();
String strip_edges(bool left = true, bool right = true);
String strip_escapes();
String lstrip(const String &p_chars);
String rstrip(const String &p_chars);
String get_extension();
String get_basename();
String plus_file(const String &p_file);
CharType unicode_at(int p_idx);
CharType ord_at(int p_idx);
void erase(int p_pos, int p_chars);
CharString ascii(bool p_allow_extended = false);
CharString utf8();
Error parse_utf8(const char *p_utf8, int p_len = -1, bool p_skip_cr = false);
static String utf8(const char *p_utf8, int p_len = -1);
int utf8_byte_length();
Char16String utf16();
Error parse_utf16(const char16_t *p_utf16, int p_len = -1);
static String utf16(const char16_t *p_utf16, int p_len = -1);
int utf16_byte_length();
static uint32_t hash(const char *p_cstr);
static uint32_t hash(const char *p_cstr, int p_len);
static uint32_t hash(const wchar_t *p_cstr);
static uint32_t hash(const wchar_t *p_cstr, int p_len);
static uint32_t hash(const CharType *p_cstr);
static uint32_t hash(const CharType *p_cstr, int p_len);
uint32_t hash();
uint64_t hash64();
bool empty();
bool contains(const char *p_str);
bool contains(const String &p_str);
bool is_abs_path();
bool is_rel_path();
bool is_resource_file();
String path_to(const String &p_path);
String path_to_file(const String &p_path);
String get_base_dir();
String get_file();
static String humanize_size(uint64_t p_size);
String simplify_path();
bool is_network_share_path();
String append_path(const char *p_path);
String append_path(const String &p_path);
String path_clean_end_slash();
String path_ensure_end_slash();
String path_get_prev_dir();
String xml_escape(bool p_escape_quotes = false);
String xml_unescape();
String http_escape();
String http_unescape();
String uri_encode();
String uri_decode();
String c_escape();
String c_escape_multiline();
String c_unescape();
String json_escape();
String word_wrap(int p_chars_per_line);
Error parse_url(String &r_scheme, String &r_host, int &r_port, String &r_path);
String percent_encode();
String percent_decode();
String property_name_encode();
static String get_invalid_node_name_characters();
String validate_node_name();
String validate_identifier();
bool is_valid_identifier();
bool is_valid_integer();
bool is_valid_float();
bool is_valid_hex_number(bool p_with_prefix);
bool is_valid_html_color();
bool is_valid_ip_address();
bool is_valid_filename();
bool is_valid_bool();
bool is_valid_unsigned_integer();
String();
String(const String &p_str);
void operator=(const String &p_str);
Vector to_ascii_buffer();
Vector to_utf8_buffer();
Vector to_utf16_buffer();
Vector to_utf32_buffer();
String(const char *p_str);
String(const wchar_t *p_str);
String(const CharType *p_str);
String(const char *p_str, int p_clip_to_len);
String(const wchar_t *p_str, int p_clip_to_len);
String(const CharType *p_str, int p_clip_to_len);
String(const StrRange &p_range);
private:
CowData _cowdata;
static const CharType _null;
void copy_from(const char *p_cstr);
void copy_from(const char *p_cstr, const int p_clip_to);
void copy_from(const wchar_t *p_cstr);
void copy_from(const wchar_t *p_cstr, const int p_clip_to);
void copy_from(const CharType *p_cstr);
void copy_from(const CharType *p_cstr, const int p_clip_to);
void copy_from(const CharType &p_char);
void copy_from_unchecked(const CharType *p_char, const int p_length);
bool _base_is_subsequence_of(const String &p_string, bool case_insensitive);
int _count(const String &p_string, int p_from, int p_to, bool p_case_insensitive);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
StringName
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class StringName {
enum {
STRING_TABLE_BITS = 14,
STRING_TABLE_LEN = 1 << STRING_TABLE_BITS,
STRING_TABLE_MASK = STRING_TABLE_LEN - 1
};
struct _Data {
SafeRefCount refcount;
SafeNumeric static_count;
const char *cname;
String name;
#ifdef DEBUG_ENABLED
uint32_t debug_references;
#endif
String get_name();
int idx;
uint32_t hash;
_Data *prev;
_Data *next;
_Data();
};
static _Data *_table[STRING_TABLE_LEN];
_Data *_data;
union _HashUnion {
_Data *ptr;
uint32_t hash;
_HashUnion();
};
void unref();
friend void register_core_types();
friend void unregister_core_types();
static Mutex lock;
static bool configured;
#ifdef DEBUG_ENABLED
struct DebugSortReferences {
bool operator();
};
static bool debug_stringname;
#endif
StringName(_Data *p_data);
public:
operator const void *();
bool operator==(const String &p_name);
bool operator==(const char *p_name);
bool operator!=(const String &p_name);
bool is_node_unique_name();
bool operator<(const StringName &p_name);
bool operator==(const StringName &p_name);
uint32_t hash();
const void *data_unique_pointer();
bool operator!=(const StringName &p_name);
operator String();
static StringName search(const char *p_name);
static StringName search(const CharType *p_name);
static StringName search(const String &p_name);
struct AlphCompare {
bool operator();
};
void operator=(const StringName &p_name);
StringName(const char *p_name, bool p_static = false);
StringName(const StringName &p_name);
StringName(const String &p_name, bool p_static = false);
StringName(const StaticCString &p_static_string, bool p_static = false);
StringName();
~StringName();
static void setup();
static void cleanup();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
PoolVector
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class PoolVector {
MemoryPool::Alloc *alloc;
void _copy_on_write();
void _reference(const PoolVector &p_pool_vector);
void _unreference();
public:
class Access {
friend class PoolVector;
protected:
MemoryPool::Alloc *alloc;
T *mem;
void _ref(MemoryPool::Alloc *p_alloc);
void _unref();
Access();
public:
virtual ~Access();
void release();
};
class Read : public Access {
public:
const T &operator[](int p_index);
const T *ptr();
void operator=(const Read &p_read);
Read(const Read &p_read);
Read();
};
class Write : public Access {
public:
T &operator[](int p_index);
T *ptr();
void operator=(const Write &p_read);
Write(const Write &p_read);
Write();
};
Read read();
Write write();
template
void fill_with(const MC &p_mc);
void remove(int p_index);
int size();
bool empty();
T get(int p_index);
void set(int p_index, const T &p_val);
void fill(const T &p_val);
void push_back(const T &p_val);
void append(const T &p_val);
void append_array(const PoolVector &p_arr);
PoolVector subarray(int p_from, int p_to);
Error insert(int p_pos, const T &p_val);
String join(const String &delimiter);
bool contains(const T &p_val);
int find(const T &p_val, int p_from = 0);
int rfind(const T &p_val, int p_from = -1);
int count(const T &p_val);
bool has(const T &p_val);
bool is_locked();
T operator[](int p_index);
Error resize(int p_size);
Error clear();
void invert();
void sort();
void operator=(const PoolVector &p_pool_vector);
PoolVector();
PoolVector(const PoolVector &p_pool_vector);
~PoolVector();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TightLocalVector
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class TightLocalVector {
private:
U count = 0;
U capacity = 0;
T *data = nullptr;
public:
T *ptr();
const T *ptr();
void push_back(T p_elem);
void remove(U p_index);
void remove_unordered(U p_index);
void erase(const T &p_val);
U erase_multiple_unordered(const T &p_val);
void invert();
void clear();
void reset();
bool empty();
U get_capacity();
void reserve(U p_size);
U size();
void resize(U p_size);
const T &operator[](U p_index);
T &operator[](U p_index);
void fill(T p_val);
void insert(U p_pos, T p_val);
int64_t find(const T &p_val, U p_from = 0);
template
void sort_custom();
void sort();
void ordered_insert(T p_val);
operator Vector();
operator PoolVector();
Vector to_byte_array();
TightLocalVector();
TightLocalVector(const TightLocalVector &p_from);
TightLocalVector(const Vector &p_from);
TightLocalVector(const PoolVector &p_from);
void operator=(const TightLocalVector &p_from);
void operator=(const Vector &p_from);
TightLocalVector &operator=(const PoolVector &p_from);
~TightLocalVector();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
TightLocalVectori
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class TightLocalVectori : public TightLocalVector {
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LocalVector
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class LocalVector {
protected:
U count = 0;
U capacity = 0;
T *data = nullptr;
public:
T *ptr();
const T *ptr();
void push_back(T p_elem);
void remove(U p_index);
void remove_unordered(U p_index);
bool erase(const T &p_val);
U erase_multiple_unordered(const T &p_val);
void invert();
void clear();
void reset();
bool empty();
U get_capacity();
void reserve(U p_size, bool p_allow_shrink = false);
U size();
void resize(U p_size);
const T &operator[](U p_index);
T &operator[](U p_index);
void fill(T p_val);
void insert(U p_pos, T p_val);
int64_t find(const T &p_val, U p_from = 0);
template
void sort_custom();
void sort();
void ordered_insert(T p_val);
operator Vector();
operator PoolVector();
Vector to_byte_array();
LocalVector();
LocalVector(const LocalVector &p_from);
LocalVector(const Vector &p_from);
LocalVector(const PoolVector &p_from);
LocalVector &operator=(const LocalVector &p_from);
LocalVector &operator=(const Vector &p_from);
LocalVector &operator=(const PoolVector &p_from);
~LocalVector();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LocalVectori
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class LocalVectori : public LocalVector {
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OGHashMap
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class OGHashMap {
public:
struct Pair {
TKey key;
TData data;
Pair(const TKey &p_key);
Pair(const TKey &p_key, const TData &p_data);
};
struct Element {
private:
friend class OGHashMap;
uint32_t hash;
Element *next;
Element();
Pair pair;
public:
const TKey &key();
TData &value();
const TData &value();
TData &get();
const TData &get();
Element(const TKey &p_key);
Element(const Element &p_other);
};
private:
Element **hash_table;
uint8_t hash_table_power;
uint32_t elements;
void make_hash_table();
void erase_hash_table();
void check_hash_table();
const Element *get_element(const TKey &p_key);
Element *create_element(const TKey &p_key);
void copy_from(const OGHashMap &p_t);
public:
Element *set(const TKey &p_key, const TData &p_data);
Element *set(const Pair &p_pair);
bool has(const TKey &p_key);
const TData &get(const TKey &p_key);
TData &get(const TKey &p_key);
TData *getptr(const TKey &p_key);
const TData *getptr(const TKey &p_key);
const Element *find(const TKey &p_key);
Element *find(const TKey &p_key);
template
TData *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
template
const TData *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
bool erase(const TKey &p_key);
const TData &operator[](const TKey &p_key);
TData &operator[](const TKey &p_key);
const TKey *next(const TKey *p_key);
unsigned int size();
bool empty();
void clear();
void operator=(const OGHashMap &p_table);
OGHashMap();
void get_key_value_ptr_array(const Pair **p_pairs);
void get_key_list(List *p_keys);
OGHashMap(const OGHashMap &p_table);
~OGHashMap();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
OrderedHashMap
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class OrderedHashMap {
typedef List> InternalList;
typedef OGHashMap InternalMap;
InternalList list;
InternalMap map;
public:
class Element {
friend class OrderedHashMap;
typename InternalList::Element *list_element;
typename InternalList::Element *prev_element;
typename InternalList::Element *next_element;
Element(typename InternalList::Element *p_element);
public:
Element();
Element next();
Element prev();
Element(const Element &other);
Element &operator=(const Element &other);
bool operator==(const Element &p_other);
bool operator!=(const Element &p_other);
operator bool();
const K &key();
V &value();
const V &value();
V &get();
const V &get();
};
class ConstElement {
friend class OrderedHashMap;
const typename InternalList::Element *list_element;
ConstElement(const typename InternalList::Element *p_element);
public:
ConstElement();
ConstElement(const ConstElement &other);
ConstElement &operator=(const ConstElement &other);
ConstElement next();
ConstElement prev();
bool operator==(const ConstElement &p_other);
bool operator!=(const ConstElement &p_other);
operator bool();
const K &key();
const V &value();
const V &get();
};
ConstElement find(const K &p_key);
Element find(const K &p_key);
Element insert(const K &p_key, const V &p_value);
void erase(Element &p_element);
bool erase(const K &p_key);
bool has(const K &p_key);
const V &operator[](const K &p_key);
V &operator[](const K &p_key);
Element front();
Element back();
ConstElement front();
ConstElement back();
bool empty();
int size();
const void *id();
void clear();
private:
void _copy_from(const OrderedHashMap &p_map);
public:
void operator=(const OrderedHashMap &p_map);
OrderedHashMap(const OrderedHashMap &p_map);
OrderedHashMap();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashMap
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class HashMap {
public:
const uint32_t MIN_CAPACITY_INDEX = 2;
const float MAX_OCCUPANCY = 0.75;
const uint32_t EMPTY_HASH = 0;
public:
struct Element {
Element *next = nullptr;
Element *prev = nullptr;
KeyValue data;
const TKey &key();
TValue &value();
const TValue &value();
TValue &get();
const TValue &get();
Element();
Element(const TKey &p_key, const TValue &p_value);
};
public:
uint32_t get_capacity();
uint32_t size();
bool empty();
void clear();
TValue &get(const TKey &p_key);
const TValue &get(const TKey &p_key);
const TValue *getptr(const TKey &p_key);
TValue *getptr(const TKey &p_key);
const Element *get_element(const TKey &p_key);
Element *get_element(const TKey &p_key);
const Element *find(const TKey &p_key);
Element *find(const TKey &p_key);
template
TValue *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
template
const TValue *custom_getptr(C p_custom_key, uint32_t p_custom_hash);
bool has(const TKey &p_key);
bool erase(const TKey &p_key);
void reserve(uint32_t p_new_capacity);
Element *front();
Element *back();
const Element *front();
const Element *back();
const TKey *next(const TKey *p_key);
const TValue &operator[](const TKey &p_key);
TValue &operator[](const TKey &p_key);
Element *insert(const TKey &p_key, const TValue &p_value, bool p_front_insert = false);
Element *set(const TKey &p_key, const TValue &p_value, bool p_front_insert = false);
void get_key_list(List *p_keys);
HashMap(const HashMap &p_other);
void operator=(const HashMap &p_other);
HashMap(uint32_t p_initial_capacity);
HashMap();
uint32_t debug_get_hash(uint32_t p_index);
Element *debug_get_element(uint32_t p_index);
~HashMap();
private:
Element **elements = nullptr;
uint32_t *hashes = nullptr;
Element *head_element = nullptr;
Element *tail_element = nullptr;
uint32_t capacity_index = 0;
uint32_t num_elements = 0;
uint32_t _hash(const TKey &p_key);
static uint32_t _get_probe_length(const uint32_t p_pos, const uint32_t p_hash, const uint32_t p_capacity, const uint64_t p_capacity_inv);
bool _lookup_pos(const TKey &p_key, uint32_t &r_pos);
void _insert_with_hash(uint32_t p_hash, Element *p_value);
void _resize_and_rehash(uint32_t p_new_capacity_index);
Element *_insert(const TKey &p_key, const TValue &p_value, bool p_front_insert = false);
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
HashSet
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class HashSet {
public:
static constexpr uint32_t MIN_CAPACITY_INDEX = 2;
static constexpr float MAX_OCCUPANCY = 0.75;
static constexpr uint32_t EMPTY_HASH = 0;
private:
TKey *keys = nullptr;
uint32_t *hash_to_key = nullptr;
uint32_t *key_to_hash = nullptr;
uint32_t *hashes = nullptr;
uint32_t capacity_index = 0;
uint32_t num_elements = 0;
uint32_t _hash(const TKey &p_key);
static uint32_t _get_probe_length(const uint32_t p_pos, const uint32_t p_hash, const uint32_t p_capacity, const uint64_t p_capacity_inv);
bool _lookup_pos(const TKey &p_key, uint32_t &r_pos);
uint32_t _insert_with_hash(uint32_t p_hash, uint32_t p_index);
void _resize_and_rehash(uint32_t p_new_capacity_index);
int32_t _insert(const TKey &p_key);
void _init_from(const HashSet &p_other);
public:
uint32_t get_capacity();
uint32_t size();
bool is_empty();
void clear();
bool has(const TKey &p_key);
bool erase(const TKey &p_key);
void reserve(uint32_t p_new_capacity);
struct Iterator {
const TKey &operator*();
const TKey *operator->();
Iterator &operator++();
Iterator &operator--();
const TKey &key();
const TKey *key_ptr();
Iterator &next();
Iterator &prev();
bool valid();
bool operator==(const Iterator &b);
bool operator!=(const Iterator &b);
explicit operator bool();
Iterator(const TKey *p_keys, uint32_t p_num_keys, int32_t p_index = -1);
Iterator();
Iterator(const Iterator &p_it);
void operator=(const Iterator &p_it);
private:
const TKey *keys = nullptr;
uint32_t num_keys = 0;
int32_t index = -1;
};
Iterator begin();
Iterator end();
Iterator last();
Iterator find(const TKey &p_key);
void remove(const Iterator &p_iter);
Iterator insert(const TKey &p_key);
HashSet(const HashSet &p_other);
void operator=(const HashSet &p_other);
HashSet(uint32_t p_initial_capacity);
HashSet();
void reset();
~HashSet();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
FileAccess
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class FileAccess {
public:
String read_file(const String &path);
Vector read_file_bin(const String &path);
Error read_file_into_bin(const String &path, Vector *data);
Error write_file(const String &path, const String &str);
Error write_file_bin(const String &path, const Vector &data);
FileAccess();
virtual ~FileAccess();
private:
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DirAccess
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class DirAccess {
public:
Error open_dir(const String &path, bool skip_specials = true);
Error open_dir(const char *path, bool skip_specials = true);
void close_dir();
bool has_next();
bool read();
bool next();
bool current_is_ok();
String current_get_name();
String current_get_path();
String current_get_extension();
const char *current_get_name_cstr();
const char *current_get_path_cstr();
const char *current_get_extension_cstr();
bool current_is_file();
bool current_is_dir();
bool current_is_special_dir();
bool is_dir_open();
bool is_dir_closed();
DirAccess();
virtual ~DirAccess();
private:
bool _skip_specials;
int _read_file_result;
tinydir_dir *_dir;
tinydir_file *_file;
bool _dir_open;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SFWCore
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class SFWCore {
public:
static void setup();
static void cleanup();
protected:
static bool _initialized;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RefPtr
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class RefPtr {
enum {
DATASIZE = sizeof(void *);
RefPtr(const RefPtr &p_other);
RefPtr();
~RefPtr();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CoreStringNames
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class CoreStringNames {
public:
static void create();
static void free();
CoreStringNames();
static CoreStringNames *get_singleton();
static CoreStringNames *singleton;
StringName _free;
StringName changed;
StringName _meta;
StringName _script;
StringName script_changed;
StringName ___pdcdata;
StringName __getvar;
StringName _iter_init;
StringName _iter_next;
StringName _iter_get;
StringName get_rid;
StringName _to_string;
#ifdef TOOLS_ENABLED
StringName _sections_unfolded;
#endif
StringName _custom_features;
StringName x;
StringName y;
StringName z;
StringName w;
StringName r;
StringName g;
StringName b;
StringName a;
StringName position;
StringName size;
StringName end;
StringName basis;
StringName origin;
StringName normal;
StringName d;
StringName h;
StringName s;
StringName v;
StringName r8;
StringName g8;
StringName b8;
StringName a8;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Array
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Array {
mutable ArrayPrivate *_p;
void _ref(const Array &p_from);
void _unref();
int _clamp_slice_index(int p_index);
public:
Variant &operator[](int p_idx);
const Variant &operator[](int p_idx);
void set(int p_idx, const Variant &p_value);
const Variant &get(int p_idx);
int size();
bool empty();
void clear();
bool deep_equal(const Array &p_array, int p_recursion_count = 0);
bool operator==(const Array &p_array);
uint32_t hash();
uint32_t recursive_hash(int p_recursion_count);
void operator=(const Array &p_array);
void push_back(const Variant &p_value);
void append(const Variant &p_value);
void append_array(const Array &p_array);
Error resize(int p_new_size);
void insert(int p_pos, const Variant &p_value);
void remove(int p_pos);
void fill(const Variant &p_value);
Variant front();
Variant back();
Array &sort();
Array &sort_custom(Object *p_obj);
void shuffle();
int bsearch(const Variant &p_value, bool p_before = true);
int bsearch_custom(const Variant &p_value, Object *p_obj, const StringName &p_function, bool p_before = true);
Array &invert();
int find(const Variant &p_value, int p_from = 0);
int rfind(const Variant &p_value, int p_from = -1);
int find_last(const Variant &p_value);
int count(const Variant &p_value);
bool has(const Variant &p_value);
void erase(const Variant &p_value);
void push_front(const Variant &p_value);
Variant pop_back();
Variant pop_front();
Variant pop_at(int p_pos);
Array duplicate(bool p_deep = false);
Array slice(int p_begin, int p_end, int p_step = 1, bool p_deep = false);
Variant min();
Variant max();
const void *id();
String sprintf(const String &p_format, bool *error);
Array(const Array &p_from);
Array();
~Array();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dictionary
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Dictionary {
mutable DictionaryPrivate *_p;
void _ref(const Dictionary &p_from);
void _unref();
public:
void get_key_list(List *p_keys);
Variant get_key_at_index(int p_index);
Variant get_value_at_index(int p_index);
Variant &operator[](const Variant &p_key);
const Variant &operator[](const Variant &p_key);
const Variant *getptr(const Variant &p_key);
Variant *getptr(const Variant &p_key);
Variant get_valid(const Variant &p_key);
Variant get(const Variant &p_key, const Variant &p_default);
int size();
bool empty();
void clear();
void merge(const Dictionary &p_dictionary, bool p_overwrite = false);
bool has(const Variant &p_key);
bool has_all(const Array &p_keys);
Variant find_key(const Variant &p_value);
bool erase(const Variant &p_key);
bool deep_equal(const Dictionary &p_dictionary, int p_recursion_count = 0);
bool operator==(const Dictionary &p_dictionary);
bool operator!=(const Dictionary &p_dictionary);
uint32_t hash();
uint32_t recursive_hash(int p_recursion_count);
void operator=(const Dictionary &p_dictionary);
const Variant *next(const Variant *p_key = nullptr);
Array keys();
Array values();
Dictionary duplicate(bool p_deep = false);
const void *id();
Dictionary(const Dictionary &p_from);
Dictionary();
~Dictionary();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Variant
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Variant {
public:
enum Type {
NIL,
BOOL,
INT,
REAL,
STRING,
RECT2,
RECT2I,
VECTOR2,
VECTOR2I,
VECTOR3,
VECTOR3I,
VECTOR4,
VECTOR4I,
PLANE,
QUATERNION,
AABB,
BASIS,
TRANSFORM,
TRANSFORM2D,
PROJECTION,
COLOR,
OBJECT,
STRING_NAME,
DICTIONARY,
ARRAY,
POOL_BYTE_ARRAY,
POOL_INT_ARRAY,
POOL_REAL_ARRAY,
POOL_STRING_ARRAY,
POOL_VECTOR2_ARRAY,
POOL_VECTOR2I_ARRAY,
POOL_VECTOR3_ARRAY,
POOL_VECTOR3I_ARRAY,
POOL_VECTOR4_ARRAY,
POOL_VECTOR4I_ARRAY,
POOL_COLOR_ARRAY,
VARIANT_MAX
};
enum {
MAX_RECURSION_DEPTH = 1024,
};
private:
Type type;
struct ObjData {
ObjectRC *rc;
RefPtr ref;
};
ObjData &_get_obj();
const ObjData &_get_obj();
union {
bool _bool;
int64_t _int;
double _real;
Transform2D *_transform2d;
::AABB *_aabb;
Basis *_basis;
Transform *_transform;
Projection *_projection;
void *_ptr;
uint8_t _mem[sizeof(ObjData);
} _data GCC_ALIGNED_8;
void reference(const Variant &p_variant);
void clear();
public:
Type get_type();
static String get_type_name(Variant::Type p_type);
static bool can_convert(Type p_type_from, Type p_type_to);
static bool can_convert_strict(Type p_type_from, Type p_type_to);
bool is_ref();
bool is_num();
bool is_array();
bool is_null();
bool is_shared();
bool is_zero();
bool is_one();
ObjectID get_object_instance_id();
bool is_invalid_object();
operator bool();
operator signed int();
operator unsigned int();
operator signed short();
operator unsigned short();
operator signed char();
operator unsigned char();
operator int64_t();
operator uint64_t();
#ifdef NEED_LONG_INT
operator signed long();
operator unsigned long();
#endif
operator CharType();
operator float();
operator double();
operator String();
operator StringName();
operator Rect2();
operator Rect2i();
operator Vector2();
operator Vector2i();
operator Vector3();
operator Vector3i();
operator Vector4();
operator Vector4i();
operator Plane();
operator ::AABB();
operator Quaternion();
operator Basis();
operator Transform();
operator Transform2D();
operator Projection();
operator Color();
operator RefPtr();
operator Object *();
operator Dictionary();
operator Array();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator PoolVector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Vector();
operator Margin();
operator Side();
operator Orientation();
Variant(bool p_bool);
Variant(signed int p_int);
Variant(unsigned int p_int);
#ifdef NEED_LONG_INT
Variant(signed long p_long);
Variant(unsigned long p_long);
#endif
Variant(signed short p_short);
Variant(unsigned short p_short);
Variant(signed char p_char);
Variant(unsigned char p_char);
Variant(int64_t p_int);
Variant(uint64_t p_int);
Variant(float p_float);
Variant(double p_double);
Variant(const String &p_string);
Variant(const StringName &p_string);
Variant(const char *const p_cstring);
Variant(const CharType *p_wstring);
Variant(const Vector2 &p_vector2);
Variant(const Vector2i &p_vector2);
Variant(const Rect2 &p_rect2);
Variant(const Rect2i &p_rect2);
Variant(const Vector3 &p_vector3);
Variant(const Vector3i &p_vector3);
Variant(const Vector4 &p_vector4);
Variant(const Vector4i &p_vector4);
Variant(const Projection &p_projection);
Variant(const Plane &p_plane);
Variant(const ::AABB &p_aabb);
Variant(const Quaternion &p_quat);
Variant(const Basis &p_matrix);
Variant(const Transform2D &p_transform);
Variant(const Transform &p_transform);
Variant(const Color &p_color);
Variant(const RefPtr &p_resource);
Variant(const Object *p_object);
Variant(const Dictionary &p_dictionary);
Variant(const Array &p_array);
Variant(const PoolVector &p_array);
Variant(const PoolVector &p_raw_array);
Variant(const PoolVector &p_int_array);
Variant(const PoolVector &p_real_array);
Variant(const PoolVector &p_string_array);
Variant(const PoolVector &p_vector3_array);
Variant(const PoolVector &p_vector3_array);
Variant(const PoolVector &p_color_array);
Variant(const PoolVector &p_face_array);
Variant(const PoolVector &p_vector2_array);
Variant(const PoolVector &p_vector2_array);
Variant(const PoolVector &p_vector4_array);
Variant(const PoolVector &p_vector4_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
Variant(const Vector &p_array);
enum Operator {
OP_EQUAL,
OP_NOT_EQUAL,
OP_LESS,
OP_LESS_EQUAL,
OP_GREATER,
OP_GREATER_EQUAL,
OP_ADD,
OP_SUBTRACT,
OP_MULTIPLY,
OP_DIVIDE,
OP_NEGATE,
OP_POSITIVE,
OP_MODULE,
OP_STRING_CONCAT,
OP_SHIFT_LEFT,
OP_SHIFT_RIGHT,
OP_BIT_AND,
OP_BIT_OR,
OP_BIT_XOR,
OP_BIT_NEGATE,
OP_AND,
OP_OR,
OP_XOR,
OP_NOT,
OP_IN,
OP_MAX
};
static String get_operator_name(Operator p_op);
static void evaluate(const Operator &p_op, const Variant &p_a, const Variant &p_b, Variant &r_ret, bool &r_valid);
static Variant evaluate(const Operator &p_op, const Variant &p_a, const Variant &p_b);
void zero();
Variant duplicate(bool deep = false);
static void blend(const Variant &a, const Variant &b, float c, Variant &r_dst);
static void interpolate(const Variant &a, const Variant &b, float c, Variant &r_dst);
static void sub(const Variant &a, const Variant &b, Variant &r_dst);
void set_named(const StringName &p_index, const Variant &p_value, bool *r_valid = nullptr);
Variant get_named(const StringName &p_index, bool *r_valid = nullptr);
void set(const Variant &p_index, const Variant &p_value, bool *r_valid = nullptr);
Variant get(const Variant &p_index, bool *r_valid = nullptr);
bool in(const Variant &p_index, bool *r_valid = nullptr);
bool iter_init(Variant &r_iter, bool &r_valid);
bool iter_next(Variant &r_iter, bool &r_valid);
Variant iter_get(const Variant &r_iter, bool &r_valid);
bool deep_equal(const Variant &p_variant, int p_recursion_count = 0);
bool operator==(const Variant &p_variant);
bool operator!=(const Variant &p_variant);
bool operator<(const Variant &p_variant);
uint32_t hash();
uint32_t recursive_hash(int p_recursion_count);
bool hash_compare(const Variant &p_variant);
bool booleanize();
String stringify(List &stack);
void operator=(const Variant &p_variant);
Variant(const Variant &p_variant);
Variant();
~Variant();
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Signal
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Signal {
public:
Object *emitter;
Vector params;
Vector static_data;
template
void connect(T *obj, void (*func);
template
void disconnect(T *obj, void (*func);
template
bool is_connected(T *obj, void (*func);
void connect_static(void (*func);
void disconnect_static(void (*func);
bool is_connected_static(void (*func);
void emit(Object *p_emitter);
void emit(Object *p_emitter, const Variant &p1);
void emit(Object *p_emitter, const Variant &p1, const Variant &p2);
void emit(Object *p_emitter, const Variant &p1, const Variant &p2, const Variant &p3);
void emit(Object *p_emitter, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4);
void emit(Object *p_emitter, const Variant &p1, const Variant &p2, const Variant &p3, const Variant &p4, const Variant &p5);
Signal();
~Signal();
protected:
enum SignalEntryType {
SIGNAL_ENTRY_TYPE_NONE = 0,
SIGNAL_ENTRY_TYPE_STATIC = 1,
SIGNAL_ENTRY_TYPE_CLASS = 2,
};
struct SignalEntry {
SignalEntryType type;
virtual void call(Signal *s);
SignalEntry();
};
struct StaticSignalEntry : public SignalEntry {
void (*func);
virtual void call(Signal *s);
StaticSignalEntry();
};
struct ClassSignalEntry : public SignalEntry {
virtual void* get_obj_ptr();
virtual void* get_func_ptr();
ClassSignalEntry();
};
template
struct ClassSignalEntrySpec : public ClassSignalEntry {
union {
T* obj;
void* obj_ptr;
};
union {
void (*func);
void* func_ptr;
};
virtual void call(Signal *s);
void* get_obj_ptr();
void* get_func_ptr();
ClassSignalEntrySpec();
};
protected:
Vector entries;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Object
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class Object {
public:
enum {
NOTIFICATION_POSTINITIALIZE = 0,
NOTIFICATION_PREDELETE = 1
};
void set(const StringName &p_name, const Variant &p_value, bool *r_valid = nullptr);
Variant get(const StringName &p_name, bool *r_valid = nullptr);
virtual bool lt(const Variant &p_value_l, const Variant &p_value_r);
virtual String get_class();
static void *get_class_ptr_static();
static String get_class_static();
static String get_parent_class_static();
static void get_inheritance_list_static(Vector *p_inheritance_list);
virtual bool is_class(const String &p_class);
virtual bool is_class_ptr(void *p_ptr);
static void get_valid_parents_static(Vector *p_parents);
static void _get_valid_parents_static(Vector *p_parents);
virtual const StringName *_get_class_namev();
const StringName &get_class_name();
ObjectRC *_use_rc();
ObjectID get_instance_id();
void notification(int p_notification, bool p_reversed = false);
virtual String to_string();
bool _is_queued_for_deletion;
bool is_queued_for_deletion();
void cancel_free();
bool has_meta(const String &p_name);
void set_meta(const String &p_name, const Variant &p_value);
void remove_meta(const String &p_name);
Variant get_meta(const String &p_name, const Variant &p_default = Variant();
void get_meta_list(List *p_list);
Object();
virtual ~Object();
template
static T *cast_to(Object *p_object);
template
static const T *cast_to(const Object *p_object);
protected:
void (Object::*_get_notification();
bool _set(const StringName &p_name, const Variant &p_property);
bool _get(const StringName &p_name, Variant &r_property);
virtual bool _setv(const StringName &p_name, const Variant &p_property);
virtual bool _getv(const StringName &p_name, Variant &r_property);
bool (Object::*_get_get();
bool (Object::*_get_set();
virtual void _notificationv(int p_notification, bool p_reversed);
void _notification(int p_notification);
friend bool predelete_handler(Object *);
friend void postinitialize_handler(Object *);
int _predelete_ok;
bool _predelete();
void _postinitialize();
mutable StringName _class_name;
mutable const StringName *_class_ptr;
ObjectID _instance_id;
std::atomic _rc;
Dictionary metadata;
};
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ObjectDB
----------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ C++
class ObjectDB {
struct ObjectPtrHash {
static uint32_t hash(const Object *p_obj);
};
static HashMap instances;
static HashMap