diff --git a/LLog.c b/LLog.c index d1ca716..863e3ca 100644 --- a/LLog.c +++ b/LLog.c @@ -1,11 +1,50 @@ #include "include/LLog.h" +#include #include +#include +#include "time.h" -void lLog(enum lLogLevel LOG_LEVEL, char* MESSAGE) { +int timer_array_append(timer_array* array, lTimer timer) { + if (array->count >= array->capacity) { + if (array->capacity == 0) array->capacity = 8; + else array->capacity *= 2; + + array->items = realloc(array->items, array->capacity * sizeof(*array->items)); + } + array->items[array->count++] = timer; + return array->count - 1; +} + +int create_timer(Logger* logger) { + return timer_array_append(&logger->timers, (lTimer){}); +} + +void start_timer(Logger* logger, int timer_id) { + if (logger->timers.count < (timer_id + 1)) return; + logger->timers.items[timer_id].time.start = time(NULL); +} + +void stop_timer(Logger* logger, int timer_id) { + if (logger->timers.count < (timer_id + 1)) return; + logger->timers.items[timer_id].time.end = time(NULL); +} + +lLogString to_lLogString(const char* string) { + lLogString str; + str.buf = (char *)string; + if (string == NULL) { + str.len = 0; + } else { + str.len = strlen(string); + } + return str; +}; + +void lLog(Logger logger, enum lLogLevel LOG_LEVEL, lLogString MESSAGE) { char* LOG_LEVEL_STRING = LOG_LEVEL == 0 ? "INFO" : LOG_LEVEL == 1 ? "WARNING" : LOG_LEVEL == 2 ? "ERROR" : LOG_LEVEL == 3 ? "DEBUG" : "invalid_log_level"; - printf("[%s]: %s\n", LOG_LEVEL_STRING, MESSAGE); + printf("[%s]: %.*s\n", LOG_LEVEL_STRING, (int)MESSAGE.len, MESSAGE.buf); } \ No newline at end of file diff --git a/include/LLog.h b/include/LLog.h index 5a0a4ca..27355e6 100644 --- a/include/LLog.h +++ b/include/LLog.h @@ -1,6 +1,13 @@ #ifndef LLog_H #define LLog_H +#include "time.h" + +typedef struct { + char *buf; + size_t len; +} lLogString; + enum lLogLevel { lINFO, lWARNING, @@ -8,6 +15,34 @@ enum lLogLevel { lDEBUG }; -void lLog(enum lLogLevel LOG_LEVEL, char* MESSAGE); +typedef struct { + time_t start; + time_t end; +} lTimespan; + +typedef struct { + lTimespan time; +} lTimer; + +typedef struct { + size_t count; + size_t capacity; + lTimer* items; +} timer_array; + +int timer_array_append(timer_array* array, lTimer timer); + +typedef struct { + lLogString logfolder; + timer_array timers; +} Logger; + +int create_timer(Logger* logger); +void start_timer(Logger* logger, int timer_id); +void stop_timer(Logger* logger, int timer_id); + +lLogString to_lLogString(const char* string); + +void lLog(Logger logger, enum lLogLevel LOG_LEVEL, lLogString MESSAGE); #endif \ No newline at end of file diff --git a/test/test.c b/test/test.c index ec2b1fe..576588d 100644 --- a/test/test.c +++ b/test/test.c @@ -1,8 +1,20 @@ #include "../include/LLog.h" +#include +#include int main(void) { - lLog(lINFO, "Hello, INFO!"); - lLog(lWARNING, "Hello, WARNING!"); - lLog(lERROR, "Hello, ERROR!"); - lLog(lDEBUG, "Hello, DEBUG!"); + Logger logger = {0}; + lLog(logger, lINFO, to_lLogString("Hello, INFO!")); + lLog(logger, lWARNING, to_lLogString("Hello, WARNING!")); + lLog(logger, lERROR, to_lLogString("Hello, ERROR!")); + lLog(logger, lDEBUG, to_lLogString("Hello, DEBUG!")); + + int timer = create_timer(&logger); + lTimespan* time_object = &logger.timers.items[timer].time; + start_timer(&logger, timer); + + sleep(5); + + stop_timer(&logger, timer); + printf("\n%f seconds.\n", difftime(time_object->end, time_object->start)); } \ No newline at end of file