mirror of
https://github.com/red0124/ssp.git
synced 2025-01-23 13:05:20 +01:00
Bugfix/odr violations (#47)
* Make common non-member functions inline, remove unreachable line from get_line_buffer * [skip ci] Fix namespace comments
This commit is contained in:
parent
1b9a01f787
commit
457defadaa
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,6 +1,8 @@
|
|||||||
compile_commands.json
|
compile_commands.json
|
||||||
.clang-format
|
.clang-format
|
||||||
|
.clang-tidy
|
||||||
.ccls-cache/*
|
.ccls-cache/*
|
||||||
|
.cache/
|
||||||
experiment/
|
experiment/
|
||||||
build/
|
build/
|
||||||
hbuild/
|
hbuild/
|
||||||
|
@ -45,7 +45,7 @@ inline ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
|||||||
|
|
||||||
using ssize_t = intptr_t;
|
using ssize_t = intptr_t;
|
||||||
|
|
||||||
ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
inline ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
||||||
char buff[get_line_initial_buffer_size];
|
char buff[get_line_initial_buffer_size];
|
||||||
|
|
||||||
if (lineptr == nullptr || n < sizeof(buff)) {
|
if (lineptr == nullptr || n < sizeof(buff)) {
|
||||||
@ -81,7 +81,7 @@ ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ssize_t get_line_buffer(char*& lineptr, size_t& n,
|
inline ssize_t get_line_buffer(char*& lineptr, size_t& n,
|
||||||
const char* const csv_data_buffer, size_t csv_data_size,
|
const char* const csv_data_buffer, size_t csv_data_size,
|
||||||
size_t& curr_char) {
|
size_t& curr_char) {
|
||||||
if (curr_char >= csv_data_size) {
|
if (curr_char >= csv_data_size) {
|
||||||
@ -114,15 +114,11 @@ ssize_t get_line_buffer(char*& lineptr, size_t& n,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line_used != 0) {
|
|
||||||
lineptr[line_used] = '\0';
|
lineptr[line_used] = '\0';
|
||||||
return line_used;
|
return line_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
inline std::tuple<ssize_t, bool> get_line(char*& buffer, size_t& buffer_size,
|
||||||
}
|
|
||||||
|
|
||||||
std::tuple<ssize_t, bool> get_line(char*& buffer, size_t& buffer_size,
|
|
||||||
FILE* file,
|
FILE* file,
|
||||||
const char* const csv_data_buffer,
|
const char* const csv_data_buffer,
|
||||||
size_t csv_data_size, size_t& curr_char) {
|
size_t csv_data_size, size_t& curr_char) {
|
||||||
@ -145,4 +141,4 @@ std::tuple<ssize_t, bool> get_line(char*& buffer, size_t& buffer_size,
|
|||||||
return {ssize, false};
|
return {ssize, false};
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -493,4 +493,4 @@ private:
|
|||||||
size_t number_of_columns_;
|
size_t number_of_columns_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -20,4 +20,4 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -142,7 +142,7 @@ template <typename T>
|
|||||||
struct unsupported_type {
|
struct unsupported_type {
|
||||||
constexpr static bool value = false;
|
constexpr static bool value = false;
|
||||||
};
|
};
|
||||||
} /* namespace */
|
} /* namespace errors */
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::enable_if_t<!std::is_integral_v<T> && !std::is_floating_point_v<T> &&
|
std::enable_if_t<!std::is_integral_v<T> && !std::is_floating_point_v<T> &&
|
||||||
@ -247,4 +247,4 @@ inline bool extract(const char* begin, const char* end,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -77,4 +77,4 @@ struct member_wrapper<R T::*> {
|
|||||||
template <typename T> \
|
template <typename T> \
|
||||||
constexpr bool has_m_##method##_t = has_m_##method<T>::value;
|
constexpr bool has_m_##method##_t = has_m_##method<T>::value;
|
||||||
|
|
||||||
} /* trait */
|
} /* namespace ss */
|
||||||
|
@ -971,4 +971,4 @@ private:
|
|||||||
bool eof_{false};
|
bool eof_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -124,4 +124,4 @@ struct ne {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -293,4 +293,4 @@ private:
|
|||||||
template <typename... Options>
|
template <typename... Options>
|
||||||
struct setup<setup<Options...>> : setup<Options...> {};
|
struct setup<setup<Options...>> : setup<Options...> {};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -6,7 +6,6 @@
|
|||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <memory>
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
@ -479,4 +478,4 @@ public:
|
|||||||
friend class converter;
|
friend class converter;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -378,4 +378,4 @@ T to_object(U&& data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* trait */
|
} /* namespace ss */
|
||||||
|
33
ssp.hpp
33
ssp.hpp
@ -8,7 +8,6 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <memory>
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
@ -394,7 +393,7 @@ T to_object(U&& data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* trait */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
|
|
||||||
@ -414,7 +413,7 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
@ -490,7 +489,7 @@ struct member_wrapper<R T::*> {
|
|||||||
template <typename T> \
|
template <typename T> \
|
||||||
constexpr bool has_m_##method##_t = has_m_##method<T>::value;
|
constexpr bool has_m_##method##_t = has_m_##method<T>::value;
|
||||||
|
|
||||||
} /* trait */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
|
|
||||||
@ -616,7 +615,7 @@ struct ne {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
|
|
||||||
@ -657,7 +656,7 @@ inline ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
|||||||
|
|
||||||
using ssize_t = intptr_t;
|
using ssize_t = intptr_t;
|
||||||
|
|
||||||
ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
inline ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
||||||
char buff[get_line_initial_buffer_size];
|
char buff[get_line_initial_buffer_size];
|
||||||
|
|
||||||
if (lineptr == nullptr || n < sizeof(buff)) {
|
if (lineptr == nullptr || n < sizeof(buff)) {
|
||||||
@ -693,7 +692,7 @@ ssize_t get_line_file(char*& lineptr, size_t& n, FILE* file) {
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ssize_t get_line_buffer(char*& lineptr, size_t& n,
|
inline ssize_t get_line_buffer(char*& lineptr, size_t& n,
|
||||||
const char* const csv_data_buffer, size_t csv_data_size,
|
const char* const csv_data_buffer, size_t csv_data_size,
|
||||||
size_t& curr_char) {
|
size_t& curr_char) {
|
||||||
if (curr_char >= csv_data_size) {
|
if (curr_char >= csv_data_size) {
|
||||||
@ -726,15 +725,11 @@ ssize_t get_line_buffer(char*& lineptr, size_t& n,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line_used != 0) {
|
|
||||||
lineptr[line_used] = '\0';
|
lineptr[line_used] = '\0';
|
||||||
return line_used;
|
return line_used;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
inline std::tuple<ssize_t, bool> get_line(char*& buffer, size_t& buffer_size,
|
||||||
}
|
|
||||||
|
|
||||||
std::tuple<ssize_t, bool> get_line(char*& buffer, size_t& buffer_size,
|
|
||||||
FILE* file,
|
FILE* file,
|
||||||
const char* const csv_data_buffer,
|
const char* const csv_data_buffer,
|
||||||
size_t csv_data_size, size_t& curr_char) {
|
size_t csv_data_size, size_t& curr_char) {
|
||||||
@ -757,7 +752,7 @@ std::tuple<ssize_t, bool> get_line(char*& buffer, size_t& buffer_size,
|
|||||||
return {ssize, false};
|
return {ssize, false};
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
|
|
||||||
@ -1050,7 +1045,7 @@ private:
|
|||||||
template <typename... Options>
|
template <typename... Options>
|
||||||
struct setup<setup<Options...>> : setup<Options...> {};
|
struct setup<setup<Options...>> : setup<Options...> {};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
|
|
||||||
@ -1521,7 +1516,7 @@ public:
|
|||||||
friend class converter;
|
friend class converter;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
|
|
||||||
#ifndef SSP_DISABLE_FAST_FLOAT
|
#ifndef SSP_DISABLE_FAST_FLOAT
|
||||||
@ -1654,7 +1649,7 @@ template <typename T>
|
|||||||
struct unsupported_type {
|
struct unsupported_type {
|
||||||
constexpr static bool value = false;
|
constexpr static bool value = false;
|
||||||
};
|
};
|
||||||
} /* namespace */
|
} /* namespace error */
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
std::enable_if_t<!std::is_integral_v<T> && !std::is_floating_point_v<T> &&
|
std::enable_if_t<!std::is_integral_v<T> && !std::is_floating_point_v<T> &&
|
||||||
@ -1759,7 +1754,7 @@ inline bool extract(const char* begin, const char* end,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
INIT_HAS_METHOD(tied)
|
INIT_HAS_METHOD(tied)
|
||||||
@ -2245,7 +2240,7 @@ private:
|
|||||||
size_t number_of_columns_;
|
size_t number_of_columns_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
|
|
||||||
namespace ss {
|
namespace ss {
|
||||||
@ -3207,4 +3202,4 @@ private:
|
|||||||
bool eof_{false};
|
bool eof_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
@ -23,7 +23,7 @@ struct is_unsigned : public std::is_unsigned<T> {};
|
|||||||
template <>
|
template <>
|
||||||
struct is_unsigned<ss::uint8> : public std::true_type {};
|
struct is_unsigned<ss::uint8> : public std::true_type {};
|
||||||
|
|
||||||
} /* namespace */
|
} /* anonymous namespace */
|
||||||
|
|
||||||
static_assert(is_signed<ss::int8>::value);
|
static_assert(is_signed<ss::int8>::value);
|
||||||
static_assert(is_unsigned<ss::uint8>::value);
|
static_assert(is_unsigned<ss::uint8>::value);
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
namespace ss {
|
namespace ss {
|
||||||
template <typename... Ts>
|
template <typename... Ts>
|
||||||
class parser;
|
class parser;
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@ -224,4 +224,4 @@ make_parser(const std::string& file_name,
|
|||||||
return make_parser_impl<buffer_mode, Ts...>(file_name, delim);
|
return make_parser_impl<buffer_mode, Ts...>(file_name, delim);
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace */
|
} /* anonymous namespace */
|
||||||
|
@ -109,4 +109,4 @@ static void make_and_write(const std::string& file_name,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace */
|
} /* anonymous namespace */
|
||||||
|
@ -616,7 +616,7 @@ void test_option_combinations3() {
|
|||||||
test_option_combinations2<Ts..., trim>();
|
test_option_combinations2<Ts..., trim>();
|
||||||
}
|
}
|
||||||
|
|
||||||
} /* namespace */
|
} /* anonymous namespace */
|
||||||
|
|
||||||
// Tests split into multiple compilation units
|
// Tests split into multiple compilation units
|
||||||
#if 0
|
#if 0
|
||||||
|
@ -145,7 +145,7 @@ make_combinations(const std::vector<std::string>& input,
|
|||||||
|
|
||||||
return {std::move(lines), std::move(expectations)};
|
return {std::move(lines), std::move(expectations)};
|
||||||
}
|
}
|
||||||
} /* namespace */
|
} /* anonymous namespace */
|
||||||
|
|
||||||
/* ********************************** */
|
/* ********************************** */
|
||||||
/* ********************************** */
|
/* ********************************** */
|
||||||
@ -548,7 +548,7 @@ public:
|
|||||||
return splitter.size_shifted();
|
return splitter.size_shifted();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} /* ss */
|
} /* namespace ss */
|
||||||
|
|
||||||
TEST_CASE("splitter test resplit unterminated quote") {
|
TEST_CASE("splitter test resplit unterminated quote") {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user