1 #ifndef ISIMUD_EXCHANGES_conversions_fix_to_batsboe_common_conversions_hpp
2 #define ISIMUD_EXCHANGES_conversions_fix_to_batsboe_common_conversions_hpp
22 #include "../../exchanges/FIX/v5.0sp2/messages.hpp"
23 #include "../../exchanges/FIX/common/conversions.hpp"
24 #include "../BATSBOE/common/messages.hpp"
30 template<
class Ret>
constexpr Ret
37 convert<OrdType>(
FIX::
common::field_str_const_range_t
const &a) {
38 assert((a.second-a.first)==1);
41 return OrdType::Market;
43 return OrdType::Limit;
45 return OrdType::Pegged;
47 return static_cast<OrdType>(0);
54 template<>
constexpr inline TIF
55 convert<TIF>(
FIX::
common::field_str_const_range_t
const &a) {
56 assert((a.second-a.first)==1);
71 return static_cast<TIF>(0);
78 template<>
constexpr inline Side
79 convert<Side>(
FIX::
common::field_str_const_range_t
const &a) {
80 assert((a.second-a.first)==1);
87 return Side::Sell_short;
89 return Side::Sell_short_exempt;
91 return static_cast<Side>(0);
98 template<>
inline SecurityID_t
99 convert<SecurityID_t>(
FIX::
common::field_str_const_range_t
const &a) {
101 assert((a.second-a.first)>0);
102 assert(
static_cast<SecurityID_t::size_type>(a.second-a.first)<ret.size());
103 std::memcpy(ret.data(), a.first, (a.second-a.first));
104 std::fill_n(ret.data()+(a.second-a.first), ret.size()-(a.second-a.first),
'\0');
108 template<>
inline Price_t
109 convert<Price_t>(
FIX::
common::field_str_const_range_t
const &a) {
110 assert((a.second-a.first)>0);
111 return static_cast<Price_t>(libjmmcg::fromstring<
double>(a.first, a.second-a.first)*implied_decimal_places);
114 template<>
inline Quantity_t
115 convert<Quantity_t>(
FIX::
common::field_str_const_range_t
const &a) {
116 assert((a.second-a.first)>0);
117 return static_cast<Quantity_t>(libjmmcg::fromstring<
double>(a.first, a.second-a.first)*implied_decimal_places);
138 template<>
inline __stdcall
151 assert(!bitfields.find<bitfields_tags_type::IDSource>());
154 template<>
inline __stdcall
162 template<>
inline __stdcall