From a175df0586d1c479dd30a0a6584fa61441ac1df1 Mon Sep 17 00:00:00 2001 From: Selim Mustafaev Date: Sat, 20 Sep 2014 20:38:57 +0400 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B1=D0=B0=D0=B7=D0=BE=D0=B2=D0=B0=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20CMake?= =?UTF-8?q?=20(=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=BE=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE?= =?UTF-8?q?=20=D0=BD=D0=B0=20OS=20X)=20=D0=B1=D0=B5=D0=B7=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B8=20=D0=B0=D1=81=D1=81=D0=B5=D0=BC=D0=B1?= =?UTF-8?q?=D0=BB=D0=B5=D1=80=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++- CMakeLists.txt | 16 ++++++++++++++ src/CMakeLists.txt | 19 +++++++++++++++++ src/ustring.cpp | 5 ++--- src/utf.cpp | 34 +++++++++++++----------------- test/CMakeLists.txt | 51 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 104 insertions(+), 24 deletions(-) create mode 100755 CMakeLists.txt create mode 100755 src/CMakeLists.txt create mode 100755 test/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 10af6ec..407ecde 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ cpputil.creator cpputil.creator.user cpputil.files cpputil.includes -cpputil.config \ No newline at end of file +cpputil.config +.DS_Store \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..77f12f8 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 2.8) + +set(CMAKE_BUILD_TYPE DEBUG) + +set(CMAKE_CXX_FLAGS "-std=c++11") +set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") +set(CMAKE_CXX_FLAGS_RELEASE "-O2") + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin) +set(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib) +set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/usr) + +include_directories(include) + +add_subdirectory(src) +add_subdirectory(test) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100755 index 0000000..7eab535 --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 2.8) + +set(MAIN_PROJECT_NAME "cpputil") +set(SRC_DIR ".") +set(INCLUDE_DIR ../include ./asm/include) + +project(${MAIN_PROJECT_NAME} CXX) +aux_source_directory(${SRC_DIR} SRC_FILES) +include_directories(${INCLUDE_DIR}) +add_library(${MAIN_PROJECT_NAME} STATIC ${SRC_FILES}) +target_link_libraries(${MAIN_PROJECT_NAME}) + +install(TARGETS ${MAIN_PROJECT_NAME} + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib) + +install(DIRECTORY ${INCLUDE_DIR}/ + DESTINATION include/${PROJECT_NAME} + FILES_MATCHING PATTERN "*.h") diff --git a/src/ustring.cpp b/src/ustring.cpp index 1e7148f..7ab7835 100755 --- a/src/ustring.cpp +++ b/src/ustring.cpp @@ -1,6 +1,5 @@ #include "ustring.h" #include "ustring_asm.h" -#include #include /** @@ -381,7 +380,7 @@ std::size_t ustring::find(const ustring& str, std::size_t pos /* = 0 */) const return npos; } -#ifdef __GNUC__ +#if defined(__GNUC__) && !defined(__clang__) /* char32_t* fpos = reinterpret_cast(memmem(_pData + pos, (_len - pos)*sizeof(char32_t), str._pData, str._len*sizeof(char32_t))); if(fpos) @@ -519,7 +518,7 @@ void ustring::clear() */ bool ustring::empty() const { - return (_len == 0 ? true : false); + return (_len == 0); } /** diff --git a/src/utf.cpp b/src/utf.cpp index 8abb246..ad6a34f 100755 --- a/src/utf.cpp +++ b/src/utf.cpp @@ -1,8 +1,16 @@ #include "utf.h" -#include -#ifdef __GNUC__ -#include +#if defined(__clang__) + #include + #define bswap_32 OSSwapInt32 + #define bswap_16 OSSwapInt16 +#elif defined(__GNUC__) + #include +#elif defined(_MSC_VER) + #define bswap_16 _byteswap_ushort + #define bswap_32 _byteswap_ulong +#else + #error compiler not supported #endif /** @@ -83,13 +91,7 @@ byte_order current_byte_order() */ char16_t invert_byte_order_16( char16_t val ) { -#ifdef __GNUC__ return bswap_16(val); -#elif defined(_MSC_VER) - return _byteswap_ushort(val); -#else - #error compiler not supported -#endif } /** @@ -99,13 +101,7 @@ char16_t invert_byte_order_16( char16_t val ) */ char32_t invert_byte_order_32(char32_t val) { -#ifdef __GNUC__ return bswap_32(val); -#elif defined(_MSC_VER) - return _byteswap_ulong(val); -#else - #error compiler not supported -#endif } /** @@ -130,7 +126,7 @@ void utf8_to_ucs4(const char* src, char32_t* dst, std::size_t symbols, bool need if(bytes == 1) // ASCII { - s = *src; + s = static_cast(*src); } else if(bytes > 1 && bytes <= UTF8_MAX_SYMBOL_SIZE) // Unicode { @@ -220,7 +216,7 @@ void ucs4_to_utf8(const char32_t* src, char* dst, std::size_t symbols, bool need { if(src[i] < 0xFFFF) { - if(sprintf(dst, "\\u%04X", src[i]) < 0) + if(sprintf(dst, "\\u%04X", static_cast(src[i])) < 0) { throw bad_conversion("error escaping character", src[i]); } @@ -228,7 +224,7 @@ void ucs4_to_utf8(const char32_t* src, char* dst, std::size_t symbols, bool need } else { - if(sprintf(dst, "\\U%08X", src[i]) < 0) + if(sprintf(dst, "\\U%08X", static_cast(src[i])) < 0) { throw bad_conversion("error escaping character", src[i]); } @@ -337,8 +333,6 @@ std::size_t utf8_first_byte_mask(std::size_t symbolSize) case 6: return 0xE0; default: return 0; } - - return 0; } /** diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt new file mode 100755 index 0000000..3d82135 --- /dev/null +++ b/test/CMakeLists.txt @@ -0,0 +1,51 @@ +cmake_minimum_required(VERSION 2.8) + +set(TEST_PROJECT_NAME "cpputil_test") +set(SRC_DIR ".") +set(REQUIRED_LIBRARIES cpputil) + +# https://googletest.googlecode.com/files/gtest-1.7.0.zip + +if(APPLE) + INCLUDE(ExternalProject) + SET_DIRECTORY_PROPERTIES(PROPERTIES EP_PREFIX ${CMAKE_BINARY_DIR}/ThirdParty) + + ExternalProject_Add( + googletest + URL https://googletest.googlecode.com/files/gtest-1.7.0.zip + TIMEOUT 100 + CMAKE_ARGS -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=${CMAKE_SOURCE_DIR}/lib + -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=${CMAKE_SOURCE_DIR}/lib + -Dgtest_force_shared_crt=ON + -DCMAKE_CXX_FLAGS=${CMAKE_CXX_FLAGS} + -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} + INSTALL_COMMAND "" + LOG_DOWNLOAD ON + LOG_CONFIGURE ON + LOG_BUILD ON) + + ExternalProject_Get_Property(googletest source_dir) + ExternalProject_Get_Property(googletest binary_dir) + INCLUDE_DIRECTORIES(${source_dir}/include) + #link_directories(${binary_dir}/Debug) +else() + FIND_PACKAGE(GTest REQUIRED) + if(NOT GTEST_FOUND) + message(SEND_ERROR "Failed to find Google Test Framework") + return() + else() + include_directories(${GTEST_INCLUDE_DIRS}) + endif() +endif() + +project(${TEST_PROJECT_NAME} CXX) +aux_source_directory(${SRC_DIR} TEST_SRC) +add_executable(${TEST_PROJECT_NAME} ${TEST_SRC}) +SET_TARGET_PROPERTIES(${TEST_PROJECT_NAME} PROPERTIES ENABLE_EXPORTS TRUE) +ADD_DEPENDENCIES(${TEST_PROJECT_NAME} googletest cpputil) + +target_link_libraries(${TEST_PROJECT_NAME} ${REQUIRED_LIBRARIES} ${CMAKE_SOURCE_DIR}/lib/libgtest.a) + +install(TARGETS ${TEST_PROJECT_NAME} + RUNTIME DESTINATION bin + ARCHIVE DESTINATION lib)