Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update iguana for gcc 8.3 #123

Merged
merged 1 commit into from
Oct 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions .github/workflows/ci-mysql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,6 @@ jobs:
mysql-version: 8.0
database: test_ormppdb

- name: Verify MySQL
run: mysql -uroot -e'show databases;'

- name: Configure cmake
run: cmake -B${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DENABLE_MYSQL=ON

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/clang-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ jobs:
echo "The suggested format is"
echo "$diff"
exit 1
fi
fi
36 changes: 15 additions & 21 deletions cmake/mariadb.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,51 +13,45 @@ ENDIF (MARIADB_INCLUDE_DIR)
IF (WIN32)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
$ENV{PROGRAMFILES}/MariaDB*/include
$ENV{SYSTEMDRIVE}/MariaDB*/include
)
ELSE ()
$ENV{SYSTEMDRIVE}/MariaDB*/include)
ELSE (WIN32)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
/usr/local/include/mariadb
/usr/include/mariadb
)
ENDIF()
/usr/include/mariadb)
ENDIF(WIN32)

SET(MARIADB_NAMES mariadb)
IF (WIN32)
FIND_LIBRARY(MARIADB_LIBRARY
NAMES ${MARIADB_NAMES}
PATHS $ENV{PROGRAMFILES}/MariaDB*/lib
$ENV{SYSTEMDRIVE}/MariaDB*/lib
PATH_SUFFIXES mariadb
)
ELSE ()
PATH_SUFFIXES mariadb)
ELSE (WIN32)
FIND_LIBRARY(MARIADB_LIBRARY
NAMES ${MARIADB_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mariadb
)
ENDIF()
PATHS /usr/lib
/usr/local/lib
PATH_SUFFIXES mariadb)
ENDIF(WIN32)

IF (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)
SET(MARIADB_FOUND TRUE)
SET( MARIADB_LIBRARY ${MARIADB_LIBRARY} )
SET(MARIADB_LIBRARY ${MARIADB_LIBRARY})
ELSE (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)
SET(MARIADB_FOUND FALSE)
SET( MARIADB_LIBRARY )
SET(MARIADB_LIBRARY)
ENDIF (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)

IF (MARIADB_FOUND)
#IF (NOT MARIADB_FIND_QUIETLY)
IF (NOT MARIADB_FIND_QUIETLY)
MESSAGE(STATUS "Found MariaDB: ${MARIADB_LIBRARY}")
#ENDIF (NOT MARIADB_FIND_QUIETLY)
ENDIF (NOT MARIADB_FIND_QUIETLY)
ELSE (MARIADB_FOUND)
IF (MARIADB_FIND_REQUIRED)
MESSAGE(STATUS "Looked for MariaDB libraries named ${MARIADB_NAMES}.")
MESSAGE(FATAL_ERROR "Could NOT find MariaDB library")
ENDIF (MARIADB_FIND_REQUIRED)
ENDIF (MARIADB_FOUND)

MARK_AS_ADVANCED(
MARIADB_LIBRARY
MARIADB_INCLUDE_DIR
)
MARK_AS_ADVANCED(MARIADB_LIBRARY MARIADB_INCLUDE_DIR)
42 changes: 20 additions & 22 deletions cmake/mysql.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -13,51 +13,49 @@ ENDIF (MYSQL_INCLUDE_DIR)
IF (WIN32)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
$ENV{PROGRAMFILES}/MySQL/*/include
$ENV{SYSTEMDRIVE}/MySQL/*/include
)
ELSE ()
$ENV{SYSTEMDRIVE}/MySQL/*/include)
ELSE (WIN32)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
/usr/local/Cellar/mysql@8.0/*/include/mysql
/opt/homebrew/include/mysql
/usr/local/include/mysql
/usr/include/mysql
)
ENDIF()
/usr/include/mysql)
ENDIF(WIN32)

SET(MYSQL_NAMES mysqlclient mysqlclient_r)
SET(MYSQL_NAMES mysqlclient)
IF (WIN32)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS $ENV{PROGRAMFILES}/MySQL/*/lib
$ENV{SYSTEMDRIVE}/MySQL/*/lib
PATH_SUFFIXES mysql
)
ELSE ()
PATH_SUFFIXES mysql)
ELSE (WIN32)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS /usr/lib /usr/local/lib
PATH_SUFFIXES mysql
)
ENDIF()
PATHS /usr/lib
/usr/local/lib
/opt/homebrew/lib
/usr/local/Cellar/mysql@8.0/*/lib
PATH_SUFFIXES mysql)
ENDIF(WIN32)

IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
SET(MYSQL_FOUND TRUE)
SET( MYSQL_LIBRARIES ${MYSQL_LIBRARY} )
SET(MYSQL_LIBRARIES ${MYSQL_LIBRARY})
ELSE (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
SET(MYSQL_FOUND FALSE)
SET( MYSQL_LIBRARIES )
SET(MYSQL_LIBRARIES)
ENDIF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)

IF (MYSQL_FOUND)
#IF (NOT MYSQL_FIND_QUIETLY)
IF (NOT MYSQL_FIND_QUIETLY)
MESSAGE(STATUS "Found MySQL: ${MYSQL_LIBRARY}")
#ENDIF (NOT MYSQL_FIND_QUIETLY)
ENDIF (NOT MYSQL_FIND_QUIETLY)
ELSE (MYSQL_FOUND)
IF (MYSQL_FIND_REQUIRED)
MESSAGE(STATUS "Looked for MySQL libraries named ${MYSQL_NAMES}.")
MESSAGE(FATAL_ERROR "Could NOT find MySQL library")
ENDIF (MYSQL_FIND_REQUIRED)
ENDIF (MYSQL_FOUND)

MARK_AS_ADVANCED(
MYSQL_LIBRARY
MYSQL_INCLUDE_DIR
)
MARK_AS_ADVANCED(MYSQL_LIBRARY MYSQL_INCLUDE_DIR)
3 changes: 2 additions & 1 deletion iguana/define.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ IGUANA_INLINE int countr_zero(unsigned long long n) {
if (static_cast<uint32_t>(n) != 0) {
_BitScanForward(&c, static_cast<uint32_t>(n));
return static_cast<int>(c);
} else {
}
else {
_BitScanForward(&c, static_cast<uint32_t>(n >> 32));
return static_cast<int>(c) + 32;
}
Expand Down
42 changes: 26 additions & 16 deletions iguana/detail/charconv.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#pragma once
#include <charconv>

#include "dragonbox_to_chars.h"
#include "fast_float.h"
#include "itoa.hpp"
#include <charconv>


namespace iguana {
template <typename T>
Expand All @@ -12,36 +14,44 @@ struct is_char_type

namespace detail {
template <typename U>
std::pair<const char *, std::errc>
from_chars(const char *first, const char *last, U &value) noexcept {
std::pair<const char *, std::errc> from_chars(const char *first,
const char *last,
U &value) noexcept {
using T = std::decay_t<U>;
if constexpr (std::is_floating_point_v<T>) {
auto [p, ec] = fast_float::from_chars(first, last, value);
return {p, ec};
} else {
}
else {
auto [p, ec] = std::from_chars(first, last, value);
return {p, ec};
}
}

// not support uint8 for now
template <typename T> char *to_chars(char *buffer, T value) noexcept {
template <typename T>
char *to_chars(char *buffer, T value) noexcept {
using U = std::decay_t<T>;
if constexpr (std::is_floating_point_v<U>) {
return jkj::dragonbox::to_chars(value, buffer);
} else if constexpr (std::is_signed_v<U> && (sizeof(U) >= 8)) {
return xtoa(value, buffer, 10, 1); // int64_t
} else if constexpr (std::is_unsigned_v<U> && (sizeof(U) >= 8)) {
return xtoa(value, buffer, 10, 0); // uint64_t
} else if constexpr (std::is_integral_v<U> && (sizeof(U) > 1)) {
return itoa_fwd(value, buffer); // only support more than 2 bytes intergal
} else if constexpr (!is_char_type<U>::value) {
}
else if constexpr (std::is_signed_v<U> && (sizeof(U) >= 8)) {
return xtoa(value, buffer, 10, 1); // int64_t
}
else if constexpr (std::is_unsigned_v<U> && (sizeof(U) >= 8)) {
return xtoa(value, buffer, 10, 0); // uint64_t
}
else if constexpr (std::is_integral_v<U> && (sizeof(U) > 1)) {
return itoa_fwd(value, buffer); // only support more than 2 bytes intergal
}
else if constexpr (!is_char_type<U>::value) {
return itoa_fwd(static_cast<int>(value),
buffer); // only support more than 2 bytes intergal
} else {
buffer); // only support more than 2 bytes intergal
}
else {
static_assert(!sizeof(U), "only support arithmetic type except char type");
}
}

} // namespace detail
} // namespace iguana
} // namespace detail
} // namespace iguana
Loading
Loading