123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #ifndef CORE_UTILITY_HPP
- #define CORE_UTILITY_HPP
- #include "core/utils/Check.hpp"
- #include "core/utils/Error.hpp"
- #include "core/utils/Types.hpp"
- namespace Core {
- template<typename T, typename C = int>
- C popCount(const T& t) {
- static constexpr C map[16] = {0, 1, 1, 2, 1, 2, 2, 3,
- 1, 2, 2, 3, 2, 3, 3, 4};
- C sum = 0;
- for(size_t i = 0; i < sizeof(T) * 8; i += 4) {
- sum += map[(t >> i) & 0xF];
- }
- return sum;
- }
- using ExitHandler = void (*)(int, void*);
- void exitWithHandler(const char* file, int line, int value);
- void setExitHandler(ExitHandler eh, void* data);
- #define CORE_EXIT(exitValue) \
- Core::exitWithHandler(__FILE__, __LINE__, exitValue)
- size_t toString(signed short s, char* buffer, size_t size);
- size_t toString(unsigned short s, char* buffer, size_t size);
- size_t toString(signed int i, char* buffer, size_t size);
- size_t toString(unsigned int i, char* buffer, size_t size);
- size_t toString(signed long l, char* buffer, size_t size);
- size_t toString(unsigned long l, char* buffer, size_t size);
- size_t toString(signed long long ll, char* buffer, size_t size);
- size_t toString(unsigned long long ll, char* buffer, size_t size);
- size_t toString(float f, char* buffer, size_t size);
- size_t toString(double d, char* buffer, size_t size);
- size_t toString(long double ld, char* buffer, size_t size);
- void print(int c);
- void print(const char* s);
- void printLine(const char* s);
- using OutOfMemoryHandler = void (*)(void*);
- void setOutOfMemoryHandler(OutOfMemoryHandler h, void* data);
- void* allocate(size_t n);
- void* reallocate(void* p, size_t n);
- }
- #endif
|