From 3b1b2bfb067cdfd36dbd0c3ce2f49c9d0fc4f6e4 Mon Sep 17 00:00:00 2001 From: MCorange Date: Sun, 18 May 2025 18:51:05 +0300 Subject: [PATCH] Add formatting, printing, new stl stuff, unfuck vec, change clangd styling --- .clang-format | 2 +- .vscode/launch.json | 33 ++++++++++++ src/include/collections/vec.hpp | 27 +++++++--- src/include/format/base_types.hpp | 54 +++++++++++++++++++ src/include/format/fmt.hpp | 83 +++++++++++++++++++++++++++++- src/include/io/print.hpp | 23 +++++++++ src/include/std.hpp | 9 ++-- src/include/stddef.hpp.old | 30 ----------- src/include/stl.hpp | 1 + src/include/stl/remove_cvref.hpp | 28 ++++++++++ src/include/string.hpp | 5 ++ src/lib.cpp | 1 - src/string.cpp | 26 +++++++++- test/test | Bin 31792 -> 58680 bytes test/test.cpp | 16 +++--- 15 files changed, 284 insertions(+), 54 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 src/include/format/base_types.hpp create mode 100644 src/include/io/print.hpp delete mode 100644 src/include/stddef.hpp.old create mode 100644 src/include/stl/remove_cvref.hpp delete mode 100644 src/lib.cpp diff --git a/.clang-format b/.clang-format index 35cce5e..d7b3f42 100644 --- a/.clang-format +++ b/.clang-format @@ -177,7 +177,7 @@ RequiresClausePosition: OwnLine RequiresExpressionIndentation: OuterScope SeparateDefinitionBlocks: Always ShortNamespaceLines: 1 -SortIncludes: CaseSensitive +SortIncludes: Never SortJavaStaticImport: Before SortUsingDeclarations: LexicographicNumeric SpaceAfterCStyleCast: false diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..d4d8817 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,33 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "(gdb) Launch", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/test/test", + "args": [], + "stopAtEntry": false, + "cwd": "${fileDirname}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "setupCommands": [ + { + "description": "Enable pretty-printing for gdb", + "text": "-enable-pretty-printing", + "ignoreFailures": true + }, + { + "description": "Set Disassembly Flavor to Intel", + "text": "-gdb-set disassembly-flavor intel", + "ignoreFailures": true + } + ] + } + + ] +} \ No newline at end of file diff --git a/src/include/collections/vec.hpp b/src/include/collections/vec.hpp index de4b934..e24c75d 100644 --- a/src/include/collections/vec.hpp +++ b/src/include/collections/vec.hpp @@ -3,13 +3,13 @@ #include "result.hpp" #include +#include #include -#include template class Vec { private: - T* items; + T* items = nullptr; size_t count = 0; size_t capacity = 0; @@ -24,14 +24,14 @@ public: if (this->count <= n) { return Option(); } - return Option(this->items[n]); + return Option(&this->items[n]); } Option nth(const size_t n) const { if (this->count <= n) { return Option(); } - return Option(this->items[n]); + return Option(&this->items[n]); } Option pop() { @@ -88,6 +88,17 @@ public: this->count = 0; } + T* to_ptr() { + // Special case for cstr + // makes items[count] a null value so the cstr is valid + // TODO: Maybe make Vec::to_ptr only do this when T is char + if (this->count >= this->capacity) { + this->reserve(this->capacity * 2); + } + this->items[this->count] = (T)NULL; + return this->items; + } + static Vec from_ptr(const T* ptr, size_t len) { Vec vec = Vec(); for (size_t i = 0; i < len; i++) { @@ -100,11 +111,13 @@ public: return this->count; } + // IMPL: Clone Vec clone() { Vec nv = Vec(); - nv.items = new T(*this->items); - nv.count = this->count; - nv.capacity = this->capacity; + nv = *this; + // nv.items = new T(*this->items); + // nv.count = this->count; + // nv.capacity = this->capacity; return nv; } }; diff --git a/src/include/format/base_types.hpp b/src/include/format/base_types.hpp new file mode 100644 index 0000000..0a41e59 --- /dev/null +++ b/src/include/format/base_types.hpp @@ -0,0 +1,54 @@ +#ifndef _H_LIBCP_FORMAT_BASE_TYPES +#define _H_LIBCP_FORMAT_BASE_TYPES + +#include + +extern "C" { +int snprintf(char* __restrict s, size_t maxlen, const char* __restrict format, ...); +} + +template +struct Formatter; + +template <> +struct Formatter { + static String fmt_to_str(const int& val) { + char buf[32]; + snprintf(buf, sizeof(buf), "%d", val); + return String(buf); + } +}; + +template <> +struct Formatter { + static String fmt_to_str(const char* val) { + return String(val); + } +}; + +template <> +struct Formatter { + static String fmt_to_str(char* val) { + return String(val); + } +}; + +template <> +struct Formatter { + static String fmt_to_str(const float& val) { + char buf[32]; + snprintf(buf, sizeof(buf), "%f", val); + return String(buf); + } +}; + +template <> +struct Formatter { + static String fmt_to_str(const double& val) { + char buf[32]; + snprintf(buf, sizeof(buf), "%f", val); + return String(buf); + } +}; + +#endif // !_H_LIBCP_FORMAT_BASE_TYPES diff --git a/src/include/format/fmt.hpp b/src/include/format/fmt.hpp index 16a46cf..6d7af90 100644 --- a/src/include/format/fmt.hpp +++ b/src/include/format/fmt.hpp @@ -1,12 +1,91 @@ #ifndef _H_LIBCP_FORMAT_FMT #define _H_LIBCP_FORMAT_FMT -#include +#include +#include +#include +#include #include +#include "format/base_types.hpp" + template concept Format = requires(T t) { - { t.fmt_as_str() } -> same_as; + { t.fmt_to_str() } -> stl::same_as; +} || requires(T t) { + { Formatter::fmt_to_str(t) } -> stl::same_as; }; +#ifndef __CONCEPT_ONLY + +namespace __internal { + String format(Vec& args, String& _fmt) { + const char* fmt = _fmt.as_cstr(); + String str = String(); + size_t args_idx = 0; + for (size_t i = 0; i < strlen(fmt); i++) { + if (fmt[i] == '{') { + if (fmt[i + 1] == '{') { + str.push('{'); + str.push('{'); + i += 1; + continue; + } + if (fmt[i + 1] == '}') { + i += 1; + String* arg = args.nth(args_idx).unwrap(); + str.push_str(*arg); + args_idx += 1; + } + continue; + } + str.push(fmt[i]); + } + return str; + } + + template + String format(Vec& args, String& fmt, T var1, Types... var2) { + using ActualType = stl::remove_cvref_t; + + if constexpr (requires(ActualType v) { v.fmt_to_str(); }) { + args.push(var1.fmt_to_str()); + } else { + args.push(Formatter::fmt_to_str(var1)); + } + + return __internal::format(args, fmt, var2...); + } +} // namespace __internal + +template +String format(const char* fmt, Types... vars) { + Vec args = Vec(); + String fmt_ = String(fmt); + return __internal::format(args, fmt_, vars...); +} + +template +struct Formatter> { + static String fmt_to_str(Vec& val) { + String s = String(); + s.push('['); + if (val.len() == 0) { + s.push(']'); + return s; + } + String tmp1 = format("{}", *val.nth(0).unwrap()).fmt_to_str(); + s.push_str(tmp1); + for (size_t i = 1; i < val.len(); i++) { + s.push_str(", "); + + String tmp2 = format("{}", *val.nth(i).unwrap()); + s.push_str(tmp2); + } + s.push(']'); + return s; + } +}; + +#endif // __CONCEPT_ONLY #endif // _H_LIBCP_FORMAT_FMT \ No newline at end of file diff --git a/src/include/io/print.hpp b/src/include/io/print.hpp new file mode 100644 index 0000000..fc6918a --- /dev/null +++ b/src/include/io/print.hpp @@ -0,0 +1,23 @@ +#ifndef _H_LIBCP_IO_PRINT +#define _H_LIBCP_IO_PRINT + +#include + +extern "C" { +int puts(const char* s); +int putchar(int c); +} + +template +void print(const char* fmt, Types... args) { + String s = format(fmt, args...); + puts(s.as_cstr()); +} + +template +void println(const char* fmt, Types... args) { + print(fmt, args...); + putchar('\n'); +} + +#endif // !_H_LIBCP_IO_PRINT diff --git a/src/include/std.hpp b/src/include/std.hpp index 4342a2c..66accf4 100644 --- a/src/include/std.hpp +++ b/src/include/std.hpp @@ -2,9 +2,12 @@ #ifndef _H_LIBCP #define _H_LIBCP -namespace std { -#include +#include + +#include +#include +#include #include -} // namespace std +#include #endif // _H_LIBCP \ No newline at end of file diff --git a/src/include/stddef.hpp.old b/src/include/stddef.hpp.old deleted file mode 100644 index 4130a03..0000000 --- a/src/include/stddef.hpp.old +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef _H_LIBCP_STDDEF -#define _H_LIBCP_STDDEF - - -#if defined(__x86_64__) || defined(_M_X64) - using size_t = unsigned long; - using ptrdiff_t = long; - using intptr_t = long; - using uintptr_t = unsigned long; -#elif defined(__i386__) || defined(_M_IX86) - using size_t = unsigned int; - using ptrdiff_t = int; - using intptr_t = int; - using uintptr_t = unsigned int; -#else - #error "Unsupported architecture for my_std types nya~" -#endif - -// Exact-width types — assuming standard model (you can static_assert later!) -using int8_t = signed char; -using int16_t = short; -using int32_t = int; -using int64_t = long long; - -using uint8_t = unsigned char; -using uint16_t = unsigned short; -using uint32_t = unsigned int; -using uint64_t = unsigned long long; - -#endif // _H_LIBCP_STDDEF diff --git a/src/include/stl.hpp b/src/include/stl.hpp index 11e9290..de62858 100644 --- a/src/include/stl.hpp +++ b/src/include/stl.hpp @@ -7,6 +7,7 @@ namespace stl { #include #include #include +#include #include } // namespace stl diff --git a/src/include/stl/remove_cvref.hpp b/src/include/stl/remove_cvref.hpp new file mode 100644 index 0000000..3441240 --- /dev/null +++ b/src/include/stl/remove_cvref.hpp @@ -0,0 +1,28 @@ +#ifndef _H_LIBCP_STL_REMOVE_CVREF +#define _H_LIBCP_STL_REMOVE_CVREF + +#include + +// For gcc +// template +// struct __remove_cvref_gcc { +// using type = __remove_cvref(_Tp); +// }; +// template +// using __remove_cvref_t _LIBCPP_NODEBUG = typename __remove_cvref_gcc<_Tp>::type; + +template +using __remove_cvref_t = __remove_cvref(_Tp); + +template +using __is_same_uncvref = is_same<__remove_cvref_t<_Tp>, __remove_cvref_t<_Up>>; + +template +struct remove_cvref { + using type = __remove_cvref(_Tp); +}; + +template +using remove_cvref_t = __remove_cvref_t<_Tp>; + +#endif // _H_LIBCP_STL_REMOVE_CVREF diff --git a/src/include/string.hpp b/src/include/string.hpp index e50be04..703f250 100644 --- a/src/include/string.hpp +++ b/src/include/string.hpp @@ -14,6 +14,11 @@ public: size_t len(); void clear(); Vec& chars(); + char* const as_cstr(); + void push(char c); + void push_str(String& str); + // void push_str(String&& str); + void push_str(const char* str); // IMPL: Format String fmt_to_str(); // IMPL: Clone diff --git a/src/lib.cpp b/src/lib.cpp deleted file mode 100644 index 8b13789..0000000 --- a/src/lib.cpp +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/string.cpp b/src/string.cpp index 328598b..2797580 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -2,7 +2,7 @@ #include String::String(const char* str) { - this->_chars.from_ptr((char*)str, strlen(str)); + this->_chars = Vec::from_ptr((char*)str, strlen(str)); } size_t String::len() { @@ -21,6 +21,30 @@ String String::fmt_to_str() { return this->clone(); } +char* const String::as_cstr() { + return this->_chars.to_ptr(); +} + +void String::push(char c) { + this->_chars.push(c); +} + +void String::push_str(String& str) { + Vec chrs = str.chars(); + + for (size_t i = 0; i < chrs.len(); i++) { + // SAFETY: Always Valid + this->push(*chrs.nth(i).unwrap()); + } +} + +void String::push_str(const char* str) { + for (size_t i = 0; i < strlen(str); i++) { + this->push(str[i]); + } +} + +// IMPL: Clone String String::clone() { String s = String(); s._chars = this->_chars.clone(); diff --git a/test/test b/test/test index 5cacb8bd927ab9c4fb38ce25d8834ddbca42962e..3c121e44636b535ee7d6bce228256d232f7429ef 100755 GIT binary patch literal 58680 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 diff --git a/test/test.cpp b/test/test.cpp index 30e5956..2339b49 100644 --- a/test/test.cpp +++ b/test/test.cpp @@ -1,13 +1,11 @@ -#include -#include -#include +#include int main(int argc, char* argv[]) { - Vec* v = new Vec(); - v->push(69); - v->push(420); - size_t ft = v->pop().unwrap(); - size_t sn = v->pop().unwrap(); - printf("ft: %zu sn: %zu\n", ft, sn); + Vec v = Vec(); + v.push(1); + v.push(2); + v.push(3); + v.push(4); + println("Hello!!!! {}, {}, {}, {}", "meow", 420.0, 49, v); return 0; } \ No newline at end of file