123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- #include "utils/Utility.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- static Core::ExitHandler exitHandler = nullptr;
- static void* exitData = nullptr;
- const char* Core::getErrorName(Error e) {
- switch(e) {
- case Error::NONE: return "NONE";
- case Error::NEGATIVE_ARGUMENT: return "NEGATIVE_ARGUMENT";
- case Error::CAPACITY_REACHED: return "CAPACITY_REACHED";
- case Error::BLOCKED_STDOUT: return "BLOCKED_STDOUT";
- case Error::OUT_OF_MEMORY: return "OUT_OF_MEMORY";
- case Error::INVALID_CHAR: return "INVALID_CHAR";
- case Error::NOT_FOUND: return "NOT_FOUND";
- case Error::INVALID_STATE: return "INVALID_STATE";
- case Error::INVALID_INDEX: return "INVALID_INDEX";
- case Error::TIME_NOT_AVAILABLE: return "TIME_NOT_AVAILABLE";
- case Error::SLEEP_INTERRUPTED: return "SLEEP_INTERRUPTED";
- case Error::THREAD_ERROR: return "THREAD_ERROR";
- case Error::INVALID_ID: return "INVALID_ID";
- case Error::EXISTING_KEY: return "EXISTING_KEY";
- }
- return "?";
- }
- void* operator new(size_t bytes) noexcept {
- return malloc(bytes);
- }
- void* operator new[](size_t bytes) noexcept {
- return malloc(bytes);
- }
- void operator delete(void* p) noexcept {
- free(p);
- }
- void operator delete[](void* p) noexcept {
- free(p);
- }
- void operator delete(void* p, size_t bytes) noexcept {
- (void)bytes;
- free(p);
- }
- void operator delete[](void* p, size_t bytes) noexcept {
- (void)bytes;
- free(p);
- }
- void* operator new(size_t bytes, void* p) noexcept {
- (void)bytes;
- return p;
- }
- /*void* operator new[](size_t bytes, void* p) noexcept {
- (void)bytes;
- return p;
- }*/
- void Core::exitWithHandler(const char* file, int line, int value) {
- if(value != 0) {
- printf("\33[1;31mExit from %s:%d with value %d\33[39;49m\n", file, line,
- value);
- }
- if(exitHandler != nullptr) {
- exitHandler(value, exitData);
- }
- exit(value);
- }
- void Core::setExitHandler(ExitHandler eh, void* data) {
- exitHandler = eh;
- exitData = data;
- }
- #define CORE_TO_STRING(type, cast, format) \
- check_return Core::Error Core::toString(type t, char* buffer, int size) { \
- if(size < 0) { \
- return Error::NEGATIVE_ARGUMENT; \
- } \
- return snprintf(buffer, static_cast<unsigned int>(size), format, \
- static_cast<cast>(t)) >= size \
- ? Error::CAPACITY_REACHED \
- : Error::NONE; \
- }
- CORE_TO_STRING(signed short, signed short, "%hd")
- CORE_TO_STRING(unsigned short, unsigned short, "%hu")
- CORE_TO_STRING(signed int, signed int, "%d")
- CORE_TO_STRING(unsigned int, unsigned int, "%u")
- CORE_TO_STRING(signed long, signed long, "%ld")
- CORE_TO_STRING(unsigned long, unsigned long, "%lu")
- CORE_TO_STRING(signed long long, signed long long, "%lld")
- CORE_TO_STRING(unsigned long long, unsigned long long, "%llu")
- CORE_TO_STRING(float, double, "%.2f")
- CORE_TO_STRING(double, double, "%.2lf")
- CORE_TO_STRING(long double, long double, "%.2Lf")
- Core::Error Core::putChar(int c) {
- return putchar(c) == EOF ? Error::BLOCKED_STDOUT : Error::NONE;
- }
- void Core::memorySet(void* p, int c, int n) {
- if(n <= 0) {
- return;
- }
- memset(p, c, static_cast<unsigned int>(n));
- }
- void Core::memoryCopy(void* dest, const void* src, int n) {
- if(n <= 0) {
- return;
- }
- memcpy(dest, src, static_cast<unsigned int>(n));
- }
- bool Core::memoryCompare(const void* a, const void* b, int n) {
- return n <= 0 ? true : memcmp(a, b, static_cast<unsigned int>(n)) == 0;
- }
- Core::Error Core::reallocate(char*& p, int n) {
- if(n <= 0) {
- free(p);
- p = nullptr;
- return Error::NONE;
- }
- char* newP = static_cast<char*>(realloc(p, static_cast<unsigned int>(n)));
- if(newP == nullptr) {
- return Error::OUT_OF_MEMORY;
- }
- p = newP;
- return Error::NONE;
- }
- void Core::free(void* p) {
- ::free(p);
- }
- const char* Core::getFileName(const char* path) {
- int end = 0;
- while(path[end] != '\0') {
- end++;
- }
- while(end > 0 && path[end - 1] != '/') {
- end--;
- }
- return path + end;
- }
|