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

add section field update #160

Merged
merged 12 commits into from
May 9, 2024
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
16 changes: 12 additions & 4 deletions cmake/mariadb.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,14 @@ IF (WIN32)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
$ENV{PROGRAMFILES}/MariaDB*/include
$ENV{SYSTEMDRIVE}/MariaDB*/include)
ELSE (WIN32)
ELSEIF (LINUX)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
/usr/local/include/mariadb
/usr/include/mariadb)
ENDIF(WIN32)
ELSEIF (APPLE)
FIND_PATH(MARIADB_INCLUDE_DIR mysql.h
/opt/homebrew/include/mariadb)
ENDIF()

SET(MARIADB_NAMES mariadb)
IF (WIN32)
Expand All @@ -27,13 +30,18 @@ IF (WIN32)
PATHS $ENV{PROGRAMFILES}/MariaDB*/lib
$ENV{SYSTEMDRIVE}/MariaDB*/lib
PATH_SUFFIXES mariadb)
ELSE (WIN32)
ELSEIF (LINUX)
FIND_LIBRARY(MARIADB_LIBRARY
NAMES ${MARIADB_NAMES}
PATHS /usr/lib
/usr/local/lib
PATH_SUFFIXES mariadb)
ENDIF(WIN32)
ELSEIF (APPLE)
FIND_LIBRARY(MARIADB_LIBRARY
NAMES ${MARIADB_NAMES}
PATHS /opt/homebrew/lib
PATH_SUFFIXES mariadb)
ENDIF()

IF (MARIADB_INCLUDE_DIR AND MARIADB_LIBRARY)
SET(MARIADB_FOUND TRUE)
Expand Down
24 changes: 16 additions & 8 deletions cmake/mysql.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,16 @@ IF (WIN32)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
$ENV{PROGRAMFILES}/MySQL/*/include
$ENV{SYSTEMDRIVE}/MySQL/*/include)
ELSE (WIN32)
ELSEIF (LINUX)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
/usr/local/Cellar/[email protected]/*/include/mysql
/opt/homebrew/include/mysql
/usr/local/include/mysql
/usr/include/mysql)
ENDIF(WIN32)
ELSEIF (APPLE)
FIND_PATH(MYSQL_INCLUDE_DIR mysql.h
/opt/homebrew/include/mysql
/opt/homebrew/opt/[email protected]/include
/opt/homebrew/Cellar/[email protected]/*/include/mysql)
ENDIF()

SET(MYSQL_NAMES mysqlclient)
IF (WIN32)
Expand All @@ -29,15 +32,20 @@ IF (WIN32)
PATHS $ENV{PROGRAMFILES}/MySQL/*/lib
$ENV{SYSTEMDRIVE}/MySQL/*/lib
PATH_SUFFIXES mysql)
ELSE (WIN32)
ELSEIF (LINUX)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS /usr/lib
/usr/local/lib
/opt/homebrew/lib
/usr/local/Cellar/[email protected]/*/lib
PATH_SUFFIXES mysql)
ENDIF(WIN32)
ELSEIF (APPLE)
FIND_LIBRARY(MYSQL_LIBRARY
NAMES ${MYSQL_NAMES}
PATHS /opt/homebrew/lib
/opt/homebrew/opt/[email protected]/lib
/opt/homebrew/Cellar/[email protected]/*/lib
PATH_SUFFIXES mysql)
ENDIF()

IF (MYSQL_INCLUDE_DIR AND MYSQL_LIBRARY)
SET(MYSQL_FOUND TRUE)
Expand Down
20 changes: 13 additions & 7 deletions cmake/pgsql.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,33 @@ IF (WIN32)
FIND_PATH(PGSQL_INCLUDE_DIR libpq-fe.h
$ENV{PROGRAMFILES}/PostgreSQL/*/include
$ENV{SYSTEMDRIVE}/PostgreSQL/*/include)
ELSE (WIN32)
ELSEIF (LINUX)
FIND_PATH(PGSQL_INCLUDE_DIR libpq-fe.h
/opt/homebrew/include/postgresql
/usr/local/include/postgresql
/usr/include/postgresql)
ENDIF(WIN32)
ELSEIF (APPLE)
FIND_PATH(PGSQL_INCLUDE_DIR libpq-fe.h
/opt/homebrew/include/postgresql)
ENDIF()

IF (WIN32)
SET(PGSQL_NAMES libpq)
FIND_LIBRARY(PGSQL_LIBRARY
NAMES ${PGSQL_NAMES}
PATHS $ENV{PROGRAMFILES}/PostgreSQL/*/lib
$ENV{SYSTEMDRIVE}/PostgreSQL/*/lib)
ELSE (WIN32)
ELSEIF (LINUX)
SET(PGSQL_NAMES pq)
FIND_LIBRARY(PGSQL_LIBRARY
NAMES ${PGSQL_NAMES}
PATHS /usr/lib
/usr/local/lib
/opt/homebrew/lib)
ENDIF(WIN32)
/usr/local/lib)
ELSEIF (APPLE)
SET(PGSQL_NAMES pq)
FIND_LIBRARY(PGSQL_LIBRARY
NAMES ${PGSQL_NAMES}
PATHS /opt/homebrew/lib)
ENDIF()

IF (PGSQL_INCLUDE_DIR AND PGSQL_LIBRARY)
SET(PGSQL_FOUND TRUE)
Expand Down
36 changes: 31 additions & 5 deletions iguana/detail/charconv.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,48 @@

#include "dragonbox_to_chars.h"
#include "fast_float.h"
#include "iguana/define.h"
#include "itoa.hpp"


namespace iguana {
template <typename T>
struct is_char_type
: std::disjunction<std::is_same<T, char>, std::is_same<T, wchar_t>,
std::is_same<T, char16_t>, std::is_same<T, char32_t>> {};

inline void *to_chars_float(...) {
throw std::runtime_error("not allowed to invoke");
return {};
}

template <typename T, typename Ret = decltype(to_chars_float(
std::declval<T>(), std::declval<char *>()))>
using return_of_tochars = std::conditional_t<std::is_same_v<Ret, char *>,
std::true_type, std::false_type>;
// here std::true_type is used as a type , any other type is also ok.
using has_to_chars_float = iguana::return_of_tochars<std::true_type>;

namespace detail {
template <typename U>

// check_number==true: check if the string [first, last) is a legal number
template <bool check_number = true, typename U>
std::pair<const char *, std::errc> from_chars(const char *first,
const char *last,
U &value) noexcept {
const char *last, U &value) {
using T = std::decay_t<U>;
if constexpr (std::is_floating_point_v<T>) {
auto [p, ec] = fast_float::from_chars(first, last, value);
if constexpr (check_number) {
if (p != last || ec != std::errc{})
IGUANA_UNLIKELY { throw std::runtime_error("Failed to parse number"); }
}
return {p, ec};
}
else {
auto [p, ec] = std::from_chars(first, last, value);
if constexpr (check_number) {
if (p != last || ec != std::errc{})
IGUANA_UNLIKELY { throw std::runtime_error("Failed to parse number"); }
}
return {p, ec};
}
}
Expand All @@ -33,7 +54,12 @@ 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);
if constexpr (has_to_chars_float::value) {
return static_cast<char *>(to_chars_float(value, buffer));
}
else {
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
Expand Down
10 changes: 9 additions & 1 deletion iguana/detail/traits.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

#include "iguana/define.h"


namespace iguana {

template <class T>
Expand Down Expand Up @@ -68,6 +67,15 @@ template <typename T, typename... Us>
struct has_type<T, std::tuple<Us...>>
: std::disjunction<std::is_same<T, Us>...> {};

template <class T>
struct member_tratis {};

template <class T, class Owner>
struct member_tratis<T Owner::*> {
using owner_type = Owner;
using value_type = T;
};

template <typename T>
inline constexpr bool is_int64_v =
std::is_same_v<T, int64_t> || std::is_same_v<T, uint64_t>;
Expand Down
Loading
Loading