From 757502a4b8ca524160627228c568e9d99fa9f23b Mon Sep 17 00:00:00 2001 From: seleznevae Date: Sun, 18 Mar 2018 12:17:33 +0300 Subject: [PATCH] [F] Fixed c++ support --- CMakeLists.txt | 22 +++++++------ include/fort.h | 66 +++++++++++++++++++++++++++----------- src/cell.h | 1 - src/fort_impl.h | 1 + src/options.h | 22 ++++++------- src/row.h | 1 + tests/test_string_buffer.c | 56 ++++++++++++++++---------------- 7 files changed, 101 insertions(+), 68 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4f852fe..5ddeeb8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,28 +41,30 @@ set(FORT_SOURCES src/table.c src/fort_impl.c) -if(FORT_CXX_BUILD) - SET_SOURCE_FILES_PROPERTIES( ${FORT_SOURCES} PROPERTIES LANGUAGE CXX) -endif(FORT_CXX_BUILD) - - - +set(EXAMPLE_SOURCES + example/main.c) add_executable(${PROJECT_NAME}_example - example/main.c + ${EXAMPLE_SOURCES} ${FORT_SOURCES}) - -add_executable(${PROJECT_NAME}_test - ${FORT_SOURCES} +set(TEST_SOURCES tests/test.c tests/test_vector.c tests/test_table.c tests/test_string_buffer.c) +add_executable(${PROJECT_NAME}_test + ${FORT_SOURCES} + ${TEST_SOURCES}) +if(FORT_CXX_BUILD) + SET_SOURCE_FILES_PROPERTIES( ${FORT_SOURCES} PROPERTIES LANGUAGE CXX) + SET_SOURCE_FILES_PROPERTIES( ${EXAMPLE_SOURCES} PROPERTIES LANGUAGE CXX) + SET_SOURCE_FILES_PROPERTIES( ${TEST_SOURCES} PROPERTIES LANGUAGE CXX) +endif(FORT_CXX_BUILD) if(FORT_TEST_BUILD AND NOT FORT_MSVC_BUILD) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") diff --git a/include/fort.h b/include/fort.h index 0f68d8b..adb87cf 100644 --- a/include/fort.h +++ b/include/fort.h @@ -29,10 +29,10 @@ SOFTWARE. #include #include +#include +#include -#include "options.h" - /* * Determine compiler */ @@ -51,21 +51,20 @@ SOFTWARE. /* * Declare restrict */ -//#if defined(__cplusplus) -//#if defined(FT_CLANG_COMPILER) -//#define FT_RESTRICT __restrict__ -//#else -//#define FT_RESTRICT __restrict -//#endif /* if defined(FT_CLANG_COMPILER) */ -//#else -//#if __STDC_VERSION__ < 199901L -//#define FT_RESTRICT -//#else -//#define FT_RESTRICT restrict -//#endif /* __STDC_VERSION__ < 199901L */ -//#endif /* if defined(__cplusplus) */ +#if defined(__cplusplus) +#if defined(FT_CLANG_COMPILER) +#define FT_RESTRICT __restrict__ +#else +#define FT_RESTRICT __restrict +#endif /* if defined(FT_CLANG_COMPILER) */ +#else +#if __STDC_VERSION__ < 199901L +#define FT_RESTRICT +#else +#define FT_RESTRICT restrict +#endif /* __STDC_VERSION__ < 199901L */ +#endif /* if defined(__cplusplus) */ - #define FT_RESTRICT /* @@ -269,10 +268,39 @@ FT_EXTERN int ft_add_separator(FTABLE *FT_RESTRICT table); - FT_EXTERN const char* ft_to_string(const FTABLE *FT_RESTRICT table); +/* + * Setting table appearance + */ +#define FT_ANY_COLUMN (UINT_MAX) +#define FT_ANY_ROW (UINT_MAX) + +#define FT_ROW_UNSPEC (UINT_MAX-1) +#define FT_COLUMN_UNSPEC (UINT_MAX-1) + +#define FT_OPT_MIN_WIDTH ((uint32_t)(0x01U << (0))) +#define FT_OPT_TEXT_ALIGN ((uint32_t)(0x01U << (1))) +#define FT_OPT_TOP_PADDING ((uint32_t)(0x01U << (2))) +#define FT_OPT_BOTTOM_PADDING ((uint32_t)(0x01U << (3))) +#define FT_OPT_LEFT_PADDING ((uint32_t)(0x01U << (4))) +#define FT_OPT_RIGHT_PADDING ((uint32_t)(0x01U << (5))) +#define FT_OPT_EMPTY_STR_HEIGHT ((uint32_t)(0x01U << (6))) +#define FT_OPT_ROW_TYPE ((uint32_t)(0x01U << (7))) + +enum TextAlignment +{ + LeftAligned, + CenterAligned, + RightAligned +}; + +enum RowType +{ + Common, + Header +}; struct ft_border_chars { @@ -308,7 +336,9 @@ FT_EXTERN int ft_set_option(FTABLE * FT_RESTRICT table, unsigned row, unsigned c - +/* + * WChar support + */ #ifdef FT_HAVE_WCHAR diff --git a/src/cell.h b/src/cell.h index 86d04a0..4c07e27 100644 --- a/src/cell.h +++ b/src/cell.h @@ -9,7 +9,6 @@ /***************************************************************************** * CELL * ***************************************************************************/ - fort_cell_t * create_cell(); diff --git a/src/fort_impl.h b/src/fort_impl.h index 0134250..6429089 100644 --- a/src/fort_impl.h +++ b/src/fort_impl.h @@ -6,6 +6,7 @@ #include #include #include +#include "fort.h" #define FORT_COL_SEPARATOR '|' diff --git a/src/options.h b/src/options.h index 754e1f2..0b6149a 100644 --- a/src/options.h +++ b/src/options.h @@ -5,18 +5,18 @@ #include #include -enum TextAlignment -{ - LeftAligned, - CenterAligned, - RightAligned -}; +//enum TextAlignment +//{ +// LeftAligned, +// CenterAligned, +// RightAligned +//}; -enum RowType -{ - Common, - Header -}; +//enum RowType +//{ +// Common, +// Header +//}; struct fort_column_options diff --git a/src/row.h b/src/row.h index 0efa254..d6af84a 100644 --- a/src/row.h +++ b/src/row.h @@ -4,6 +4,7 @@ #include "fort_impl.h" #include "fort.h" #include "stdarg.h" +#include "options.h" struct fort_row; typedef struct fort_row fort_row_t; diff --git a/tests/test_string_buffer.c b/tests/test_string_buffer.c index 969668f..776e53a 100644 --- a/tests/test_string_buffer.c +++ b/tests/test_string_buffer.c @@ -5,10 +5,10 @@ #include "wchar.h" -size_t strchr_count(const char* str, int ch); +size_t strchr_count(const char* str, char ch); size_t wstrchr_count(const wchar_t* str, wchar_t ch); -const char* str_n_substring_beg(const char* str, int ch, int n); +const char* str_n_substring_beg(const char* str, char ch_separator, size_t n); const wchar_t* wstr_n_substring_beg(const wchar_t* str, wchar_t ch_separator, size_t n); fort_status_t str_n_substring(const char* str, char ch_separator, size_t n, const char **begin, const char **end); @@ -202,44 +202,44 @@ void test_buffer_text_width(void) buffer->type = CharBuf; char *old_value = buffer->str.cstr; - buffer->str.cstr = ""; + buffer->str.cstr = (char*)""; assert_true(buffer_text_width(buffer) == 0); - buffer->str.cstr = "\n\n\n\n"; + buffer->str.cstr = (char*)"\n\n\n\n"; assert_true(buffer_text_width(buffer) == 0); - buffer->str.cstr = "12345"; + buffer->str.cstr = (char*)"12345"; assert_true(buffer_text_width(buffer) == 5); - buffer->str.cstr = "12345\n1234567"; + buffer->str.cstr = (char*)"12345\n1234567"; assert_true(buffer_text_width(buffer) == 7); - buffer->str.cstr = "12345\n1234567\n"; + buffer->str.cstr = (char*)"12345\n1234567\n"; assert_true(buffer_text_width(buffer) == 7); - buffer->str.cstr = "12345\n1234567\n123"; + buffer->str.cstr = (char*)"12345\n1234567\n123"; assert_true(buffer_text_width(buffer) == 7); buffer->type = WCharBuf; - buffer->str.wstr = L""; + buffer->str.wstr = (wchar_t *)L""; assert_true(buffer_text_width(buffer) == 0); - buffer->str.wstr = L"\n\n\n\n"; + buffer->str.wstr = (wchar_t *)L"\n\n\n\n"; assert_true(buffer_text_width(buffer) == 0); - buffer->str.wstr = L"12345"; + buffer->str.wstr = (wchar_t *)L"12345"; assert_true(buffer_text_width(buffer) == 5); - buffer->str.wstr = L"12345\n1234567"; + buffer->str.wstr = (wchar_t *)L"12345\n1234567"; assert_true(buffer_text_width(buffer) == 7); - buffer->str.wstr = L"12345\n1234567\n"; + buffer->str.wstr = (wchar_t *)L"12345\n1234567\n"; assert_true(buffer_text_width(buffer) == 7); - buffer->str.wstr = L"12345\n1234567\n123"; + buffer->str.wstr = (wchar_t *)L"12345\n1234567\n123"; assert_true(buffer_text_width(buffer) == 7); @@ -255,48 +255,48 @@ void test_buffer_text_height(void) buffer->type = CharBuf; char *old_value = buffer->str.cstr; - buffer->str.cstr = ""; + buffer->str.cstr = (char*)""; assert_true(buffer_text_height(buffer) == 0); - buffer->str.cstr = "\n"; + buffer->str.cstr = (char*)"\n"; assert_true(buffer_text_height(buffer) == 2); - buffer->str.cstr = "\n\n"; + buffer->str.cstr = (char*)"\n\n"; assert_true(buffer_text_height(buffer) == 3); - buffer->str.cstr = "\n\n\n\n"; + buffer->str.cstr = (char*)"\n\n\n\n"; assert_true(buffer_text_height(buffer) == 5); - buffer->str.cstr = "12345"; + buffer->str.cstr = (char*)"12345"; assert_true(buffer_text_height(buffer) == 1); - buffer->str.cstr = "\n12345"; + buffer->str.cstr = (char*)"\n12345"; assert_true(buffer_text_height(buffer) == 2); - buffer->str.cstr = "\n12345\n\n2"; + buffer->str.cstr = (char*)"\n12345\n\n2"; assert_true(buffer_text_height(buffer) == 4); buffer->type = WCharBuf; - buffer->str.wstr = L""; + buffer->str.wstr = (wchar_t *)L""; assert_true(buffer_text_height(buffer) == 0); - buffer->str.wstr = L"\n"; + buffer->str.wstr = (wchar_t *)L"\n"; assert_true(buffer_text_height(buffer) == 2); - buffer->str.wstr = L"\n\n"; + buffer->str.wstr = (wchar_t *)L"\n\n"; assert_true(buffer_text_height(buffer) == 3); - buffer->str.wstr = L"\n\n\n\n"; + buffer->str.wstr = (wchar_t *)L"\n\n\n\n"; assert_true(buffer_text_height(buffer) == 5); - buffer->str.wstr = L"\xff0fy2345\xff0f"; + buffer->str.wstr = (wchar_t *)L"\xff0fy2345\xff0f"; assert_true(buffer_text_height(buffer) == 1); - buffer->str.wstr = L"\n12345"; + buffer->str.wstr = (wchar_t *)L"\n12345"; assert_true(buffer_text_height(buffer) == 2); - buffer->str.wstr = L"\n12345\n\n2"; + buffer->str.wstr = (wchar_t *)L"\n12345\n\n2"; assert_true(buffer_text_height(buffer) == 4);