initial commit

This commit is contained in:
2024-07-30 01:02:42 +03:00
commit 2e1fcb9536
25 changed files with 775 additions and 0 deletions

15
src/UsefulException.cpp Normal file
View File

@@ -0,0 +1,15 @@
#include "UsefulException.hpp"
#include <sstream>
UsefulException_::UsefulException_(const std::string& _message, const std::string& _file, const std::string& _func, int _line_n)
: message(_message), file(_file), function(_func), line_n(_line_n)
{
std::stringstream ss;
ss<<message<<'\n';
ss<<" at "<<file<<':'<<_line_n<<" in "<<function;
complete_text = ss.str();
}
char const* UsefulException_::what() const noexcept {
return complete_text.c_str();
}

21
src/UsefulException.hpp Normal file
View File

@@ -0,0 +1,21 @@
#pragma once
#include <stdexcept>
#include <string>
#define UsefulException(MSG) UsefulException_(MSG, __FILE__, __func__, __LINE__)
class UsefulException_ : public std::exception {
std::string message;
std::string file;
std::string function;
int line_n;
std::string complete_text;
public:
UsefulException_(const std::string& msg, const std::string& _file, const std::string& _func, int line_n);
virtual char const* what() const noexcept;
};
#define useful_assert(EXPR, ERRMSG) if(!EXPR) throw UsefulException(ERRMSG);

66
src/format.cpp Normal file
View File

@@ -0,0 +1,66 @@
#include <string>
#include <sstream>
#include <stdarg.h>
#include "UsefulException.hpp"
#include "std.hpp"
std::string _format(const std::string& format_str, const size_t args_count, ...){
va_list vl;
va_start(vl, args_count);
std::stringstream ss;
for(size_t i = 0; i < format_str.length(); i++){
char c = format_str[i];
// format specifier
if(c == '%'){
c = format_str[++i];
bool l = false;
while(c == 'l'){
l = true;
c = format_str[++i];
}
switch(c){
case 'u':
if(l) ss<<(u64)va_arg(vl, u64);
else ss<<(u32)va_arg(vl, u32);
break;
case 'i':
case 'd':
if(l) ss<<(i64)va_arg(vl, i64);
else ss<<(i32)va_arg(vl, i32);
break;
case 'f':
// f32 is promoted to f64 when passed through '...'
ss<<(f64)va_arg(vl, f64);
break;
case 'p':
ss<<(void*)va_arg(vl, void*);
break;
case 'x':
if(l) ss<<std::hex<<(u64)va_arg(vl, u64);
else ss<<std::hex<<(u32)va_arg(vl, u32);
break;
case 's': {
const char* cptr = va_arg(vl,char*);
if(cptr != nullptr)
ss<<cptr;
else ss<<"<nullptr>";
break;
}
case 'c':
ss<<(char)va_arg(vl,int);
break;
default:
throw UsefulException("invalid format cpecifier");
}
}
// regular character
else ss<<c;
}
va_end(vl);
return ss.str();
}

7
src/format.hpp Normal file
View File

@@ -0,0 +1,7 @@
#pragma once
#include <string>
#include "../dependencies/kerep/src/base/std.h"
std::string _format(const std::string& format_str, const size_t args_count, ...);
#define format(FORMAT_STR, ARGS...) _format(FORMAT_STR, count_args(ARGS) ,##ARGS)

9
src/main.cpp Normal file
View File

@@ -0,0 +1,9 @@
#define SDL_MAIN_HANDLED
#include <SDL.h>
#include "std.hpp"
#include <iostream>
int main(int argc, const char** argv){
std::cout<<"UwU"<<std::endl;
return 0;
}

60
src/std.hpp Normal file
View File

@@ -0,0 +1,60 @@
#pragma once
#include <cstdint>
typedef int8_t i8;
typedef uint8_t u8;
typedef int16_t i16;
typedef uint16_t u16;
typedef int32_t i32;
typedef uint32_t u32;
typedef int64_t i64;
typedef uint64_t u64;
typedef float f32;
typedef double f64;
/// anonymous pointer without specified freeMembers() func
typedef void* Pointer;
#define nameof(V) #V
#ifdef _MSC_VER
#pragma comment(lib, "mincore_downlevel.lib") // Support OS older than SDK
#define _CRT_SECURE_NO_WARNINGS 1
#define EXPORT __declspec(dllexport)
#define CALL __cdecl
#elif defined(__GNUC__)
#define EXPORT __attribute__((visibility("default")))
#if __SIZEOF_POINTER__ == 4
#define CALL __attribute__((__cdecl__))
#else
#define CALL
#endif
#ifndef typeof
#define typeof(X) __typeof__(X)
#endif
#else
#pragma GCC error "unknown compiler"
#endif
#define __count_args( \
a0, a1, a2, a3, a4, a5, a6, a7 , \
a8, a9, a10,a11,a12,a13,a14,a15, \
a16,a17,a18,a19,a20,a21,a22,a23, \
a24,a25,a26,a27,a28,a29,a30,a31, \
a32,a33,a34,a35,a36,a37,a38,a39, \
a40,a41,a42,a43,a44,a45,a46,a47, \
a48,a49,a50,a51,a52,a53,a54,a55, \
a56,a57,a58,a59,a60,a61,a62,a63, \
a64,...) a64
// Macro for counting variadic arguments (max 64)
// (see usage in kprint.h)
#define count_args(ARGS...) __count_args( \
ARGS, \
64,63,62,61,60,59,58,57, \
56,55,54,53,52,51,50,49, \
48,47,46,45,44,43,42,41, \
40,39,38,37,36,35,34,33, \
32,31,30,29,28,27,26,25, \
24,23,22,21,20,19,18,17, \
16,15,14,13,12,11,10,9, \
8, 7, 6, 5, 4, 3, 2, 1, 0)