diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/ocl/core/config.hpp | 5 | ||||
| -rw-r--r-- | include/ocl/core/is_same.hpp | 8 | ||||
| -rw-r--r-- | include/ocl/core/option.hpp | 23 | ||||
| -rw-r--r-- | include/ocl/fix/parser.hpp | 2 | ||||
| -rw-r--r-- | include/ocl/hashing/crc_hash.hpp | 5 | ||||
| -rw-r--r-- | include/ocl/io/print.hpp | 31 | ||||
| -rw-r--r-- | include/ocl/net/unique_socket.hpp | 6 |
7 files changed, 56 insertions, 24 deletions
diff --git a/include/ocl/core/config.hpp b/include/ocl/core/config.hpp index a0ddd66..13abae0 100644 --- a/include/ocl/core/config.hpp +++ b/include/ocl/core/config.hpp @@ -31,3 +31,8 @@ #define OCL_DECL #define OCL_EXPORT_DECL #endif + +#ifdef _WIN32 +#define OCL_USE_CRLF_ENDINGS 1 +#define OCL_WINDOWS 1 +#endif
\ No newline at end of file diff --git a/include/ocl/core/is_same.hpp b/include/ocl/core/is_same.hpp index fdf80d7..27a85d0 100644 --- a/include/ocl/core/is_same.hpp +++ b/include/ocl/core/is_same.hpp @@ -15,11 +15,13 @@ namespace ocl template <typename T> struct basic_hash { + using result_type = typename T::result_type; + using type = T; + /// @brief hash from T's result_type. - static typename T::result_type hash() + static result_type hash() { - static T val; - return val.hash(); + return T{}.hash(); } }; diff --git a/include/ocl/core/option.hpp b/include/ocl/core/option.hpp index e333dd5..b5a2778 100644 --- a/include/ocl/core/option.hpp +++ b/include/ocl/core/option.hpp @@ -23,15 +23,17 @@ namespace ocl template <typename char_type = char> struct option final { - explicit option(const return_type& return_type) + option() = delete; + + option(const return_type& return_type) : ret_(return_type) { } ~option() = default; - option& operator=(const option&) = default; - option(const option&) = default; + option& operator=(const option&) = delete; + option(const option&) = delete; option& expect(const char_type* input) { @@ -65,7 +67,7 @@ namespace ocl return tell(std::forward<Lst>(arg)...) ? return_type::okay : return_type::err; } - namespace traits + namespace detail { struct int_eq_teller { @@ -90,26 +92,26 @@ namespace ocl return (a < b); } }; - } // namespace traits + } // namespace detail template <typename... Lst> inline return_type eval_less_than(Lst&&... arg) { - static traits::int_less_than_teller eq; + static detail::int_less_than_teller eq; return eq(std::forward<Lst>(arg)...) ? return_type::okay : return_type::err; } template <typename... Lst> inline return_type eval_eq(Lst&&... arg) { - static traits::int_eq_teller less_than; + static detail::int_eq_teller less_than; return less_than(std::forward<Lst>(arg)...) ? return_type::okay : return_type::err; } template <typename... Lst> inline return_type eval_greater_than(Lst&&... arg) { - static traits::int_greater_than_teller greater_than; + static detail::int_greater_than_teller greater_than; return greater_than(std::forward<Lst>(arg)...) ? return_type::okay : return_type::err; } @@ -122,6 +124,11 @@ namespace ocl { return return_type::err; } + + inline return_type eval_invalid() noexcept + { + return return_type::invalid; + } } // namespace ocl #endif /* ifndef _OCL_OPT_HPP */
\ No newline at end of file diff --git a/include/ocl/fix/parser.hpp b/include/ocl/fix/parser.hpp index 9809bd5..17fb63c 100644 --- a/include/ocl/fix/parser.hpp +++ b/include/ocl/fix/parser.hpp @@ -11,9 +11,7 @@ #include <core/config.hpp> #include <hashing/crc_hash.hpp> #include <io/print.hpp> -#include <algorithm> #include <string> -#include <vector> namespace ocl::fix { diff --git a/include/ocl/hashing/crc_hash.hpp b/include/ocl/hashing/crc_hash.hpp index 0322e65..89f3eff 100644 --- a/include/ocl/hashing/crc_hash.hpp +++ b/include/ocl/hashing/crc_hash.hpp @@ -67,9 +67,10 @@ namespace ocl return 0; std::uint32_t crc = 0xffffffff; - std::size_t cnt = 0; + std::size_t cnt = 0; - while ((len--) > 0) { + while ((len--) > 0) + { crc = (crc >> 8) ^ crc_array_[(crc ^ in[cnt]) & 0xFF]; ++cnt; } diff --git a/include/ocl/io/print.hpp b/include/ocl/io/print.hpp index 669dfef..5c8a17c 100644 --- a/include/ocl/io/print.hpp +++ b/include/ocl/io/print.hpp @@ -13,6 +13,7 @@ #include <iostream> #define console_io_out std::cout +#define console_io_in std::cin namespace ocl::io { @@ -40,19 +41,37 @@ namespace ocl::io print(other...); } - template <typename... T> - inline void println(T... fmt) noexcept + namespace detail { - print(fmt...); + inline bool is_stdio_sync = true; + } + + inline void enable_stdio_sync(const bool& enable) noexcept + { + console_io_out.sync_with_stdio(enable); + detail::is_stdio_sync = false; + } + + inline const bool& is_stdio_sync() + { + return detail::is_stdio_sync; + } -#ifdef _WIN32 + inline void lf() noexcept + { +#ifdef OCL_USE_CRLF_ENDINGS print("\r\n"); #else print("\n"); #endif } -} // namespace ocl::io -#undef console_io_out + template <typename... T> + inline void println(T... fmt) noexcept + { + print(fmt...); + lf(); + } +} // namespace ocl::io #endif // ifndef _OCL_PRINT_HPP diff --git a/include/ocl/net/unique_socket.hpp b/include/ocl/net/unique_socket.hpp index ed1d549..5e74af0 100644 --- a/include/ocl/net/unique_socket.hpp +++ b/include/ocl/net/unique_socket.hpp @@ -17,8 +17,8 @@ #include <cstddef> #include <cstring> -#ifdef _WIN32 -#error !!! "Windows is not supported yet for <socket>" !!! +#ifdef OCL_WINDOWS +#error !!! "Windows is not supported yet for <unique_socket>" !!! #endif // _WIN32 namespace ocl::net @@ -128,7 +128,7 @@ namespace ocl::net if (is_server_) return; - auto ret = ::recv(this->socket_, static_cast<void*>(out), len, 0); + auto ret = ::recv(this->socket_, static_cast<void*>(out), len, 0); this->bad_ = ret < 0L; } |
