From c8f6f3e5ead7d63021137c273ca4b9b32a9b4ded Mon Sep 17 00:00:00 2001 From: Matej Dedina Date: Mon, 24 Jun 2024 10:16:48 +0200 Subject: [PATCH] removed fread fixes and added windows visual studio clang support --- .gitignore | 3 ++- CMakeLists.txt | 6 +++++- CMakeSettings.json | 15 +++++++++++++++ external/CMakeLists.txt | 10 ++++++---- program/include/structures/abstract/stack.h | 4 ++-- program/source/algorithms/arc_consistency.c | 12 ++++++------ program/source/algorithms/reduce.c | 12 ++++++------ program/source/structures/concrete/board.c | 8 -------- 8 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 CMakeSettings.json diff --git a/.gitignore b/.gitignore index ff3580c..990d89c 100644 --- a/.gitignore +++ b/.gitignore @@ -57,4 +57,5 @@ Testing/ # vscode .VSCodeCounter -.vs \ No newline at end of file +.vs/ +.vscode/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 458ef96..745c952 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,11 @@ project(SLNOSLAV LANGUAGES C ) -set(CMAKE_C_FLAGS "-std=c17 -pg -Wall -Werror -ftest-coverage") +if (WIN32) + add_compile_options(/W4) +else() + add_compile_options(-std=c17 -pg -Wall -Wextra -Wpedantic) +endif() add_subdirectory(external) add_subdirectory(program) diff --git a/CMakeSettings.json b/CMakeSettings.json new file mode 100644 index 0000000..3003067 --- /dev/null +++ b/CMakeSettings.json @@ -0,0 +1,15 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ "clang_cl_x64" ], + "buildRoot": "${projectDir}\\out\\build\\${name}", + "installRoot": "${projectDir}\\out\\install\\${name}", + "cmakeCommandArgs": "", + "buildCommandArgs": "", + "ctestCommandArgs": "" + } + ] +} \ No newline at end of file diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt index fb40c6c..d88e9ba 100644 --- a/external/CMakeLists.txt +++ b/external/CMakeLists.txt @@ -8,10 +8,12 @@ set_target_properties(NUKLEAR_LIB PROPERTIES LINKER_LANGUAGE C) target_include_directories(NUKLEAR_LIB INTERFACE nuklear/src) -find_package(PkgConfig REQUIRED) -pkg_check_modules(WAYLAND REQUIRED wayland-client wayland-cursor wayland-egl xkbcommon) -find_package(X11 REQUIRED) -find_package(Doxygen) +if (!WIN32) + find_package(PkgConfig REQUIRED) + pkg_check_modules(WAYLAND REQUIRED wayland-client wayland-cursor wayland-egl xkbcommon) + find_package(X11 REQUIRED) + find_package(Doxygen) +endif() set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE) set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE) diff --git a/program/include/structures/abstract/stack.h b/program/include/structures/abstract/stack.h index f934cfc..91f4116 100644 --- a/program/include/structures/abstract/stack.h +++ b/program/include/structures/abstract/stack.h @@ -157,7 +157,7 @@ static inline Stack copy_stack(Stack stack, STACK_DATA_TYPE (*copy_element)(STAC Stack copy = create_stack(); SLArray * current_array = stack.head; - for (size_t i = stack.size - 1; i >= 0 && current_array;) { + for (size_t i = stack.size - 1; current_array;) { SLArray * temp = malloc(sizeof(SLArray)); assert(temp && "MEMORY ALLOCATION FAILED"); @@ -166,7 +166,7 @@ static inline Stack copy_stack(Stack stack, STACK_DATA_TYPE (*copy_element)(STAC temp->next = copy.head; copy.head = temp; - for (size_t j = i % STACK_LIST_ARRAY_SIZE; j >= 0; i--, j--) { + for (size_t j = i % STACK_LIST_ARRAY_SIZE;; i--, j--) { copy.head->elements[j] = copy_element ? copy_element(current_array->elements[j]) : current_array->elements[j]; copy.size++; } diff --git a/program/source/algorithms/arc_consistency.c b/program/source/algorithms/arc_consistency.c index 8f8d6d2..aba8eb6 100644 --- a/program/source/algorithms/arc_consistency.c +++ b/program/source/algorithms/arc_consistency.c @@ -23,8 +23,8 @@ void _reduce_col_one_values(Kakuro board, Stack * ones, SArray * current_state, Valid _create_valid(Kakuro board, SArray * current_state, ksize_t index, KGSizes type); void _destroy_valid(Valid * combinations); bool _reduce_no_combination(Kakuro board, SArray * current_state, Check * checks); -bool _reduce_no_col_combination(Kakuro board, SArray * current_state, Check * checks, ksize_t index); -bool _reduce_no_row_combination(Kakuro board, SArray * current_state, Check * checks, ksize_t index); +bool _reduce_no_col_combination(Kakuro board, SArray * current_state, ksize_t index); +bool _reduce_no_row_combination(Kakuro board, SArray * current_state, ksize_t index); bool look_ahead(Kakuro board, SArray * current_state) { assert(current_state && "CURRENT STATE ARRAY IS NULL"); @@ -161,15 +161,15 @@ void _destroy_valid(Valid * combinations) { bool _reduce_no_combination(Kakuro board, SArray * current_state, Check * checks) { bool is_reduced = false; for (size_t i = 0; i < board.game.empty_count; i++) { - if (!(checks[i] & ROWCHECK)) is_reduced |= _reduce_no_row_combination(board, current_state, checks, i); - if (!(checks[i] & COLCHECK)) is_reduced |= _reduce_no_col_combination(board, current_state, checks, i); + if (!(checks[i] & ROWCHECK)) is_reduced |= _reduce_no_row_combination(board, current_state, i); + if (!(checks[i] & COLCHECK)) is_reduced |= _reduce_no_col_combination(board, current_state, i); add_check(board, checks, i); } return is_reduced; } -bool _reduce_no_row_combination(Kakuro board, SArray * current_state, Check * checks, ksize_t index) { +bool _reduce_no_row_combination(Kakuro board, SArray * current_state, ksize_t index) { ksize_t row = board.coords[ROW][index], col = board.coords[COLUMN][index]; for (ksize_t i = 0; i < board.blocks[ROW][index]; i++) { if (!current_state->elements[board.grid[row][col + i]]) return false; @@ -192,7 +192,7 @@ bool _reduce_no_row_combination(Kakuro board, SArray * current_state, Check * ch return is_reduced; } -bool _reduce_no_col_combination(Kakuro board, SArray * current_state, Check * checks, ksize_t index) { +bool _reduce_no_col_combination(Kakuro board, SArray * current_state, ksize_t index) { ksize_t row = board.coords[ROW][index], col = board.coords[COLUMN][index]; for (ksize_t i = 0; i < board.blocks[COLUMN][index]; i++) { if (current_state->elements[board.grid[row + i][col]] == INVALID_STATE) return false; diff --git a/program/source/algorithms/reduce.c b/program/source/algorithms/reduce.c index 35c7b8d..2a865cd 100644 --- a/program/source/algorithms/reduce.c +++ b/program/source/algorithms/reduce.c @@ -25,8 +25,8 @@ state_t _check_even_two_blocks(ksize_t block, ksize_t sum); state_t _check_high_end(ksize_t block, ksize_t sum); state_t _check_low_end(ksize_t block, ksize_t sum); void _reduce_multi_values(Kakuro board, SArray * initial_state); -void _reduce_row_multi_values(Kakuro board, SArray * initial_state, Check * checks, ksize_t index); -void _reduce_col_multi_values(Kakuro board, SArray * initial_state, Check * checks, ksize_t index); +void _reduce_row_multi_values(Kakuro board, SArray * initial_state, ksize_t index); +void _reduce_col_multi_values(Kakuro board, SArray * initial_state, ksize_t index); void reduce(Kakuro board, SArray * initial_state) { assert(initial_state && "INITIAL STATE ARRAY IS NULL"); @@ -87,13 +87,13 @@ void _reduce_multi_values(Kakuro board, SArray * current_state) { Check checks[KAKURO_SIZE_MAX] = { 0 }; for (size_t i = 0; i < board.game.empty_count; i++) { - if (!(checks[i] & ROWCHECK)) _reduce_row_multi_values(board, current_state, checks, i); - if (!(checks[i] & COLCHECK)) _reduce_col_multi_values(board, current_state, checks, i); + if (!(checks[i] & ROWCHECK)) _reduce_row_multi_values(board, current_state, i); + if (!(checks[i] & COLCHECK)) _reduce_col_multi_values(board, current_state, i); add_check(board, checks, i); } } -void _reduce_row_multi_values(Kakuro board, SArray * current_state, Check * checks, ksize_t index) { +void _reduce_row_multi_values(Kakuro board, SArray * current_state, ksize_t index) { ksize_t row = board.coords[ROW][index], col = board.coords[COLUMN][index]; ksize_t block = board.blocks[ROW][index], sums = board.sums[ROW][index]; ksize_t empty_blocks = block, empty_sums = sums; @@ -118,7 +118,7 @@ void _reduce_row_multi_values(Kakuro board, SArray * current_state, Check * chec destroy_stack(&multi, NULL); } -void _reduce_col_multi_values(Kakuro board, SArray * current_state, Check * checks, ksize_t index) { +void _reduce_col_multi_values(Kakuro board, SArray * current_state, ksize_t index) { ksize_t row = board.coords[ROW][index], col = board.coords[COLUMN][index]; ksize_t block = board.blocks[COLUMN][index], sums = board.sums[COLUMN][index]; ksize_t empty_blocks = block, empty_sums = sums; diff --git a/program/source/structures/concrete/board.c b/program/source/structures/concrete/board.c index c145c2a..4276162 100644 --- a/program/source/structures/concrete/board.c +++ b/program/source/structures/concrete/board.c @@ -16,14 +16,6 @@ ksize_t _empty_cell_count(KGrid from); Kakuro init_kakuro(FILE * kakuro_file) { assert(kakuro_file && "KAKURO FILE POINTER IS NULL"); - ksize_t c = 0; - do { - assert(fread(&c, sizeof(ksize_t), 1, kakuro_file)); - printf ("%02x ", c); - } while (!feof(kakuro_file)); - fflush(stdout); - - rewind(kakuro_file); Kakuro k = { 0 }; _kakuro_alloc(&k, kakuro_file);