fixes
This commit is contained in:
4
app.cpp
4
app.cpp
@@ -1,4 +1,3 @@
|
|||||||
#include <stdio.h>
|
|
||||||
#include "core.c"
|
#include "core.c"
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
@@ -6,7 +5,8 @@ int main(int argc, char **argv) {
|
|||||||
Arena *arena = arenaAlloc(Megabytes(64));
|
Arena *arena = arenaAlloc(Megabytes(64));
|
||||||
StringList args = getArgs(arena, argc, argv);
|
StringList args = getArgs(arena, argc, argv);
|
||||||
|
|
||||||
print("%S", strSplit(arena, s("-"), s("hallo-world")));
|
printStrList(args);
|
||||||
|
printStrList(strSplit(arena, s("-"), s("the-quick-brown-fox-jumps-over-the-lazy-dog")));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
39
core.c
39
core.c
@@ -210,7 +210,8 @@ StringList strSplit(Arena *arena, string splitStr, string inputStr) {
|
|||||||
size_t start = 0;
|
size_t start = 0;
|
||||||
void *beginning = (char *)arena->memory + arena->head;
|
void *beginning = (char *)arena->memory + arena->head;
|
||||||
while (c < inputStr.length - splitStr.length) {
|
while (c < inputStr.length - splitStr.length) {
|
||||||
if (strEql(strSlice(inputStr, c, c + splitStr.length), splitStr)) {
|
string mystr = strSlice(inputStr, c, c + splitStr.length);
|
||||||
|
if (strEql(mystr, splitStr)) {
|
||||||
string *splitString = PushStruct(arena, string);
|
string *splitString = PushStruct(arena, string);
|
||||||
splitString->str = inputStr.str + start;
|
splitString->str = inputStr.str + start;
|
||||||
splitString->length = c - start;
|
splitString->length = c - start;
|
||||||
@@ -224,9 +225,10 @@ StringList strSplit(Arena *arena, string splitStr, string inputStr) {
|
|||||||
splitString->str = inputStr.str + start;
|
splitString->str = inputStr.str + start;
|
||||||
splitString->length = inputStr.length - start;
|
splitString->length = inputStr.length - start;
|
||||||
splitCount++;
|
splitCount++;
|
||||||
result.data = (string *)beginning,
|
|
||||||
result.head = splitCount,
|
result.data = (string *)beginning;
|
||||||
result.length = splitCount;
|
result.length = splitCount;
|
||||||
|
result.head = splitCount;
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -293,7 +295,7 @@ ParsePositiveReal32Result parsePositiveReal32(string str, size_t *lengthPointer)
|
|||||||
StringList getArgs(Arena *arena, int argc, char **argv) {
|
StringList getArgs(Arena *arena, int argc, char **argv) {
|
||||||
StringList args = PushList(arena, StringList, (size_t)argc - 1);
|
StringList args = PushList(arena, StringList, (size_t)argc - 1);
|
||||||
for (int i = 1; i < argc; i++) {
|
for (int i = 1; i < argc; i++) {
|
||||||
AppendList(string, &args, strFromCString(arena, argv[i]));
|
AppendList(&args, strFromCString(arena, argv[i]));
|
||||||
}
|
}
|
||||||
return args;
|
return args;
|
||||||
}
|
}
|
||||||
@@ -354,12 +356,8 @@ function void printStdout(const char *fmt, ...) {
|
|||||||
va_end(argList);
|
va_end(argList);
|
||||||
}
|
}
|
||||||
|
|
||||||
void print(const char *fmt, ...) {
|
void (*print)(const char *fmt, ...) = &printStdout;
|
||||||
va_list argList;
|
#define SetStdErr() DeferLoop(print = &printStderr, print = &printStdout)
|
||||||
va_start(argList, fmt);
|
|
||||||
os_print(StdStream_stdout, fmt, argList);
|
|
||||||
va_end(argList);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(dledda): mat print functions
|
// TODO(dledda): mat print functions
|
||||||
/*
|
/*
|
||||||
@@ -400,27 +398,26 @@ void print(list<Vector2<real32>> l, StdStream target) {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void (*__djstdlib_logFn)(const char *fmt, ...) = &printStdout;
|
|
||||||
void printIntList(IntList l) {
|
void printIntList(IntList l) {
|
||||||
__djstdlib_logFn("{ ");
|
print("{ ");
|
||||||
for (size_t i = 0; i < l.length; i++) {
|
for (size_t i = 0; i < l.length; i++) {
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
__djstdlib_logFn(", ");
|
print(", ");
|
||||||
}
|
}
|
||||||
__djstdlib_logFn("%i", l.data[i]);
|
print("%i", l.data[i]);
|
||||||
}
|
}
|
||||||
__djstdlib_logFn(" } length: %zu, head: %zu\n", l.length, l.head);
|
print(" } length: %zu, head: %zu\n", l.length, l.head);
|
||||||
}
|
}
|
||||||
|
|
||||||
void printStringList(StringList l) {
|
void printStrList(StringList l) {
|
||||||
__djstdlib_logFn("{ ");
|
print("{ ");
|
||||||
for (size_t i = 0; i < l.length; i++) {
|
for (size_t i = 0; i < l.length; i++) {
|
||||||
if (i != 0) {
|
if (i != 0) {
|
||||||
__djstdlib_logFn(", ");
|
print(", ");
|
||||||
}
|
}
|
||||||
__djstdlib_logFn("\"%S\"", l.data[i]);
|
print("\"%S\"", l.data[i]);
|
||||||
}
|
}
|
||||||
__djstdlib_logFn(" } length: %zu, head: %zu\n", l.length, l.head);
|
print(" } length: %zu, head: %zu\n", l.length, l.head);
|
||||||
}
|
}
|
||||||
|
|
||||||
int intCompare(const void *a, const void *b) {
|
int intCompare(const void *a, const void *b) {
|
||||||
|
|||||||
28
core.h
28
core.h
@@ -45,8 +45,10 @@ typedef struct string string;
|
|||||||
#define Billion(n) ((n)*1000000000LL)
|
#define Billion(n) ((n)*1000000000LL)
|
||||||
|
|
||||||
#define ArrayCount(arr) (sizeof(arr) / sizeof((arr)[0]))
|
#define ArrayCount(arr) (sizeof(arr) / sizeof((arr)[0]))
|
||||||
#define MemberSize(type, memberName) (sizeof(((type*)0)->data))
|
#define MemberSize(type, memberName) sizeof(((type *)0)->memberName)
|
||||||
#define MemberSizeUnderlying(type, memberName) (sizeof(*((type*)0)->data))
|
#define MemberType(type, memberName) typeof(((type *)0)->memberName)
|
||||||
|
#define MemberSizeUnderlying(type, memberName) sizeof(*((type *)0)->memberName)
|
||||||
|
#define MemberTypeUnderlying(type, memberName) typeof(*((type *)0)->memberName)
|
||||||
|
|
||||||
// ### Arenas ###
|
// ### Arenas ###
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -142,14 +144,14 @@ inline function Vec4 vec4(real32 x, real32 y, real32 z, real32 w) {
|
|||||||
|
|
||||||
DefineList(string, String);
|
DefineList(string, String);
|
||||||
|
|
||||||
#define PushList(arena, type, size) ((type){ pushSize(arena, MemberSizeUnderlying(type, data)), size, 0 })
|
#define PushList(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSize(arena, MemberSizeUnderlying(type, data)*size), size, 0 }
|
||||||
#define EmptyList(type) ((type){ NULL, 0, 0 })
|
#define EmptyList(type) (type){ NULL, 0, 0 }
|
||||||
#define PushListZero(arena, type, size) ((type){ pushSizeFill(arena, MemberSizeUnderlying(type, data), 0), size, 0 })
|
#define PushListZero(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSizeFill(arena, MemberSizeUnderlying(type, data)*size, 0), size, 0 }
|
||||||
#define PushFullList(arena, type, size) ((type){ pushSize(arena, MemberSizeUnderlying(type, data)), size, size })
|
#define PushFullList(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSize(arena, MemberSizeUnderlying(type, data))*size, size, size }
|
||||||
#define PushFullListZero(arena, type, size) ((type){ pushSizeFill(arena, MemberSizeUnderlying(type, data), 0), size, size })
|
#define PushFullListZero(arena, type, size) (type){ (MemberTypeUnderlying(type, data) *)pushSizeFill(arena, MemberSizeUnderlying(type, data)*size, 0), size, size }
|
||||||
#define ArrayAsList(type, array) ((type){ array, ArrayCount(array), ArrayCount(array) })
|
#define ArrayAsList(type, array) (type){ array, ArrayCount(array), ArrayCount(array) }
|
||||||
|
|
||||||
#define AppendList(type, list, element) \
|
#define AppendList(list, element) \
|
||||||
if ((list)->head < (list)->length) { \
|
if ((list)->head < (list)->length) { \
|
||||||
(list)->data[(list)->head++] = (element); \
|
(list)->data[(list)->head++] = (element); \
|
||||||
}
|
}
|
||||||
@@ -264,12 +266,10 @@ typedef enum {
|
|||||||
#define COLOR_TEXT_FG_BG(text, foregroundcolor, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET
|
#define COLOR_TEXT_FG_BG(text, foregroundcolor, backgroundcolor) ANSI_INSTRUCTION_FROM_ENUM(foregroundcolor) ANSI_INSTRUCTION_FROM_ENUM(backgroundcolor) text ANSI_RESET
|
||||||
#define COLOR_TEXT_RGB(text, red, green, blue) ANSI_INSTRUCTION_STR("38;2;" #red ";" #green ";" #blue) text ANSI_RESET
|
#define COLOR_TEXT_RGB(text, red, green, blue) ANSI_INSTRUCTION_STR("38;2;" #red ";" #green ";" #blue) text ANSI_RESET
|
||||||
|
|
||||||
#define SetStdErr() DeferLoop
|
|
||||||
DefineList(int, Int);
|
DefineList(int, Int);
|
||||||
void printIntListErr(IntList l);
|
void printIntList(IntList l);
|
||||||
void printStrListErr(StringList l);
|
void printStrList(StringList l);
|
||||||
void print(const char *fmt, ...);
|
extern void (*print)(const char *fmt, ...);
|
||||||
void printErr(const char *fmt, ...);
|
|
||||||
|
|
||||||
// ### Loops ###
|
// ### Loops ###
|
||||||
#define EachIn(list, it) size_t it = 0; it < (list).head; it++
|
#define EachIn(list, it) size_t it = 0; it < (list).head; it++
|
||||||
|
|||||||
Reference in New Issue
Block a user