Skip to content

Commit

Permalink
Merge pull request #160 from Jacyking/master
Browse files Browse the repository at this point in the history
add section field update
  • Loading branch information
Jacyking authored May 9, 2024
2 parents b40b27f + 24e202e commit 4b7b176
Show file tree
Hide file tree
Showing 21 changed files with 1,090 additions and 347 deletions.
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

0 comments on commit 4b7b176

Please sign in to comment.