#ifndef UTILITIES_H #define UTILITIES_H #include #include #include #include #include "file.h" #include "action_list.h" #define IS_ALPHA(c) ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) #define IS_DIGIT(c) (c >= '0' && c <= '9') #define IS_ALNUM(c) (IS_ALPHA(c) || IS_DIGIT(c)) #define IS_PUNCT(c) ((c >= 33 && c <= 47) || (c >= 58 && c <= 64) || (c >= 91 && c <= 96) || (c >= 123 && c <= 126)) #define RESET "\033[0m" #define RED_BG "\033[41m" #define GREEN_BG "\033[42m" #define BLACK_FG "\033[30m" #define LIST_INIT_CAPACITY 4 typedef enum { PT_NOEXIST, PT_FILE, PT_DIR, PT_OTHER, PT_ERROR } PathType; typedef struct { void** items; size_t len; size_t capacity; size_t item_size; } List; typedef List StringBuffer; typedef List FileInfoBuffer; List* list_new(size_t); int list_push(List*, void*); void list_free(List*); void* binary_search(const void*, const void*, size_t, size_t, int (*compare)(const void*, const void*)); void* list_binary_search(List*, const void*, int (*compare)(const void*, const void*)); StringBuffer* string_buffer_new(); int string_buffer_push(StringBuffer*, char*); void string_buffer_sort(StringBuffer*); char* string_buffer_search(StringBuffer*, char*); FileInfoBuffer* file_info_buffer_new(); int file_info_buffer_push(FileInfoBuffer*, FileInfo); void file_info_buffer_free(FileInfoBuffer*); void file_info_buffer_sort(FileInfoBuffer*); FileInfo* file_info_buffer_search(FileInfoBuffer*, const char*); char* find_root(char*); void walk(char*, char*, char*, FileInfoBuffer*, int, char*); char* get_repo_path(char*, char*); int is_in_repo(char*, char*); void visualize_diff(File*, File*, ActionList*); int cut_path(char*, char*); void combine_path(char*, char*); PathType get_path_type(const char*); char* get_file_content(char*); char* get_file_content_with_size(char*, size_t*); #endif // UTILITIES_H