1 #ifndef ISIMUD_EXCHANGES_FIX_common_CONVERSIONS_HPP
2 #define ISIMUD_EXCHANGES_FIX_common_CONVERSIONS_HPP
23 #include "core/memops.hpp"
24 #include "core/ttypes.hpp"
35 convert(SecurityID_t
const &i,
char *buff,
std::size_t sz) {
36 assert(i.max_size()<=sz);
37 const std::size_t sz_to_copy=std::min(i.max_size(), sz);
38 std::copy_n(i.begin(), sz_to_copy, buff);
44 return libjmmcg::tostring(a, buff, sz);
68 template<
class Ret>
inline Ret
71 template<>
inline std::int32_t
72 convert<std::int32_t>(
FIX::
common::field_str_const_range_t
const &a) {
73 assert((a.second-a.first)>0);
74 return static_cast<std::int32_t>(libjmmcg::fromstring<
long>(a.first, a.second-a.first));
77 template<>
inline std::uint32_t
78 convert<std::uint32_t>(
FIX::
common::field_str_const_range_t
const &a) {
79 assert((a.second-a.first)>0);
80 return static_cast<std::uint32_t>(libjmmcg::fromstring<
long>(a.first, a.second-a.first));
83 template<>
inline std::uint64_t
84 convert<std::uint64_t>(
FIX::
common::field_str_const_range_t
const &a) {
85 assert((a.second-a.first)>0);
86 return static_cast<std::uint64_t>(libjmmcg::fromstring<
long>(a.first, a.second-a.first));
89 template<>
inline std::string
90 convert<std::string>(
FIX::
common::field_str_const_range_t
const &a) {
91 assert((a.second-a.first)>0);
92 return std::string(a.first, a.second);
95 template<>
inline Quantity_t
96 convert<Quantity_t>(
FIX::
common::field_str_const_range_t
const &a) {
97 assert((a.second-a.first)>0);
98 return libjmmcg::fromstring<Quantity_t>(a.first, a.second-a.first);
101 template<>
inline SecurityID_t
102 convert<SecurityID_t>(
FIX::
common::field_str_const_range_t
const &a) {
103 assert((a.second-a.first)>0);
104 assert((a.second-a.first)<=
static_cast<
long>(
sizeof(SecurityID_t)));
106 std::memcpy(tmp.data(), a.first, a.second-a.first);