From 71188fd0fb10ac28f1ecd13ff77522053b6554de Mon Sep 17 00:00:00 2001 From: seleznevae Date: Fri, 13 Dec 2019 23:30:30 +0300 Subject: [PATCH 1/2] [A] Add functions to check if table is empty to the API --- ChangeLog.md | 6 ++++++ lib/fort.c | 13 +++++++++++-- lib/fort.h | 15 ++++++++++++--- lib/fort.hpp | 17 +++++++++++++++-- src/fort.h | 15 ++++++++++++--- src/fort.hpp | 17 +++++++++++++++-- src/fort_impl.c | 13 +++++++++++-- tests/bb_tests/test_table_basic.c | 22 ++++++++++++++++++++++ tests/bb_tests_cpp/test_table_basic.cpp | 11 +++++++++++ 9 files changed, 115 insertions(+), 14 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 37f2837..3d42433 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,9 @@ +## v0.4.0 + +### API + +- Add functions to check if table is empty to the API. + ## v0.3.2 ### Bug fixes diff --git a/lib/fort.c b/lib/fort.c index 91f81bd..da5455d 100644 --- a/lib/fort.c +++ b/lib/fort.c @@ -2699,13 +2699,13 @@ void ft_ln(ft_table_t *table) table->cur_row++; } -size_t ft_cur_row(ft_table_t *table) +size_t ft_cur_row(const ft_table_t *table) { assert(table); return table->cur_row; } -size_t ft_cur_col(ft_table_t *table) +size_t ft_cur_col(const ft_table_t *table) { assert(table); return table->cur_col; @@ -2718,6 +2718,15 @@ void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col) table->cur_col = col; } +int ft_is_empty(const ft_table_t *table) +{ + assert(table); + if (table->rows == NULL || (vector_size(table->rows) == 0)) + return 1; + else + return 0; +} + static int ft_row_printf_impl_(ft_table_t *table, size_t row, const struct f_string_view *fmt, va_list *va) { size_t i = 0; diff --git a/lib/fort.h b/lib/fort.h index efda242..c7147fb 100644 --- a/lib/fort.h +++ b/lib/fort.h @@ -286,7 +286,7 @@ void ft_ln(ft_table_t *table); * @return * Row number of the current cell. */ -size_t ft_cur_row(ft_table_t *table); +size_t ft_cur_row(const ft_table_t *table); /** * Get column number of the current cell. @@ -296,7 +296,7 @@ size_t ft_cur_row(ft_table_t *table); * @return * Column number of the current cell. */ -size_t ft_cur_col(ft_table_t *table); +size_t ft_cur_col(const ft_table_t *table); /** * Set current cell position. @@ -313,7 +313,16 @@ size_t ft_cur_col(ft_table_t *table); */ void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col); - +/** + * Check if table is empty. + * + * @param table + * Pointer to the table. + * @return + * 1 - table is empty + * 0 - some data has been inserted + */ +int ft_is_empty(const ft_table_t *table); #if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) diff --git a/lib/fort.hpp b/lib/fort.hpp index c776a99..9d223ce 100644 --- a/lib/fort.hpp +++ b/lib/fort.hpp @@ -1012,7 +1012,7 @@ public: * Column number of the current cell. */ size_t - cur_col() + cur_col() const noexcept { return ft_cur_col(table_); } @@ -1024,11 +1024,24 @@ public: * Row number of the current cell. */ size_t - cur_row() + cur_row() const noexcept { return ft_cur_row(table_); } + /** + * Check if table is empty. + * + * @return + * true - table is empty + * false - some data has been inserted + */ + bool + is_empty() const noexcept + { + return ft_is_empty(table_); + } + /** * Get current cell. * diff --git a/src/fort.h b/src/fort.h index efda242..c7147fb 100644 --- a/src/fort.h +++ b/src/fort.h @@ -286,7 +286,7 @@ void ft_ln(ft_table_t *table); * @return * Row number of the current cell. */ -size_t ft_cur_row(ft_table_t *table); +size_t ft_cur_row(const ft_table_t *table); /** * Get column number of the current cell. @@ -296,7 +296,7 @@ size_t ft_cur_row(ft_table_t *table); * @return * Column number of the current cell. */ -size_t ft_cur_col(ft_table_t *table); +size_t ft_cur_col(const ft_table_t *table); /** * Set current cell position. @@ -313,7 +313,16 @@ size_t ft_cur_col(ft_table_t *table); */ void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col); - +/** + * Check if table is empty. + * + * @param table + * Pointer to the table. + * @return + * 1 - table is empty + * 0 - some data has been inserted + */ +int ft_is_empty(const ft_table_t *table); #if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) diff --git a/src/fort.hpp b/src/fort.hpp index c776a99..9d223ce 100644 --- a/src/fort.hpp +++ b/src/fort.hpp @@ -1012,7 +1012,7 @@ public: * Column number of the current cell. */ size_t - cur_col() + cur_col() const noexcept { return ft_cur_col(table_); } @@ -1024,11 +1024,24 @@ public: * Row number of the current cell. */ size_t - cur_row() + cur_row() const noexcept { return ft_cur_row(table_); } + /** + * Check if table is empty. + * + * @return + * true - table is empty + * false - some data has been inserted + */ + bool + is_empty() const noexcept + { + return ft_is_empty(table_); + } + /** * Get current cell. * diff --git a/src/fort_impl.c b/src/fort_impl.c index 8902658..d007571 100644 --- a/src/fort_impl.c +++ b/src/fort_impl.c @@ -145,13 +145,13 @@ void ft_ln(ft_table_t *table) table->cur_row++; } -size_t ft_cur_row(ft_table_t *table) +size_t ft_cur_row(const ft_table_t *table) { assert(table); return table->cur_row; } -size_t ft_cur_col(ft_table_t *table) +size_t ft_cur_col(const ft_table_t *table) { assert(table); return table->cur_col; @@ -164,6 +164,15 @@ void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col) table->cur_col = col; } +int ft_is_empty(const ft_table_t *table) +{ + assert(table); + if (table->rows == NULL || (vector_size(table->rows) == 0)) + return 1; + else + return 0; +} + static int ft_row_printf_impl_(ft_table_t *table, size_t row, const struct f_string_view *fmt, va_list *va) { size_t i = 0; diff --git a/tests/bb_tests/test_table_basic.c b/tests/bb_tests/test_table_basic.c index 6193b41..49c5387 100644 --- a/tests/bb_tests/test_table_basic.c +++ b/tests/bb_tests/test_table_basic.c @@ -197,6 +197,7 @@ void test_table_basic(void) WHEN("Empty table") { table = ft_create_table(); assert_true(table != NULL); + assert_true(ft_is_empty(table) == 1); const char *table_str = ft_to_string(table); assert_true(table_str != NULL); @@ -213,6 +214,26 @@ void test_table_basic(void) assert_true(table_str != NULL); assert_str_equal(table_str, table_str_etalon); #endif /* FT_HAVE_UTF8 */ + + ft_set_cur_cell(table, 5, 6); + assert_true(ft_is_empty(table) == 1); + ft_destroy_table(table); + } + + WHEN("Empty string content") { + table = ft_create_table(); + assert_true(table != NULL); + assert_true(ft_is_empty(table) == 1); + assert_true(ft_write_ln(table, "") == FT_SUCCESS); + assert_true(ft_is_empty(table) == 0); + + const char *table_str = ft_to_string(table); + const char *table_str_etalon = + "+--+\n" + "| |\n" + "+--+\n"; + assert_str_equal(table_str, table_str_etalon); + ft_destroy_table(table); } @@ -225,6 +246,7 @@ void test_table_basic(void) assert_true(ft_write_ln(table, "3", "c", "234", "3.140000") == FT_SUCCESS); assert_true(ft_write_ln(table, "3", "c", "234", "3.140000") == FT_SUCCESS); assert_true(ft_write_ln(table, "3", "c", "234", "3.140000") == FT_SUCCESS); + assert_true(ft_is_empty(table) == 0); const char *table_str = ft_to_string(table); assert_true(table_str != NULL); diff --git a/tests/bb_tests_cpp/test_table_basic.cpp b/tests/bb_tests_cpp/test_table_basic.cpp index f8f04e0..6f35f68 100644 --- a/tests/bb_tests_cpp/test_table_basic.cpp +++ b/tests/bb_tests_cpp/test_table_basic.cpp @@ -30,6 +30,16 @@ void test_cpp_bug_fixes(void) void test_cpp_table_basic(void) { + WHEN("Empty table.") { + fort::char_table table; + assert_true(set_cpp_test_props_for_table(&table)); + + std::string table_str = table.to_string(); + std::string table_str_etalon = ""; + assert_string_equal(table_str, table_str_etalon); + assert_true(table.is_empty()); + } + WHEN("All columns are equal and not empty.") { fort::char_table table; assert_true(set_cpp_test_props_for_table(&table)); @@ -55,6 +65,7 @@ void test_cpp_table_basic(void) "| | | | |\n" "+---+---+-----+----------+\n"; assert_string_equal(table_str, table_str_etalon); + assert_true(table.is_empty() == false); } WHEN("Checking basic constructors and assignmets.") { From 91f1ab2a7fda257c2fbb603f07d44b435085e12a Mon Sep 17 00:00:00 2001 From: seleznevae Date: Sat, 14 Dec 2019 00:30:25 +0300 Subject: [PATCH 2/2] [U] Updated docs --- docs/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/index.md b/docs/index.md index d249f0e..55ba9c3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -39,6 +39,7 @@ These pages contain the API documentation of **libfort** - simple library to cre - Others - @link ft_set_memory_funcs ft_set_memory_funcs @endlink -- set memory allocation functions for the library - @link ft_set_default_printf_field_separator ft_set_default_printf_field_separator @endlink -- Set field separator for ft_printf, ft_printf_ln + - @link ft_is_empty ft_is_empty @endlink -- check if table is empty - Data structures and types - @link ft_table_t ft_table_t @endlink -- table handler @@ -74,6 +75,7 @@ These pages contain the API documentation of **libfort** - simple library to cre - @link fort::table::cell cell @endlink -- get cell - @link fort::table::row row @endlink -- get row - @link fort::table::column column @endlink -- get column + - @link fort::table::is_empty is_empty @endlink -- check if table is empty - @link fort::property_owner fort::property_owner @endlink -- base class for all objects (table, row, column, cell) for which user can specify properties - Modify appearance