diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-08-16 21:35:13 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-16 21:35:13 +0200 |
| commit | 443588a42fe9cf48b5f63184b94afe483cb0e761 (patch) | |
| tree | b65844000839103efb40c635337339dc8f193f89 /dev/lib/fix | |
| parent | 8b7b48fe4acf0482580930eaebaa2f316727f864 (diff) | |
| parent | 95db0ac7dcb8625c5a1e92408c0c02962b205871 (diff) | |
Merge pull request #3 from snutech-gh/dev
SOCL – v1.0.4
Diffstat (limited to 'dev/lib/fix')
| -rw-r--r-- | dev/lib/fix/network.hpp | 117 | ||||
| -rw-r--r-- | dev/lib/fix/parser.hpp | 20 |
2 files changed, 10 insertions, 127 deletions
diff --git a/dev/lib/fix/network.hpp b/dev/lib/fix/network.hpp deleted file mode 100644 index edd4c26..0000000 --- a/dev/lib/fix/network.hpp +++ /dev/null @@ -1,117 +0,0 @@ -/* - * File: fix/network.hpp - * Purpose: Financial Information Exchange in C++ - * Author: Amlal El Mahrouss (founder@snu.systems) - * Copyright 2025, Amlal El Mahrouss and SNU Systems Corp. - */ - -#ifndef _SNU_FIX_NETWORK_HPP -#define _SNU_FIX_NETWORK_HPP - -#include <arpa/inet.h> -#include <sys/socket.h> -#include <utility> -#include <cstddef> - -#define SNU_MODEM : protected snu::fix::basic_delivery_modem - -namespace snu::fix -{ - class basic_delivery_modem; - - typedef int32_t delivery_socket_type; - - /// @brief a delivery modem is a container which establishes a comm. channel between the FIX session and application. - class basic_delivery_modem - { - public: - explicit basic_delivery_modem() = default; - virtual ~basic_delivery_modem() = default; - - basic_delivery_modem& operator=(const basic_delivery_modem&) = default; - basic_delivery_modem(const basic_delivery_modem&) = default; - - public: - static constexpr auto local_address = "127.0.0.1"; - static constexpr auto backlog_count = 18U; - - public: - delivery_socket_type fd_{}; - - template <typename T> - bool receive(T& out, std::size_t len) noexcept - { - static_assert(std::is_pointer<T>::value, "T is not a pointer!"); - - if (!out) - return false; - - if (!len) - return false; - - auto ret = ::recv(fd_, out, len, MSG_WAITALL); - - return ret > 0; - } - - template <typename T> - bool transmit(T& out, std::size_t len) noexcept - { - static_assert(std::is_pointer<T>::value, "T is not a pointer!"); - - if (!out) - return false; - - if (!len) - return false; - - auto ret = ::send(fd_, out, len, 0); - - return ret > 0; - } - - template <int32_t AF, int32_t Kind, int32_t IPProto, int32_t Port> - bool construct(const char* addr = basic_delivery_modem::local_address, const bool& is_server = false) noexcept - { - static_assert(AF != 0, "AF is zero"); - static_assert(Kind != 0, "Kind is zero"); - static_assert(IPProto != 0, "IPProto is zero"); - - fd_ = ::socket(AF, Kind, IPProto); - - if (fd_ < 1) - return false; - - struct sockaddr_in addr_ - { - }; - - addr_.sin_addr.s_addr = ::inet_addr(addr); - addr_.sin_port = Port; - - if (!is_server) - { - auto ret = ::connect(fd_, (struct sockaddr*)&addr_, sizeof(decltype(addr_))); - return ret == 0; - } - - ::listen(fd_, basic_delivery_modem::backlog_count); - - return true; - } - - bool destroy() noexcept - { - if (!fd_) - return false; - - ::shutdown(fd_, SHUT_RDWR); - - fd_ = 0U; - - return true; - } - }; -} // namespace snu::fix - -#endif // ifndef _SNU_FIX_NETWORK_HPP
\ No newline at end of file diff --git a/dev/lib/fix/parser.hpp b/dev/lib/fix/parser.hpp index 5701783..8181359 100644 --- a/dev/lib/fix/parser.hpp +++ b/dev/lib/fix/parser.hpp @@ -13,7 +13,7 @@ #include <utility> #include <string> #include <vector> - +#include <cstdint> #include <sys/types.h> #include <unistd.h> #include <signal.h> @@ -21,13 +21,13 @@ namespace snu::fix { template <typename char_type> - struct basic_visitor; + class basic_visitor; template <typename char_type> struct basic_range; template <typename char_type> - struct basic_range_data; + class basic_range_data; /// @brief Buffer+Length structure template <typename char_type = char> @@ -63,12 +63,12 @@ namespace snu::fix char_type* bytes_; size_t length_; - bool is_valid() + bool is_valid() noexcept { - return bytes_ && length_ > 0; + return this->bytes_ && this->length_ > 0; } - operator bool() + explicit operator bool() { return this->is_valid(); } @@ -77,7 +77,7 @@ namespace snu::fix /// @brief Convert basic_range to usable string. /// @note This function assumes that the basic_range is valid and contains ASCII bytes. template <typename char_type = char> - inline std::basic_string<char_type> to_string(basic_range<char_type>& basic_range) noexcept + std::basic_string<char_type> to_string(basic_range<char_type>& basic_range) noexcept { if (basic_range.length_ < 0) return std::basic_string<char_type>{}; @@ -98,7 +98,7 @@ namespace snu::fix static inline const char_type* begin = detail::begin_fix<char_type>(); explicit basic_range_data() = default; - ~basic_range_data() = default; + ~basic_range_data() = default; basic_range_data& operator=(const basic_range_data&) = default; basic_range_data(const basic_range_data&) = default; @@ -126,7 +126,7 @@ namespace snu::fix return magic_.starts_with(basic_range_data<char_type>::begin); } - operator bool() + explicit operator bool() { return this->is_valid(); } @@ -159,7 +159,7 @@ namespace snu::fix if (in.empty()) return ret; - thread_local std::basic_string<char_type> in_tmp{}; + static thread_local std::basic_string<char_type> in_tmp{}; in_tmp.reserve(in.size()); |
