fix8  version 1.4.0
Open Source C++ FIX Framework
FIX8::MessageBase Class Reference

Base class for all fix messages. More...

#include <message.hpp>

Inheritance diagram for FIX8::MessageBase:
FIX8::Message FIX8::TEX::header FIX8::TEX::header FIX8::TEX::trailer FIX8::TEX::trailer FIX8::TEX::AdjustedPositionReport FIX8::TEX::Advertisement FIX8::TEX::AllocationInstruction FIX8::TEX::AllocationInstructionAck FIX8::TEX::AllocationInstructionAlert FIX8::TEX::AllocationReport FIX8::TEX::AllocationReportAck FIX8::TEX::ApplicationMessageReport FIX8::TEX::ApplicationMessageRequest FIX8::TEX::ApplicationMessageRequestAck FIX8::TEX::AssignmentReport FIX8::TEX::BidRequest FIX8::TEX::BidResponse FIX8::TEX::BusinessMessageReject FIX8::TEX::CollateralAssignment FIX8::TEX::CollateralInquiry FIX8::TEX::CollateralInquiryAck FIX8::TEX::CollateralReport FIX8::TEX::CollateralRequest FIX8::TEX::CollateralResponse FIX8::TEX::Confirmation FIX8::TEX::ConfirmationAck FIX8::TEX::ConfirmationRequest FIX8::TEX::ContraryIntentionReport FIX8::TEX::CrossOrderCancelReplaceRequest FIX8::TEX::CrossOrderCancelRequest FIX8::TEX::DerivativeSecurityList FIX8::TEX::DerivativeSecurityListRequest FIX8::TEX::DerivativeSecurityListUpdateReport FIX8::TEX::DontKnowTrade FIX8::TEX::Email FIX8::TEX::ExecutionAcknowledgement FIX8::TEX::ExecutionReport FIX8::TEX::ExecutionReport FIX8::TEX::Heartbeat FIX8::TEX::Heartbeat FIX8::TEX::IOI FIX8::TEX::ListCancelRequest FIX8::TEX::ListExecute FIX8::TEX::ListStatus FIX8::TEX::ListStatusRequest FIX8::TEX::ListStrikePrice FIX8::TEX::Logon FIX8::TEX::Logon FIX8::TEX::Logout FIX8::TEX::Logout FIX8::TEX::MarketDataIncrementalRefresh FIX8::TEX::MarketDataRequest FIX8::TEX::MarketDataRequestReject FIX8::TEX::MarketDataSnapshotFullRefresh FIX8::TEX::MarketDefinition FIX8::TEX::MarketDefinitionRequest FIX8::TEX::MarketDefinitionUpdateReport FIX8::TEX::MassQuote FIX8::TEX::MassQuoteAcknowledgement FIX8::TEX::MultilegOrderCancelReplace FIX8::TEX::NetworkCounterpartySystemStatusRequest FIX8::TEX::NetworkCounterpartySystemStatusResponse FIX8::TEX::NewOrderCross FIX8::TEX::NewOrderList FIX8::TEX::NewOrderMultileg FIX8::TEX::NewOrderSingle FIX8::TEX::NewOrderSingle FIX8::TEX::News FIX8::TEX::OrderCancelReject FIX8::TEX::OrderCancelReplaceRequest FIX8::TEX::OrderCancelRequest FIX8::TEX::OrderMassActionReport FIX8::TEX::OrderMassActionRequest FIX8::TEX::OrderMassCancelReport FIX8::TEX::OrderMassCancelRequest FIX8::TEX::OrderMassStatusRequest FIX8::TEX::OrderStatusRequest FIX8::TEX::PartyDetailsListReport FIX8::TEX::PartyDetailsListRequest FIX8::TEX::PositionMaintenanceReport FIX8::TEX::PositionMaintenanceRequest FIX8::TEX::PositionReport FIX8::TEX::Quote FIX8::TEX::QuoteCancel FIX8::TEX::QuoteRequest FIX8::TEX::QuoteRequestReject FIX8::TEX::QuoteResponse FIX8::TEX::QuoteStatusReport FIX8::TEX::QuoteStatusRequest FIX8::TEX::RegistrationInstructions FIX8::TEX::RegistrationInstructionsResponse FIX8::TEX::Reject FIX8::TEX::Reject FIX8::TEX::RequestForPositions FIX8::TEX::RequestForPositionsAck FIX8::TEX::ResendRequest FIX8::TEX::ResendRequest FIX8::TEX::RFQRequest FIX8::TEX::SecurityDefinition FIX8::TEX::SecurityDefinitionRequest FIX8::TEX::SecurityDefinitionUpdateReport FIX8::TEX::SecurityList FIX8::TEX::SecurityListRequest FIX8::TEX::SecurityListUpdateReport FIX8::TEX::SecurityStatus FIX8::TEX::SecurityStatusRequest FIX8::TEX::SecurityTypeRequest FIX8::TEX::SecurityTypes FIX8::TEX::SequenceReset FIX8::TEX::SequenceReset FIX8::TEX::SettlementInstructionRequest FIX8::TEX::SettlementInstructions FIX8::TEX::SettlementObligationReport FIX8::TEX::StreamAssignmentReport FIX8::TEX::StreamAssignmentReportACK FIX8::TEX::StreamAssignmentRequest FIX8::TEX::TestRequest FIX8::TEX::TestRequest FIX8::TEX::TradeCaptureReport FIX8::TEX::TradeCaptureReportAck FIX8::TEX::TradeCaptureReportRequest FIX8::TEX::TradeCaptureReportRequestAck FIX8::TEX::TradingSessionList FIX8::TEX::TradingSessionListRequest FIX8::TEX::TradingSessionListUpdateReport FIX8::TEX::TradingSessionStatus FIX8::TEX::TradingSessionStatusRequest FIX8::TEX::UserNotification FIX8::TEX::UserRequest FIX8::TEX::UserResponse

Public Member Functions

template<typename InputIterator >
 MessageBase (const struct F8MetaCntx &ctx, const f8String &msgType, const InputIterator begin, const size_t cnt, const FieldTrait_Hash_Array *ftha)
 
F8API MessageBase (const MessageBase &from)
 Copy ctor. More...
 
F8API MessageBaseoperator= (const MessageBase &that)
 Assignment operator. More...
 
virtual ~MessageBase ()
 Dtor. More...
 
virtual void clear (bool reuse=true)
 
void clear_positions ()
 empty the positions map More...
 
size_t size () const
 
F8API unsigned decode (const f8String &from, unsigned offset, unsigned ignore=0, bool permissive_mode=false)
 
unsigned decode_group (GroupBase *grpbase, const unsigned short fnum, const f8String &from, unsigned s_offset, unsigned ignore)
 
F8API size_t encode (std::ostream &to) const
 
F8API size_t encode (char *to) const
 
F8API size_t encode_group (const unsigned short fnum, std::ostream &to) const
 
F8API size_t encode_group (const unsigned short fnum, char *to) const
 
virtual GroupBasecreate_nested_group (unsigned short fnum) const
 
F8API unsigned check_positions ()
 
F8API unsigned copy_legal (MessageBase *to, bool force=false) const
 
F8API unsigned move_legal (MessageBase *to, bool force=false)
 
void push_unknown (MessageBase *to) const
 
void check_set_rlm (BaseField *where) const
 
const f8Stringget_msgtype () const
 
void add_field_decoder (const unsigned short fnum, const unsigned pos, BaseField *what)
 
void add_field (const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
 
void add_field (const unsigned short fnum, Fields::iterator fitr, const unsigned pos, BaseField *what, bool check=true)
 
void add_field (const unsigned short fnum, const unsigned pos, BaseField *what, bool check=true)
 
void set (const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present)
 
template<typename T >
bool add_field (T *what)
 
bool add_field (BaseField *what)
 
Groupsget_groups ()
 
template<typename T >
bool operator+= (T *what)
 
template<typename T >
MessageBaseoperator<< (T *what)
 
template<typename T >
bool get (T &to) const
 
template<typename T >
bool has () const
 
bool is_legal (unsigned short fnum) const
 
template<typename T >
bool is_legal () const
 
template<typename T >
const T * get () const
 
template<typename T >
bool operator() (T &to) const
 
template<typename T >
const T * operator() () const
 
bool have (const unsigned short fnum) const
 
Fields::const_iterator find_field (const unsigned short fnum) const
 
BaseFieldget_field (const unsigned short fnum) const
 
BaseFieldget_field_by_name (const char *tag) const
 
Fields::const_iterator fields_begin () const
 
Fields::const_iterator fields_end () const
 
F8API BaseFieldreplace (const unsigned short fnum, Presence::const_iterator itr, BaseField *with)
 
F8API BaseFieldreplace (const unsigned short fnum, BaseField *with)
 
F8API GroupBasereplace (const unsigned short fnum, GroupBase *with)
 
F8API BaseFieldremove (const unsigned short fnum, Presence::const_iterator itr)
 
F8API BaseFieldremove (const unsigned short fnum)
 
template<typename T >
GroupBasefind_group () const
 
GroupBasefind_group (const unsigned short fnum) const
 
template<typename T >
GroupBasefind_add_group (GroupBase *grpbase=nullptr)
 
GroupBasefind_add_group (const unsigned short fnum, GroupBase *grpbase=nullptr)
 
template<typename T >
void append_group (T *what)
 
void add_group (GroupBase *what)
 
MessageBaseoperator<< (GroupBase *what)
 
void operator+= (GroupBase *what)
 
unsigned short getPos (const unsigned short field) const
 
bool add_trait (const FieldTrait &what)
 
template<typename InputIterator >
void add_trait (const InputIterator begin, const size_t cnt)
 
virtual F8API void print (std::ostream &os, int depth=0) const
 
virtual F8API void print_field (const unsigned short fnum, std::ostream &os) const
 
virtual F8API void print_group (const unsigned short fnum, std::ostream &os, int depth=0) const
 
const FieldTraitsget_fp () const
 
void print_fp (std::ostream &os)
 
virtual begin_stringget_begin_string ()
 
virtual body_lengthget_body_length ()
 
virtual msg_typeget_msg_type ()
 
virtual check_sumget_check_sum ()
 
const f8Stringget_unknown () const
 

Static Public Member Functions

static unsigned extract_element (const char *from, const unsigned sz, char *tag, char *val)
 
static unsigned extract_element_fixed_width (const char *from, const unsigned sz, const unsigned val_sz, char *tag, char *val)
 
static unsigned extract_element (const char *from, const unsigned sz, f8String &tag, f8String &val)
 
static void set_tabsize (unsigned tabsize)
 
static unsigned get_tabsize ()
 
static bool has_group_count (const BaseField *bf)
 

Static Protected Member Functions

static unsigned extract_header (const f8String &from, char *len, char *mtype)
 
static unsigned extract_trailer (const f8String &from, f8String &chksum)
 

Protected Attributes

Fields _fields
 
FieldTraits _fp
 
Positions _pos
 
Groups _groups
 
const f8String_msgType
 
const F8MetaCntx_ctx
 

Static Protected Attributes

static F8API unsigned _tabsize = defaults::tabsize
 

Private Attributes

f8String _unknown
 pass through for permissive mode More...
 

Friends

class Message
 
std::ostream & operator<< (std::ostream &os, const MessageBase &what)
 

Detailed Description

Base class for all fix messages.

Definition at line 381 of file message.hpp.

Constructor & Destructor Documentation

template<typename InputIterator >
FIX8::MessageBase::MessageBase ( const struct F8MetaCntx ctx,
const f8String msgType,
const InputIterator  begin,
const size_t  cnt,
const FieldTrait_Hash_Array ftha 
)
inline

Ctor.

Template Parameters
InputIteratorinput iterator type
Parameters
ctxreference to generated metadata
msgType- reference to Fix message type
begin- InputIterator pointing to begining of field trait table
cnt- number of elements in field trait table
ftha- field trait hash array

Definition at line 419 of file message.hpp.

420  : _fp(begin, cnt, ftha),
421  _msgType(msgType), _ctx(ctx) {}
FieldTraits _fp
Definition: message.hpp:388
const F8MetaCntx & _ctx
Definition: message.hpp:392
const F8MetaCntx & ctx()
Compiler generated metadata object, accessed through this function.
const f8String & _msgType
Definition: message.hpp:391
F8API FIX8::MessageBase::MessageBase ( const MessageBase from)

Copy ctor.

virtual FIX8::MessageBase::~MessageBase ( )
inlinevirtual

Dtor.

Definition at line 429 of file message.hpp.

References clear().

429 { clear(false); }
virtual void clear(bool reuse=true)
Definition: message.hpp:433

Member Function Documentation

void FIX8::MessageBase::add_field ( const unsigned short  fnum,
Presence::const_iterator  itr,
const unsigned  pos,
BaseField what,
bool  check 
)
inline

Add fix field to this message.

Parameters
fnumfield tag
itrhint iterator: set to itr of found element
posposition of field in message
whatpointer to field
checkif false, don't check for presence

Definition at line 556 of file message.hpp.

References FIX8::FieldTraits::get(), glout_debug, FIX8::FieldTrait::present, replace(), and FIX8::FieldTraits::set().

Referenced by add_field(), FIX8::TEX::header::add_preamble(), FIX8::TEX::trailer::add_preamble(), copy_legal(), FIX8::ConsoleMenu::EditMsg(), move_legal(), operator+=(), and operator<<().

557  {
558  if (check && _fp.get(fnum, itr, FieldTrait::present)) // for now, silently replace duplicate
559  {
560  glout_debug << _msgType << " replacing field:" << fnum;
561  delete replace(fnum, itr, what);
562  return;
563  }
564 
565  _fields.insert({fnum, what});
566  _pos.insert({pos, what});
567  _fp.set(fnum, itr, FieldTrait::present);
568  }
FieldTraits _fp
Definition: message.hpp:388
#define glout_debug
Definition: logger.hpp:614
Positions _pos
Definition: message.hpp:389
F8API BaseField * replace(const unsigned short fnum, Presence::const_iterator itr, BaseField *with)
Definition: message.cpp:599
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
const f8String & _msgType
Definition: message.hpp:391
void set(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type)
Definition: traits.hpp:524
void FIX8::MessageBase::add_field ( const unsigned short  fnum,
Fields::iterator  fitr,
const unsigned  pos,
BaseField what,
bool  check = true 
)
inline

Add fix field to this message.

Parameters
fnumfield tag
fitrhint iterator: set to itr of found element
posposition of field in message
whatpointer to field
checkif false, don't check for presence

Definition at line 576 of file message.hpp.

References FIX8::presorted_set< unsigned short, FieldTrait, FieldTrait::Compare >::end(), FIX8::FieldTraits::get(), FIX8::FieldTraits::get_presence(), glout_debug, FIX8::FieldTrait::present, replace(), and FIX8::FieldTraits::set().

577  {
579  if (check && _fp.get(fnum, itr, FieldTrait::present)) // for now, silently replace duplicate
580  {
581  glout_debug << _msgType << " replacing field:" << fnum;
582  delete replace(fnum, itr, what);
583  return;
584  }
585 
586  _fields.insert(fitr, {fnum, what});
587  _pos.insert({pos, what});
588  _fp.set(fnum, itr, FieldTrait::present);
589  }
FieldTraits _fp
Definition: message.hpp:388
const Presence & get_presence() const
Definition: traits.hpp:658
#define glout_debug
Definition: logger.hpp:614
Positions _pos
Definition: message.hpp:389
F8API BaseField * replace(const unsigned short fnum, Presence::const_iterator itr, BaseField *with)
Definition: message.cpp:599
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
const f8String & _msgType
Definition: message.hpp:391
void set(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type)
Definition: traits.hpp:524
void FIX8::MessageBase::add_field ( const unsigned short  fnum,
const unsigned  pos,
BaseField what,
bool  check = true 
)
inline

Add fix field to this message.

Parameters
fnumfield tag
posposition of field in message
whatpointer to field
checkif false, don't check for presence

Definition at line 596 of file message.hpp.

References FIX8::presorted_set< unsigned short, FieldTrait, FieldTrait::Compare >::end(), FIX8::FieldTraits::get(), FIX8::FieldTraits::get_presence(), glout_debug, FIX8::FieldTrait::present, replace(), and FIX8::FieldTraits::set().

597  {
599  if (check && _fp.get(fnum, itr, FieldTrait::present)) // for now, silently replace duplicate
600  {
601  glout_debug << _msgType << " replacing field:" << fnum;
602  delete replace(fnum, itr, what);
603  return;
604  }
605 
606  _fields.insert({fnum, what});
607  _pos.insert({pos, what});
608  _fp.set(fnum, itr, FieldTrait::present);
609  }
FieldTraits _fp
Definition: message.hpp:388
const Presence & get_presence() const
Definition: traits.hpp:658
#define glout_debug
Definition: logger.hpp:614
Positions _pos
Definition: message.hpp:389
F8API BaseField * replace(const unsigned short fnum, Presence::const_iterator itr, BaseField *with)
Definition: message.cpp:599
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
const f8String & _msgType
Definition: message.hpp:391
void set(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type)
Definition: traits.hpp:524
template<typename T >
bool FIX8::MessageBase::add_field ( T *  what)
inline

Add fix field to this message.

Template Parameters
Tfield type
Parameters
whatpointer to field
Returns
true on success; throws InvalidField if not valid

Definition at line 621 of file message.hpp.

References add_field(), FIX8::presorted_set< unsigned short, FieldTrait, FieldTrait::Compare >::end(), FIX8::FieldTraits::get_presence(), FIX8::FieldTraits::getPos(), and FIX8::FieldTraits::has().

622  {
624  if (_fp.has(T::get_field_id(), itr))
625  {
626  add_field(T::get_field_id(), itr, _fp.getPos(T::get_field_id(), itr), what, true);
627  return true;
628  }
629  throw InvalidField(T::get_field_id());
630  return false;
631  }
FieldTraits _fp
Definition: message.hpp:388
unsigned short getPos(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:639
bool has(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:457
const Presence & get_presence() const
Definition: traits.hpp:658
void add_field(const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
Definition: message.hpp:556
bool FIX8::MessageBase::add_field ( BaseField what)
inline

Add fix field to this message.

Template Parameters
Tfield type
Parameters
whatpointer to field
Returns
true on success; throws InvalidField if not valid

Definition at line 637 of file message.hpp.

References FIX8::BaseField::_fnum, add_field(), FIX8::presorted_set< unsigned short, FieldTrait, FieldTrait::Compare >::end(), FIX8::FieldTraits::get_presence(), FIX8::FieldTraits::getPos(), and FIX8::FieldTraits::has().

638  {
639  const unsigned short& fnum(what->_fnum);
641  if (_fp.has(fnum, itr))
642  {
643  add_field(fnum, itr, _fp.getPos(fnum, itr), what, true);
644  return true;
645  }
646  throw InvalidField(fnum);
647  return false;
648  }
FieldTraits _fp
Definition: message.hpp:388
unsigned short getPos(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:639
bool has(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:457
const Presence & get_presence() const
Definition: traits.hpp:658
void add_field(const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
Definition: message.hpp:556
void FIX8::MessageBase::add_field_decoder ( const unsigned short  fnum,
const unsigned  pos,
BaseField what 
)
inline

Add fix field to this message.

Parameters
fnumfield tag
posposition of field in message
whatpointer to field

Definition at line 544 of file message.hpp.

545  {
546  _fields.insert({fnum, what});
547  _pos.insert({pos, what});
548  }
Positions _pos
Definition: message.hpp:389
void FIX8::MessageBase::add_group ( GroupBase what)
inline

Add a repeating group to a message.

Parameters
whatpointer to group to add

Definition at line 832 of file message.hpp.

References FIX8::GroupBase::_fnum.

Referenced by find_add_group(), operator+=(), and operator<<().

832 { _groups.insert({what->_fnum, what}); }
bool FIX8::MessageBase::add_trait ( const FieldTrait what)
inline

Add a fieldtrait to the message.

Parameters
whatFieldTrait to add
Returns
true on success

Definition at line 851 of file message.hpp.

References FIX8::FieldTraits::add().

851 { return _fp.add(what); }
FieldTraits _fp
Definition: message.hpp:388
bool add(const FieldTrait &what)
Definition: traits.hpp:575
template<typename InputIterator >
void FIX8::MessageBase::add_trait ( const InputIterator  begin,
const size_t  cnt 
)
inline

Add a range of fieldtraits to the message.

Template Parameters
InputIteratorinput iterator type
Parameters
beginfirst FieldTrait to add
cnt- number of elements in field trait table

Definition at line 858 of file message.hpp.

References FIX8::FieldTraits::add().

858 { _fp.add(begin, cnt); }
FieldTraits _fp
Definition: message.hpp:388
bool add(const FieldTrait &what)
Definition: traits.hpp:575
template<typename T >
void FIX8::MessageBase::append_group ( T *  what)
inline

Add a repeating group at the end of a message group. Assume key is not < last.

Template Parameters
Ttype of grop being appended
Parameters
whatpointer to group to add

Definition at line 828 of file message.hpp.

828 { _groups.insert(_groups.end(), {T::_fnum, what}); }
unsigned MessageBase::check_positions ( )

Check to see if positions of fields are as required.

Returns
field number of field not in order, 0 if all ok

Definition at line 218 of file message.cpp.

219 {
220  return 0; // TODO
221 }
void FIX8::MessageBase::check_set_rlm ( BaseField where) const
inline

Check that this field has the realm (domain) pointer set; if not then set.

Parameters
wherefield to check

Definition at line 526 of file message.hpp.

References FIX8::BaseField::_fnum, FIX8::BaseField::_rlm, and FIX8::F8MetaCntx::find_be().

Referenced by copy_legal().

527  {
528  if (!where->_rlm)
529  {
530  const BaseEntry *tbe(_ctx.find_be(where->_fnum));
531  if (tbe && tbe->_rlm)
532  where->_rlm = tbe->_rlm; // populate realm;
533  }
534  }
const F8MetaCntx & _ctx
Definition: message.hpp:392
const BaseEntry * find_be(const unsigned short fnum) const
Definition: message.hpp:267
virtual void FIX8::MessageBase::clear ( bool  reuse = true)
inlinevirtual

Empty messages from container.

Parameters
reuseif true clear vector

Reimplemented in FIX8::Message.

Definition at line 433 of file message.hpp.

References FIX8::FieldTraits::clear_flag(), and FIX8::FieldTrait::present.

Referenced by FIX8::Message::clear(), and ~MessageBase().

434  {
435  std::for_each(_fields.begin(), _fields.end(), [](Fields::value_type& pp) { delete pp.second; pp.second = nullptr; });
436  std::for_each(_groups.begin(), _groups.end(), [](Groups::value_type& pp) { delete pp.second; pp.second = nullptr; });
437  if (reuse)
438  {
439  _fields.clear();
440  //_groups.clear();
442  _pos.clear();
443  }
444  }
FieldTraits _fp
Definition: message.hpp:388
Positions _pos
Definition: message.hpp:389
void clear_flag(FieldTrait::TraitTypes type=FieldTrait::present)
Definition: traits.hpp:585
void FIX8::MessageBase::clear_positions ( )
inline

empty the positions map

Definition at line 447 of file message.hpp.

447 { _pos.clear(); }
Positions _pos
Definition: message.hpp:389
unsigned MessageBase::copy_legal ( MessageBase to,
bool  force = false 
) const

Copy all fields from this message to 'to' where the field is legal for 'to' and it is not already present in 'to'; includes nested repeating groups.

Parameters
totarget message
forceif true copy all fields regardless, replacing any existing, adding any new
Returns
number of fields copied

Definition at line 275 of file message.cpp.

References _fp, FIX8::GroupBase::_msgs, add_field(), check_set_rlm(), copy_legal(), FIX8::presorted_set< unsigned short, FieldTrait, FieldTrait::Compare >::end(), find_group(), find_group(), FIX8::FieldTraits::get(), FIX8::FieldTraits::get_presence(), FIX8::FieldTrait::group, FIX8::FieldTraits::has(), FIX8::FieldTrait::present, and replace().

Referenced by copy_legal(), and tex_router_server::operator()().

276 {
277  unsigned copied{};
278  for (const auto& pp : _fp.get_presence())
279  {
280  if (pp._field_traits & FieldTrait::present && (force || (to->_fp.has(pp._fnum) && !to->_fp.get(pp._fnum))))
281  {
282  GroupBase *gb;
283  if (pp._field_traits & FieldTrait::group && (gb = find_group(pp._fnum)))
284  {
285  GroupBase *gb1(to->find_group(pp._fnum));
286  for (const auto *qq : gb->_msgs)
287  {
288  MessageBase *grc(gb1->create_group(true));
289  copied += qq->copy_legal(grc, force);
290  *gb1 += grc;
291  }
292  }
293 
294  BaseField *nf(get_field(pp._fnum)->copy());
295 #if defined FIX8_POPULATE_METADATA
296  to->check_set_rlm(nf);
297 #endif
299  if (force && to->_fp.get(pp._fnum, fpitr, FieldTrait::present))
300  delete to->replace(pp._fnum, fpitr, nf);
301  else
302  to->add_field(nf);
303  ++copied;
304  }
305  }
306 
307  return copied;
308 }
FieldTraits _fp
Definition: message.hpp:388
GroupBase * find_group() const
Definition: message.hpp:792
bool has(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:457
F8API unsigned copy_legal(MessageBase *to, bool force=false) const
Definition: message.cpp:275
const Presence & get_presence() const
Definition: traits.hpp:658
Abstract base class for all repeating groups.
Definition: message.hpp:59
Used for static trait interrogation.
Definition: traits.hpp:57
BaseField * get_field(const unsigned short fnum) const
Definition: message.hpp:735
F8API BaseField * replace(const unsigned short fnum, Presence::const_iterator itr, BaseField *with)
Definition: message.cpp:599
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
void check_set_rlm(BaseField *where) const
Definition: message.hpp:526
void add_field(const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
Definition: message.hpp:556
The base field class (ABC) for all fields.
Definition: field.hpp:127
GroupElement _msgs
vector of repeating messagebase groups
Definition: message.hpp:64
Base class for all fix messages.
Definition: message.hpp:381
virtual BaseField * copy()=0
virtual GroupBase* FIX8::MessageBase::create_nested_group ( unsigned short  fnum) const
inlinevirtual

Instantiate a new nested group element.

Parameters
fnumfield number of group to create
Returns
new message

Reimplemented in FIX8::TEX::DerivativeSecurityListRequest, FIX8::TEX::SecurityList, FIX8::TEX::SecurityListRequest, FIX8::TEX::SecurityTypes, FIX8::TEX::CrossOrderCancelRequest, FIX8::TEX::CrossOrderCancelReplaceRequest, FIX8::TEX::NewOrderCross, FIX8::TEX::OrderMassCancelReport, FIX8::TEX::OrderMassCancelRequest, FIX8::TEX::RegistrationInstructionsResponse, FIX8::TEX::RegistrationInstructions, FIX8::TEX::ListStrikePrice, FIX8::TEX::BidResponse, FIX8::TEX::BidRequest, FIX8::TEX::MassQuote, FIX8::TEX::header, FIX8::TEX::TradingSessionStatus, FIX8::TEX::SecurityStatus, FIX8::TEX::SecurityStatusRequest, FIX8::TEX::SecurityDefinition, FIX8::TEX::SecurityDefinitionRequest, FIX8::TEX::MassQuoteAcknowledgement, FIX8::TEX::QuoteStatusRequest, FIX8::TEX::QuoteCancel, FIX8::TEX::MarketDataRequestReject, FIX8::TEX::MarketDataIncrementalRefresh, FIX8::TEX::MarketDataSnapshotFullRefresh, FIX8::TEX::MarketDataRequest, FIX8::TEX::SettlementInstructions, FIX8::TEX::Quote, FIX8::TEX::QuoteRequest, FIX8::TEX::DontKnowTrade, FIX8::TEX::AllocationInstructionAck, FIX8::TEX::ListStatus, FIX8::TEX::ListCancelRequest, FIX8::TEX::AllocationInstruction, FIX8::TEX::OrderStatusRequest, FIX8::TEX::OrderCancelReplaceRequest, FIX8::TEX::OrderCancelRequest, FIX8::TEX::NewOrderList, FIX8::TEX::NewOrderSingle, FIX8::TEX::PartyDetailsListReport, FIX8::TEX::PartyDetailsListRequest, FIX8::TEX::StreamAssignmentReport, FIX8::TEX::StreamAssignmentRequest, FIX8::TEX::OrderMassActionRequest, FIX8::TEX::Email, FIX8::TEX::OrderMassActionReport, FIX8::TEX::ApplicationMessageReport, FIX8::TEX::ApplicationMessageRequestAck, FIX8::TEX::ApplicationMessageRequest, FIX8::TEX::MarketDefinitionUpdateReport, FIX8::TEX::MarketDefinition, FIX8::TEX::TradingSessionListUpdateReport, FIX8::TEX::DerivativeSecurityListUpdateReport, FIX8::TEX::SettlementObligationReport, FIX8::TEX::SecurityDefinitionUpdateReport, FIX8::TEX::ContraryIntentionReport, FIX8::TEX::ExecutionAcknowledgement, FIX8::TEX::AllocationInstructionAlert, FIX8::TEX::AdjustedPositionReport, FIX8::TEX::SecurityListUpdateReport, FIX8::TEX::TradingSessionList, FIX8::TEX::ConfirmationRequest, FIX8::TEX::CollateralInquiryAck, FIX8::TEX::NetworkCounterpartySystemStatusResponse, FIX8::TEX::NetworkCounterpartySystemStatusRequest, FIX8::TEX::CollateralInquiry, FIX8::TEX::CollateralReport, FIX8::TEX::News, FIX8::TEX::CollateralResponse, FIX8::TEX::CollateralAssignment, FIX8::TEX::CollateralRequest, FIX8::TEX::AssignmentReport, FIX8::TEX::SettlementInstructionRequest, FIX8::TEX::AllocationReportAck, FIX8::TEX::AllocationReport, FIX8::TEX::TradeCaptureReportAck, FIX8::TEX::TradeCaptureReportRequestAck, FIX8::TEX::PositionReport, FIX8::TEX::RequestForPositionsAck, FIX8::TEX::RequestForPositions, FIX8::TEX::PositionMaintenanceReport, FIX8::TEX::PositionMaintenanceRequest, FIX8::TEX::Confirmation, FIX8::TEX::QuoteResponse, FIX8::TEX::QuoteStatusReport, FIX8::TEX::RFQRequest, FIX8::TEX::QuoteRequestReject, FIX8::TEX::OrderMassStatusRequest, FIX8::TEX::TradeCaptureReport, FIX8::TEX::TradeCaptureReportRequest, FIX8::TEX::MultilegOrderCancelReplace, FIX8::TEX::NewOrderMultileg, FIX8::TEX::DerivativeSecurityList, FIX8::TEX::Logon, FIX8::TEX::ExecutionReport, FIX8::TEX::Advertisement, FIX8::TEX::Logon, and FIX8::TEX::IOI.

Definition at line 496 of file message.hpp.

Referenced by find_add_group().

496 { return nullptr; }
unsigned MessageBase::decode ( const f8String from,
unsigned  offset,
unsigned  ignore = 0,
bool  permissive_mode = false 
)

Decode from string.

Parameters
fromsource string
offsetin bytes to decode from
ignorebytes to ignore counting back from end of message
permissive_modeif true, ignore unknown fields
Returns
number of bytes consumed

Definition at line 87 of file message.cpp.

References FIX8::BaseEntry::_name, FIX8::FieldTrait::automatic, FIX8::Common_BodyLength(), FIX8_MAX_FLD_LENGTH, FIX8::FieldTrait::ft_data, FIX8::FieldTrait::ft_Length, FIX8::FieldTrait::group, and FIX8::FieldTrait::present.

Referenced by FIX8::Message::decode().

88 {
89  const unsigned fsize(static_cast<unsigned>(from.size()) - ignore), npos(0xffffffff);
90  unsigned pos(static_cast<unsigned>(_pos.size())), last_valid_pos(npos);
91  const char *dptr(from.data());
93  size_t last_valid_offset(0);
94 
95  for (unsigned result; s_offset <= fsize && (result = extract_element(dptr + s_offset, fsize - s_offset, tag, val));)
96  {
97  unsigned short tv(fast_atoi<unsigned short>(tag));
99  if (itr == _fp.get_presence().end())
100  {
101 unknown_field:
102  if (permissive_mode)
103  {
104  if (last_valid_pos == npos)
105  {
106  last_valid_pos = pos;
107  last_valid_offset = s_offset;
108  }
109  _unknown.append(dptr + s_offset, result);
110  s_offset += result;
111  continue;
112  }
113  break;
114  }
115  s_offset += result;
116  if (itr->_field_traits.has(FieldTrait::present))
117  {
118  if (!itr->_field_traits.has(FieldTrait::automatic))
119  throw DuplicateField(tv);
120  }
121  else for(unsigned ii(0); ii < 2; ++ii)
122  {
123  const BaseEntry *be(_ctx.find_be(tv));
124  if (!be)
125  throw UnknownField(tv);
126  BaseField *bf(be->_create._do(val, be->_rlm, -1));
127  add_field_decoder(tv, ++pos, bf);
128  itr->_field_traits.set(FieldTrait::present);
129  // check if repeating group and num elements > 0
130  if (itr->_field_traits.has(FieldTrait::group) && has_group_count(bf))
131  s_offset = decode_group(nullptr, tv, from, s_offset, ignore);
132 
133  if (itr->_ftype != FieldTrait::ft_Length || tv == Common_BodyLength) // this type expects next field to be data
134  break;
135 
136  const unsigned val_sz(fast_atoi<unsigned>(val));
137  if(val_sz > FIX8_MAX_FLD_LENGTH - 1)
138  throw f8Exception("Value size too large");
139  result = extract_element_fixed_width(dptr + s_offset, fsize - s_offset, val_sz, tag, val);
140  if (!result)
141  throw MissingMandatoryField("Unable to extract fixed width field");
142 
143  const unsigned short lasttv(tv);
144  tv = fast_atoi<unsigned short>(tag);
145  if ((itr = _fp.get_presence().find(tv)) == _fp.get_presence().end())
146  goto unknown_field;
147  if (itr->_ftype != FieldTrait::ft_data || lasttv + 1 != tv) // next field must be data, tag must be 1 greater than length tag
148  break;
149  s_offset += result;
150  }
151  }
152 
153  const unsigned short missing(_fp.find_missing());
154  if (missing)
155  {
156  const BaseEntry *tbe(_ctx.find_be(missing));
157  ostringstream ostr;
158  ostr << tbe->_name << " (" << missing << ')';
159  throw MissingMandatoryField(ostr.str());
160  }
161 
162  return permissive_mode && last_valid_pos == pos ? static_cast<unsigned>(last_valid_offset) : s_offset;
163 }
FieldTraits _fp
Definition: message.hpp:388
A field was decoded in a message that has already been decoded.
unsigned short find_missing(FieldTrait::TraitTypes type=FieldTrait::mandatory) const
Definition: traits.hpp:512
#define FIX8_MAX_FLD_LENGTH
Definition: f8config.h:571
An invalid field was decoded.
void add_field_decoder(const unsigned short fnum, const unsigned pos, BaseField *what)
Definition: message.hpp:544
const char * _name
Definition: field.hpp:2078
unsigned decode_group(GroupBase *grpbase, const unsigned short fnum, const f8String &from, unsigned s_offset, unsigned ignore)
Definition: message.cpp:166
const F8MetaCntx & _ctx
Definition: message.hpp:392
const Presence & get_presence() const
Definition: traits.hpp:658
Positions _pos
Definition: message.hpp:389
Used for static trait interrogation.
Definition: traits.hpp:57
static bool has_group_count(const BaseField *bf)
Definition: message.hpp:999
Base exception class.
Definition: f8exception.hpp:49
static unsigned extract_element(const char *from, const unsigned sz, char *tag, char *val)
Definition: message.hpp:886
const unsigned short Common_BodyLength(9)
const BaseEntry * find_be(const unsigned short fnum) const
Definition: message.hpp:267
The base field class (ABC) for all fields.
Definition: field.hpp:127
An outbound message was missing a mandatory field.
iterator find(const FieldTrait what, bool &answer)
Definition: traits.hpp:282
f8String _unknown
pass through for permissive mode
Definition: message.hpp:384
static unsigned extract_element_fixed_width(const char *from, const unsigned sz, const unsigned val_sz, char *tag, char *val)
Definition: message.hpp:924
unsigned MessageBase::decode_group ( GroupBase grpbase,
const unsigned short  fnum,
const f8String from,
unsigned  s_offset,
unsigned  ignore 
)

Decode repeating group from string using nested group method

Parameters
grpbasepointer to groupbase of holding object
fnumrepeating group fix field num (no...)
fromsource string
s_offsetin bytes to decode from
ignorebytes to ignore counting back from end of message
Returns
number of bytes consumed

Definition at line 166 of file message.cpp.

References FIX8::BaseEntry::_name, FIX8::GroupBase::create_group(), FILE_LINE, FIX8_MAX_FLD_LENGTH, and FIX8::FieldTrait::present.

168 {
169  unsigned result;
170  if (!(grpbase = find_add_group(fnum, grpbase)))
171  throw InvalidRepeatingGroup(fnum, FILE_LINE);
172  const unsigned fsize(static_cast<unsigned>(from.size()) - ignore);
173  const char *dptr(from.data());
175 
176  for (bool ok(true); ok && s_offset < fsize; )
177  {
178  unique_ptr<MessageBase> grp(grpbase->create_group(false)); // shallow create
179 
180  for (unsigned pos(0); s_offset < fsize && (result = extract_element(dptr + s_offset, fsize - s_offset, tag, val));)
181  {
182  const unsigned tv(fast_atoi<unsigned>(tag));
183  Presence::const_iterator itr(grp->_fp.get_presence().end());
184  if (grp->_fp.get(tv, itr, FieldTrait::present)) // already present; next group?
185  break;
186  if (pos == 0 && grp->_fp.getPos(tv, itr) != 1) // first field in group is mandatory
187  throw MissingRepeatingGroupField(tv);
188  const BaseEntry *be(_ctx.find_be(tv));
189  if (!be || !grp->_fp.has(tv, itr)) // unknown field or field not found in sub-group - end of repeats?
190  {
191  ok = false;
192  break;
193  }
194  s_offset += result;
195  BaseField *bf(be->_create._do(val, be->_rlm, -1));
196  grp->add_field(tv, itr, ++pos, bf, false);
197  grp->_fp.set(tv, itr, FieldTrait::present); // is present
198  // nested group (check if not zero elements)
199  if (grp->_fp.is_group(tv, itr) && has_group_count(bf))
200  s_offset = grp->decode_group(grpbase, tv, from, s_offset, ignore);
201  }
202 
203  const unsigned short missing(grp->_fp.find_missing());
204  if (missing)
205  {
206  const BaseEntry *tbe(_ctx.find_be(missing));
207  ostringstream ostr;
208  ostr << tbe->_name << " (" << missing << ')';
209  throw MissingMandatoryField(ostr.str());
210  }
211  *grpbase << grp.release();
212  }
213 
214  return s_offset;
215 }
#define FIX8_MAX_FLD_LENGTH
Definition: f8config.h:571
#define FILE_LINE
Definition: f8utils.hpp:68
const char * _name
Definition: field.hpp:2078
const F8MetaCntx & _ctx
Definition: message.hpp:392
virtual MessageBase * create_group(bool deepctor=true) const =0
Used for static trait interrogation.
Definition: traits.hpp:57
static bool has_group_count(const BaseField *bf)
Definition: message.hpp:999
static unsigned extract_element(const char *from, const unsigned sz, char *tag, char *val)
Definition: message.hpp:886
An invalid repeating group was found while attempting to encode a message.
An invalid repeating group field was found while decoding a message (first field is mandatory)...
GroupBase * find_add_group(GroupBase *grpbase=nullptr)
Definition: message.hpp:808
const BaseEntry * find_be(const unsigned short fnum) const
Definition: message.hpp:267
The base field class (ABC) for all fields.
Definition: field.hpp:127
An outbound message was missing a mandatory field.
size_t MessageBase::encode ( std::ostream &  to) const

Encode message to stream.

Parameters
tostream to encode to
Returns
number of bytes encoded

Definition at line 373 of file message.cpp.

References FIX8::FieldTrait::group, and FIX8::FieldTrait::suppress.

Referenced by FIX8::Message::encode().

374 {
375  const std::ios::pos_type where(to.tellp());
376  for (const auto& pp : _pos)
377  {
378 #if defined FIX8_POPULATE_METADATA
379  check_set_rlm(pp.second);
380 #endif
382  if (!_fp.get(pp.second->_fnum, fpitr, FieldTrait::suppress)) // some fields are not encoded until unsuppressed (eg. checksum)
383  {
384  pp.second->encode(to);
385  if (fpitr->_field_traits.has(FieldTrait::group) && has_group_count(pp.second))
386  encode_group(pp.second->_fnum, to);
387  }
388  }
389 
390  if (_unknown.size())
391  to << _unknown;
392 
393  return to.tellp() - where;
394 }
FieldTraits _fp
Definition: message.hpp:388
const Presence & get_presence() const
Definition: traits.hpp:658
Positions _pos
Definition: message.hpp:389
Used for static trait interrogation.
Definition: traits.hpp:57
static bool has_group_count(const BaseField *bf)
Definition: message.hpp:999
F8API size_t encode_group(const unsigned short fnum, std::ostream &to) const
Definition: message.cpp:409
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
void check_set_rlm(BaseField *where) const
Definition: message.hpp:526
f8String _unknown
pass through for permissive mode
Definition: message.hpp:384
size_t MessageBase::encode ( char *  to) const

Encode message to buffer.

Parameters
tobuffer to encode to
Returns
number of bytes encoded

Definition at line 349 of file message.cpp.

References FIX8::FieldTrait::group, and FIX8::FieldTrait::suppress.

350 {
351  const char *where(to);
352  for (const auto& pp : _pos)
353  {
354 #if defined FIX8_POPULATE_METADATA
355  check_set_rlm(pp.second);
356 #endif
358  if (!_fp.get(pp.second->_fnum, fpitr, FieldTrait::suppress)) // some fields are not encoded until unsuppressed (eg. checksum)
359  {
360  to += pp.second->encode(to);
361  if (fpitr->_field_traits.has(FieldTrait::group) && has_group_count(pp.second))
362  to += encode_group(pp.second->_fnum, to);
363  }
364  }
365 
366  if (_unknown.size())
367  to += _unknown.copy(to, _unknown.size());
368 
369  return to - where;
370 }
FieldTraits _fp
Definition: message.hpp:388
const Presence & get_presence() const
Definition: traits.hpp:658
Positions _pos
Definition: message.hpp:389
Used for static trait interrogation.
Definition: traits.hpp:57
static bool has_group_count(const BaseField *bf)
Definition: message.hpp:999
F8API size_t encode_group(const unsigned short fnum, std::ostream &to) const
Definition: message.cpp:409
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
void check_set_rlm(BaseField *where) const
Definition: message.hpp:526
f8String _unknown
pass through for permissive mode
Definition: message.hpp:384
size_t MessageBase::encode_group ( const unsigned short  fnum,
std::ostream &  to 
) const

Encode group message to stream.

Parameters
fnumrepeating group fix field num (no...)
tostream to encode to
Returns
number of bytes encoded

Definition at line 409 of file message.cpp.

References FILE_LINE, and find_group().

410 {
411  const std::ios::pos_type where(to.tellp());
412  GroupBase *grpbase(find_group(fnum));
413  if (!grpbase)
414  throw InvalidRepeatingGroup(fnum, FILE_LINE);
415  for (const auto *pp : grpbase->_msgs)
416  pp->encode(to);
417  return to.tellp() - where;
418 }
#define FILE_LINE
Definition: f8utils.hpp:68
GroupBase * find_group() const
Definition: message.hpp:792
Abstract base class for all repeating groups.
Definition: message.hpp:59
An invalid repeating group was found while attempting to encode a message.
size_t MessageBase::encode_group ( const unsigned short  fnum,
char *  to 
) const

Encode group message to buffer.

Parameters
fnumrepeating group fix field num (no...)
tobuffer to encode to
Returns
number of bytes encoded

Definition at line 397 of file message.cpp.

References FIX8::GroupBase::_msgs, FILE_LINE, and find_group().

398 {
399  const char *where(to);
400  GroupBase *grpbase(find_group(fnum));
401  if (!grpbase)
402  throw InvalidRepeatingGroup(fnum, FILE_LINE);
403  for (const auto *pp : grpbase->_msgs)
404  to += pp->encode(to);
405  return to - where;
406 }
#define FILE_LINE
Definition: f8utils.hpp:68
GroupBase * find_group() const
Definition: message.hpp:792
Abstract base class for all repeating groups.
Definition: message.hpp:59
An invalid repeating group was found while attempting to encode a message.
static unsigned FIX8::MessageBase::extract_element ( const char *  from,
const unsigned  sz,
char *  tag,
char *  val 
)
inlinestatic

Extract a tag/value element from a char buffer. ULL version.

Parameters
fromsource buffer
szsize of string
tagtag to extract to
valvalue to extract to
Returns
number of bytes consumed

Definition at line 886 of file message.hpp.

References FIX8::default_assignment_separator(), FIX8::default_field_separator(), and FIX8::get_value().

Referenced by FIX8::FIXReader::read().

887  {
888  enum { get_tag, get_value } state(get_tag);
889 
890  for (unsigned ii(0); ii < sz; ++ii)
891  {
892  switch (state)
893  {
894  case get_tag:
895  if (!isdigit(from[ii]))
896  {
897  if (from[ii] != default_assignment_separator)
898  return *val = *tag = 0;
899  state = get_value;
900  }
901  else
902  *tag++ = from[ii];
903  break;
904  case get_value:
905  if (from[ii] == default_field_separator)
906  {
907  *val = *tag = 0;
908  return ++ii;
909  }
910  *val++ = from[ii];
911  break;
912  }
913  }
914  return *val = *tag = 0;
915  }
const unsigned char default_assignment_separator('=')
default FIX assignment separator (=)
T get_value(const std::string &source)
Definition: f8utils.hpp:564
const unsigned char default_field_separator(0x1)
default FIX field separator (^A)
static unsigned FIX8::MessageBase::extract_element ( const char *  from,
const unsigned  sz,
f8String tag,
f8String val 
)
inlinestatic

Extract a tag/value element from a char buffer.

Parameters
fromsource buffer
szsize of string
tagtag to extract to
valvalue to extract to
Returns
number of bytes consumed

Definition at line 951 of file message.hpp.

References FIX8::default_assignment_separator(), FIX8::default_field_separator(), and FIX8::get_value().

952  {
953  enum { get_tag, get_value } state(get_tag);
954  tag.clear();
955  val.clear();
956 
957  for (unsigned ii(0); ii < sz; ++ii)
958  {
959  switch (state)
960  {
961  case get_tag:
962  if (!isdigit(from[ii]))
963  {
964  if (from[ii] != default_assignment_separator)
965  return 0;
966  state = get_value;
967  }
968  else
969  tag += from[ii];
970  break;
971  case get_value:
972  if (from[ii] == default_field_separator)
973  return ++ii;
974  val += from[ii];
975  break;
976  }
977  }
978  return 0;
979  }
const unsigned char default_assignment_separator('=')
default FIX assignment separator (=)
T get_value(const std::string &source)
Definition: f8utils.hpp:564
const unsigned char default_field_separator(0x1)
default FIX field separator (^A)
static unsigned FIX8::MessageBase::extract_element_fixed_width ( const char *  from,
const unsigned  sz,
const unsigned  val_sz,
char *  tag,
char *  val 
)
inlinestatic

Extract a tag and fixed width value element from a char buffer. ULL version.

Parameters
fromsource buffer
szsize of string
tagtag to extract to
val_szsize of value to be extracted, not including field separator
valvalue to extract to
Returns
number of bytes consumed

Definition at line 924 of file message.hpp.

References FIX8::default_assignment_separator().

925  {
926  *val = *tag = 0;
927  for (unsigned ii(0); ii < sz; ++ii)
928  {
929  if(isdigit(from[ii]))
930  {
931  *tag++ = from[ii];
932  continue;
933  }
934 
935  if (from[ii++] != default_assignment_separator || sz < (ii + val_sz))
936  break;
937 
938  ::memcpy(val, &from[ii], val_sz);
939  val[val_sz] = 0;
940  return ii + val_sz + 1; // account for field separator
941  }
942  return *val = *tag = 0;
943  }
const unsigned char default_assignment_separator('=')
default FIX assignment separator (=)
unsigned MessageBase::extract_header ( const f8String from,
char *  len,
char *  mtype 
)
staticprotected

Extract length and message type from a header buffer

Parameters
fromsource buffer
lenlength to extract to
mtypemessage type to extract to
Returns
number of bytes consumed

Definition at line 51 of file message.cpp.

References FIX8_MAX_FLD_LENGTH, and FIX8::MAX_MSGTYPE_FIELD_LEN().

52 {
53  const char *dptr(from.data());
54  const unsigned flen(static_cast<unsigned>(from.size()));
56  unsigned s_offset(0), result;
57 
58  if ((result = extract_element(dptr, flen, tag, val)))
59  {
60  if (*tag != '8')
61  return 0;
62  s_offset += result;
63  if ((result = extract_element(dptr + s_offset, flen - s_offset, tag, len)))
64  {
65  if (*tag != '9')
66  return 0;
67  s_offset += result;
68  if ((result = extract_element(dptr + s_offset, flen - s_offset, tag, mtype)))
69  {
70  if (*tag != '3' || *(tag + 1) != '5')
71  return 0;
72  s_offset += result;
73  }
74  }
75  }
76  return s_offset;
77 }
const size_t MAX_MSGTYPE_FIELD_LEN(32)
#define FIX8_MAX_FLD_LENGTH
Definition: f8config.h:571
static unsigned extract_element(const char *from, const unsigned sz, char *tag, char *val)
Definition: message.hpp:886
unsigned MessageBase::extract_trailer ( const f8String from,
f8String chksum 
)
staticprotected

Extract chksum from a trailer buffer

Parameters
fromsource buffer
chksumchksum to extract to
Returns
number of bytes consumed

Definition at line 80 of file message.cpp.

81 {
82  f8String tag;
83  return extract_element(from.data() + from.size() - 7, 6, tag, chksum);
84 }
static unsigned extract_element(const char *from, const unsigned sz, char *tag, char *val)
Definition: message.hpp:886
std::string f8String
Definition: f8types.hpp:47
Fields::const_iterator FIX8::MessageBase::fields_begin ( ) const
inline

Get an iterator to fields present in this message.

Returns
iterator to the first field or Fields::const_iterator::end

Definition at line 752 of file message.hpp.

752 { return _fields.begin(); }
Fields::const_iterator FIX8::MessageBase::fields_end ( ) const
inline

Get an iterator to fields present in this message.

Returns
iterator to the last field + 1

Definition at line 756 of file message.hpp.

756 { return _fields.end(); }
template<typename T >
GroupBase* FIX8::MessageBase::find_add_group ( GroupBase grpbase = nullptr)
inline

Find a group of a specified type. If not found attempt to add.

Template Parameters
Ttype of group to get
Parameters
grpbaseparent group (if group nested) or nullptr if no parent
Returns
pointer to found group or 0 if not found

Definition at line 808 of file message.hpp.

References find_add_group().

Referenced by find_add_group(), and MyMenu::generate_new_order_single_alternate().

808 { return find_add_group(T::_fnum, grpbase); }
GroupBase * find_add_group(GroupBase *grpbase=nullptr)
Definition: message.hpp:808
GroupBase* FIX8::MessageBase::find_add_group ( const unsigned short  fnum,
GroupBase grpbase = nullptr 
)
inline

Find a group of a specified type. If not found attempt to add.

Parameters
fnumfield number
grpbaseparent group (if group nested) or nullptr if no parent
Returns
pointer to found group or 0 if not found

Definition at line 814 of file message.hpp.

References add_group(), and create_nested_group().

815  {
816  auto gitr(_groups.find(fnum));
817  if (gitr != _groups.end())
818  return gitr->second;
819  GroupBase *gb1(grpbase ? grpbase->create_nested_group(fnum) : create_nested_group(fnum));
820  add_group(gb1);
821  return gb1;
822  }
virtual GroupBase * create_nested_group(unsigned short fnum) const
Definition: message.hpp:496
void add_group(GroupBase *what)
Definition: message.hpp:832
Fields::const_iterator FIX8::MessageBase::find_field ( const unsigned short  fnum) const
inline

Check if a field is present in this message.

Parameters
fnumfield number
Returns
iterator to field or Fields::const_iterator::end

Definition at line 730 of file message.hpp.

730 { return _fields.find(fnum); }
template<typename T >
GroupBase* FIX8::MessageBase::find_group ( ) const
inline

Find a group of a specified type.

Template Parameters
Ttype of group to get
Returns
pointer to found group or 0 if not found

Definition at line 792 of file message.hpp.

References find_group().

Referenced by copy_legal(), FIX8::ConsoleMenu::EditMsg(), find_group(), MyMenu::generate_new_order_single(), and move_legal().

792 { return find_group(T::_fnum); }
GroupBase * find_group() const
Definition: message.hpp:792
GroupBase* FIX8::MessageBase::find_group ( const unsigned short  fnum) const
inline

Find a group of a specified type.

Parameters
fnumfield number
Returns
pointer to found group or 0 if not found

Definition at line 797 of file message.hpp.

798  {
799  auto gitr(_groups.find(fnum));
800  return gitr != _groups.cend() ? gitr->second : nullptr;
801  }
template<typename T >
bool FIX8::MessageBase::get ( T &  to) const
inline

Populate supplied field with value from message.

Template Parameters
Ttype of field to get
Parameters
tofield to populate
Returns
true on success

Definition at line 671 of file message.hpp.

Referenced by FIX8::Session::compid_check(), FIX8::Session::handle_logon(), FIX8::Session::handle_resend_request(), FIX8::Session::handle_sequence_reset(), FIX8::Session::handle_test_request(), MyMenu::load_msgs(), tex_router_server::operator()(), FIX8::Session::send_process(), and FIX8::Session::sequence_check().

672  {
673  Fields::const_iterator fitr(_fields.find(T::get_field_id()));
674  if (fitr == _fields.end())
675  return false;
676  to.set(fitr->second->from<T>().get());
677  if (fitr->second->_rlm)
678  to._rlm = fitr->second->_rlm;
679  return true;
680  }
template<typename T >
const T* FIX8::MessageBase::get ( ) const
inline

Get a pointer to a field. Inplace, 0 copy.

Template Parameters
Ttype of field to get
Returns
pointer to field or 0 if not present

Definition at line 703 of file message.hpp.

704  {
705  Fields::const_iterator fitr(_fields.find(T::get_field_id()));
706  return fitr == _fields.cend() ? nullptr : &fitr->second->from<T>();
707  }
virtual begin_string* FIX8::MessageBase::get_begin_string ( )
inlinevirtual

Get pointer to begin_string Field; used by header/trailer.

Returns
Field

Reimplemented in FIX8::TEX::header, and FIX8::TEX::header.

Definition at line 1007 of file message.hpp.

1007 { return nullptr; }
virtual body_length* FIX8::MessageBase::get_body_length ( )
inlinevirtual

Get pointer to body_length Field; used by header/trailer.

Returns
Field

Reimplemented in FIX8::TEX::header, and FIX8::TEX::header.

Definition at line 1011 of file message.hpp.

1011 { return nullptr; }
virtual check_sum* FIX8::MessageBase::get_check_sum ( )
inlinevirtual

Get pointer to check_sum Field; used by header/trailer.

Returns
Field

Reimplemented in FIX8::TEX::trailer, and FIX8::TEX::trailer.

Definition at line 1019 of file message.hpp.

1019 { return nullptr; }
BaseField* FIX8::MessageBase::get_field ( const unsigned short  fnum) const
inline

Search for field in this message.

Parameters
fnumfield number
Returns
pointer to field or 0 if not found

Definition at line 735 of file message.hpp.

736  {
737  auto itr(_fields.find(fnum));
738  return itr != _fields.cend() ? itr->second : nullptr;
739  }
BaseField* FIX8::MessageBase::get_field_by_name ( const char *  tag) const
inline

Search for field by longname in this message.

Parameters
tagfield longname
Returns
pointer to field or 0 if not found

Definition at line 744 of file message.hpp.

References FIX8::F8MetaCntx::reverse_find_fnum().

745  {
746  auto itr(_fields.find(_ctx.reverse_find_fnum(tag)));
747  return itr != _fields.cend() ? itr->second : nullptr;
748  }
const F8MetaCntx & _ctx
Definition: message.hpp:392
unsigned short reverse_find_fnum(const char *fieldstr) const
Definition: message.hpp:286
const FieldTraits& FIX8::MessageBase::get_fp ( ) const
inline

Get the FieldTraits

Returns
reference to FieldTraits object

Definition at line 878 of file message.hpp.

References _fp.

Referenced by FIX8::ConsoleMenu::EditMsg(), and FIX8::ConsoleMenu::SelectField().

878 { return _fp; }
FieldTraits _fp
Definition: message.hpp:388
Groups& FIX8::MessageBase::get_groups ( )
inline

Definition at line 650 of file message.hpp.

References _groups.

Referenced by FIX8::TEX::IOI::NoPartyIDs::create_group(), FIX8::TEX::IOI::NoLegs::create_group(), FIX8::TEX::IOI::NoUnderlyings::create_group(), FIX8::TEX::IOI::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::IOI::NoInstrumentParties::create_group(), FIX8::TEX::IOI::NoComplexEvents::create_group(), FIX8::TEX::IOI::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::Advertisement::NoLegs::create_group(), FIX8::TEX::Advertisement::NoUnderlyings::create_group(), FIX8::TEX::Advertisement::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::Advertisement::NoInstrumentParties::create_group(), FIX8::TEX::Advertisement::NoComplexEvents::create_group(), FIX8::TEX::Advertisement::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::ExecutionReport::NoAllocs::create_group(), FIX8::TEX::ExecutionReport::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::ExecutionReport::NoPartyIDs::create_group(), FIX8::TEX::ExecutionReport::NoLegs::create_group(), FIX8::TEX::ExecutionReport::NoLegs::NoLegAllocs::create_group(), FIX8::TEX::ExecutionReport::NoLegs::NoLegAllocs::NoNested2PartyIDs::create_group(), FIX8::TEX::ExecutionReport::NoLegs::NoNested3PartyIDs::create_group(), FIX8::TEX::ExecutionReport::NoUnderlyings::create_group(), FIX8::TEX::ExecutionReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::ExecutionReport::NoInstrumentParties::create_group(), FIX8::TEX::ExecutionReport::NoFills::create_group(), FIX8::TEX::ExecutionReport::NoFills::NoNested4PartyIDs::create_group(), FIX8::TEX::ExecutionReport::NoComplexEvents::create_group(), FIX8::TEX::ExecutionReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::DerivativeSecurityList::NoRelatedSym::create_group(), FIX8::TEX::DerivativeSecurityList::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::DerivativeSecurityList::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::DerivativeSecurityList::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::DerivativeSecurityList::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::DerivativeSecurityList::NoUndlyInstrumentParties::create_group(), FIX8::TEX::DerivativeSecurityList::NoDerivativeInstrumentParties::create_group(), FIX8::TEX::DerivativeSecurityList::NoMarketSegments::create_group(), FIX8::TEX::DerivativeSecurityList::NoMarketSegments::NoStrikeRules::create_group(), FIX8::TEX::DerivativeSecurityList::NoMarketSegments::NoTradingSessionRules::create_group(), FIX8::TEX::NewOrderMultileg::NoAllocs::create_group(), FIX8::TEX::NewOrderMultileg::NoAllocs::NoNested3PartyIDs::create_group(), FIX8::TEX::NewOrderMultileg::NoPartyIDs::create_group(), FIX8::TEX::NewOrderMultileg::NoLegs::create_group(), FIX8::TEX::NewOrderMultileg::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::NewOrderMultileg::NoLegs::NoLegAllocs::create_group(), FIX8::TEX::NewOrderMultileg::NoLegs::NoLegAllocs::NoNested2PartyIDs::create_group(), FIX8::TEX::NewOrderMultileg::NoUnderlyings::create_group(), FIX8::TEX::NewOrderMultileg::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::NewOrderMultileg::NoInstrumentParties::create_group(), FIX8::TEX::NewOrderMultileg::NoComplexEvents::create_group(), FIX8::TEX::NewOrderMultileg::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoAllocs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoAllocs::NoNested3PartyIDs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoPartyIDs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoLegs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoLegs::NoLegAllocs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoLegs::NoLegAllocs::NoNested2PartyIDs::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoUnderlyings::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoInstrumentParties::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoComplexEvents::create_group(), FIX8::TEX::MultilegOrderCancelReplace::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoPartyIDs::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoLegs::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoUnderlyings::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoComplexEvents::create_group(), FIX8::TEX::TradeCaptureReportRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::TradeCaptureReport::NoSides::create_group(), FIX8::TEX::TradeCaptureReport::NoSides::NoAllocs::create_group(), FIX8::TEX::TradeCaptureReport::NoSides::NoAllocs::NoNested2PartyIDs::create_group(), FIX8::TEX::TradeCaptureReport::NoSides::NoPartyIDs::create_group(), FIX8::TEX::TradeCaptureReport::NoSides::NoSettlDetails::create_group(), FIX8::TEX::TradeCaptureReport::NoSides::NoSettlDetails::NoSettlPartyIDs::create_group(), FIX8::TEX::TradeCaptureReport::NoLegs::create_group(), FIX8::TEX::TradeCaptureReport::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::TradeCaptureReport::NoLegs::NoOfLegUnderlyings::create_group(), FIX8::TEX::TradeCaptureReport::NoUnderlyings::create_group(), FIX8::TEX::TradeCaptureReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReport::NoInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReport::NoRootPartyIDs::create_group(), FIX8::TEX::TradeCaptureReport::NoComplexEvents::create_group(), FIX8::TEX::TradeCaptureReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::OrderMassStatusRequest::NoPartyIDs::create_group(), FIX8::TEX::OrderMassStatusRequest::NoInstrumentParties::create_group(), FIX8::TEX::OrderMassStatusRequest::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderMassStatusRequest::NoComplexEvents::create_group(), FIX8::TEX::OrderMassStatusRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoPartyIDs::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoUnderlyings::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::QuoteRequestReject::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::QuoteRequestReject::NoRootPartyIDs::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::NoUnderlyings::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::RFQRequest::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::RFQRequest::NoPartyIDs::create_group(), FIX8::TEX::QuoteStatusReport::NoPartyIDs::create_group(), FIX8::TEX::QuoteStatusReport::NoLegs::create_group(), FIX8::TEX::QuoteStatusReport::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::QuoteStatusReport::NoUnderlyings::create_group(), FIX8::TEX::QuoteStatusReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::QuoteStatusReport::NoInstrumentParties::create_group(), FIX8::TEX::QuoteStatusReport::NoComplexEvents::create_group(), FIX8::TEX::QuoteStatusReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::QuoteResponse::NoPartyIDs::create_group(), FIX8::TEX::QuoteResponse::NoLegs::create_group(), FIX8::TEX::QuoteResponse::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::QuoteResponse::NoUnderlyings::create_group(), FIX8::TEX::QuoteResponse::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::QuoteResponse::NoInstrumentParties::create_group(), FIX8::TEX::QuoteResponse::NoComplexEvents::create_group(), FIX8::TEX::QuoteResponse::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::Confirmation::NoOrders::create_group(), FIX8::TEX::Confirmation::NoOrders::NoNested2PartyIDs::create_group(), FIX8::TEX::Confirmation::NoDlvyInst::create_group(), FIX8::TEX::Confirmation::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::Confirmation::NoPartyIDs::create_group(), FIX8::TEX::Confirmation::NoLegs::create_group(), FIX8::TEX::Confirmation::NoUnderlyings::create_group(), FIX8::TEX::Confirmation::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::Confirmation::NoInstrumentParties::create_group(), FIX8::TEX::Confirmation::NoComplexEvents::create_group(), FIX8::TEX::Confirmation::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoPartyIDs::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoLegs::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoPositions::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoPositions::NoNestedPartyIDs::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoUnderlyings::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoInstrumentParties::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoComplexEvents::create_group(), FIX8::TEX::PositionMaintenanceRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::PositionMaintenanceReport::NoPartyIDs::create_group(), FIX8::TEX::PositionMaintenanceReport::NoLegs::create_group(), FIX8::TEX::PositionMaintenanceReport::NoPositions::create_group(), FIX8::TEX::PositionMaintenanceReport::NoPositions::NoNestedPartyIDs::create_group(), FIX8::TEX::PositionMaintenanceReport::NoUnderlyings::create_group(), FIX8::TEX::PositionMaintenanceReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::PositionMaintenanceReport::NoInstrumentParties::create_group(), FIX8::TEX::PositionMaintenanceReport::NoComplexEvents::create_group(), FIX8::TEX::PositionMaintenanceReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::RequestForPositions::NoPartyIDs::create_group(), FIX8::TEX::RequestForPositions::NoLegs::create_group(), FIX8::TEX::RequestForPositions::NoUnderlyings::create_group(), FIX8::TEX::RequestForPositions::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::RequestForPositions::NoInstrumentParties::create_group(), FIX8::TEX::RequestForPositions::NoComplexEvents::create_group(), FIX8::TEX::RequestForPositions::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::RequestForPositionsAck::NoPartyIDs::create_group(), FIX8::TEX::RequestForPositionsAck::NoLegs::create_group(), FIX8::TEX::RequestForPositionsAck::NoUnderlyings::create_group(), FIX8::TEX::RequestForPositionsAck::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::RequestForPositionsAck::NoInstrumentParties::create_group(), FIX8::TEX::RequestForPositionsAck::NoComplexEvents::create_group(), FIX8::TEX::RequestForPositionsAck::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::PositionReport::NoPartyIDs::create_group(), FIX8::TEX::PositionReport::NoLegs::create_group(), FIX8::TEX::PositionReport::NoPositions::create_group(), FIX8::TEX::PositionReport::NoPositions::NoNestedPartyIDs::create_group(), FIX8::TEX::PositionReport::NoUnderlyings::create_group(), FIX8::TEX::PositionReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::PositionReport::NoInstrumentParties::create_group(), FIX8::TEX::PositionReport::NoComplexEvents::create_group(), FIX8::TEX::PositionReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::TradeCaptureReportRequestAck::NoLegs::create_group(), FIX8::TEX::TradeCaptureReportRequestAck::NoUnderlyings::create_group(), FIX8::TEX::TradeCaptureReportRequestAck::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReportRequestAck::NoInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReportRequestAck::NoComplexEvents::create_group(), FIX8::TEX::TradeCaptureReportRequestAck::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::TradeCaptureReportAck::NoSides::create_group(), FIX8::TEX::TradeCaptureReportAck::NoSides::NoAllocs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoSides::NoAllocs::NoNested2PartyIDs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoSides::NoPartyIDs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoSides::NoSettlDetails::create_group(), FIX8::TEX::TradeCaptureReportAck::NoSides::NoSettlDetails::NoSettlPartyIDs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoLegs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoLegs::NoOfLegUnderlyings::create_group(), FIX8::TEX::TradeCaptureReportAck::NoUnderlyings::create_group(), FIX8::TEX::TradeCaptureReportAck::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReportAck::NoInstrumentParties::create_group(), FIX8::TEX::TradeCaptureReportAck::NoRootPartyIDs::create_group(), FIX8::TEX::TradeCaptureReportAck::NoComplexEvents::create_group(), FIX8::TEX::TradeCaptureReportAck::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::AllocationReport::NoOrders::create_group(), FIX8::TEX::AllocationReport::NoOrders::NoNested2PartyIDs::create_group(), FIX8::TEX::AllocationReport::NoAllocs::create_group(), FIX8::TEX::AllocationReport::NoAllocs::NoDlvyInst::create_group(), FIX8::TEX::AllocationReport::NoAllocs::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::AllocationReport::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::AllocationReport::NoPartyIDs::create_group(), FIX8::TEX::AllocationReport::NoLegs::create_group(), FIX8::TEX::AllocationReport::NoUnderlyings::create_group(), FIX8::TEX::AllocationReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::AllocationReport::NoInstrumentParties::create_group(), FIX8::TEX::AllocationReport::NoComplexEvents::create_group(), FIX8::TEX::AllocationReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::AllocationReportAck::NoAllocs::create_group(), FIX8::TEX::AllocationReportAck::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::AllocationReportAck::NoPartyIDs::create_group(), FIX8::TEX::SettlementInstructionRequest::NoPartyIDs::create_group(), FIX8::TEX::AssignmentReport::NoPartyIDs::create_group(), FIX8::TEX::AssignmentReport::NoLegs::create_group(), FIX8::TEX::AssignmentReport::NoPositions::create_group(), FIX8::TEX::AssignmentReport::NoPositions::NoNestedPartyIDs::create_group(), FIX8::TEX::AssignmentReport::NoUnderlyings::create_group(), FIX8::TEX::AssignmentReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::AssignmentReport::NoInstrumentParties::create_group(), FIX8::TEX::AssignmentReport::NoComplexEvents::create_group(), FIX8::TEX::AssignmentReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CollateralRequest::NoPartyIDs::create_group(), FIX8::TEX::CollateralRequest::NoLegs::create_group(), FIX8::TEX::CollateralRequest::NoUnderlyings::create_group(), FIX8::TEX::CollateralRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralRequest::NoInstrumentParties::create_group(), FIX8::TEX::CollateralRequest::NoComplexEvents::create_group(), FIX8::TEX::CollateralRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CollateralAssignment::NoDlvyInst::create_group(), FIX8::TEX::CollateralAssignment::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::CollateralAssignment::NoPartyIDs::create_group(), FIX8::TEX::CollateralAssignment::NoLegs::create_group(), FIX8::TEX::CollateralAssignment::NoUnderlyings::create_group(), FIX8::TEX::CollateralAssignment::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralAssignment::NoInstrumentParties::create_group(), FIX8::TEX::CollateralAssignment::NoComplexEvents::create_group(), FIX8::TEX::CollateralAssignment::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CollateralResponse::NoPartyIDs::create_group(), FIX8::TEX::CollateralResponse::NoLegs::create_group(), FIX8::TEX::CollateralResponse::NoUnderlyings::create_group(), FIX8::TEX::CollateralResponse::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralResponse::NoInstrumentParties::create_group(), FIX8::TEX::CollateralResponse::NoComplexEvents::create_group(), FIX8::TEX::CollateralResponse::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::News::NoRelatedSym::create_group(), FIX8::TEX::News::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::News::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::News::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::News::NoLegs::create_group(), FIX8::TEX::News::NoUnderlyings::create_group(), FIX8::TEX::News::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralReport::NoDlvyInst::create_group(), FIX8::TEX::CollateralReport::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::CollateralReport::NoPartyIDs::create_group(), FIX8::TEX::CollateralReport::NoLegs::create_group(), FIX8::TEX::CollateralReport::NoUnderlyings::create_group(), FIX8::TEX::CollateralReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralReport::NoInstrumentParties::create_group(), FIX8::TEX::CollateralReport::NoComplexEvents::create_group(), FIX8::TEX::CollateralReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CollateralInquiry::NoDlvyInst::create_group(), FIX8::TEX::CollateralInquiry::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::CollateralInquiry::NoPartyIDs::create_group(), FIX8::TEX::CollateralInquiry::NoLegs::create_group(), FIX8::TEX::CollateralInquiry::NoUnderlyings::create_group(), FIX8::TEX::CollateralInquiry::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralInquiry::NoInstrumentParties::create_group(), FIX8::TEX::CollateralInquiry::NoComplexEvents::create_group(), FIX8::TEX::CollateralInquiry::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CollateralInquiryAck::NoPartyIDs::create_group(), FIX8::TEX::CollateralInquiryAck::NoLegs::create_group(), FIX8::TEX::CollateralInquiryAck::NoUnderlyings::create_group(), FIX8::TEX::CollateralInquiryAck::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CollateralInquiryAck::NoInstrumentParties::create_group(), FIX8::TEX::CollateralInquiryAck::NoComplexEvents::create_group(), FIX8::TEX::CollateralInquiryAck::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::ConfirmationRequest::NoOrders::create_group(), FIX8::TEX::ConfirmationRequest::NoOrders::NoNested2PartyIDs::create_group(), FIX8::TEX::TradingSessionList::NoTradingSessions::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoUnderlyings::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoStrikeRules::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoTradingSessionRules::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::SecurityListUpdateReport::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::AdjustedPositionReport::NoRelatedSym::create_group(), FIX8::TEX::AdjustedPositionReport::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::AdjustedPositionReport::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::AdjustedPositionReport::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::AdjustedPositionReport::NoPartyIDs::create_group(), FIX8::TEX::AdjustedPositionReport::NoPositions::create_group(), FIX8::TEX::AdjustedPositionReport::NoPositions::NoNestedPartyIDs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoOrders::create_group(), FIX8::TEX::AllocationInstructionAlert::NoOrders::NoNested2PartyIDs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoAllocs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoAllocs::NoDlvyInst::create_group(), FIX8::TEX::AllocationInstructionAlert::NoAllocs::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoPartyIDs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoLegs::create_group(), FIX8::TEX::AllocationInstructionAlert::NoUnderlyings::create_group(), FIX8::TEX::AllocationInstructionAlert::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::AllocationInstructionAlert::NoInstrumentParties::create_group(), FIX8::TEX::AllocationInstructionAlert::NoComplexEvents::create_group(), FIX8::TEX::AllocationInstructionAlert::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::ExecutionAcknowledgement::NoLegs::create_group(), FIX8::TEX::ExecutionAcknowledgement::NoUnderlyings::create_group(), FIX8::TEX::ExecutionAcknowledgement::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::ExecutionAcknowledgement::NoInstrumentParties::create_group(), FIX8::TEX::ExecutionAcknowledgement::NoComplexEvents::create_group(), FIX8::TEX::ExecutionAcknowledgement::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::ContraryIntentionReport::NoPartyIDs::create_group(), FIX8::TEX::ContraryIntentionReport::NoUnderlyings::create_group(), FIX8::TEX::ContraryIntentionReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::ContraryIntentionReport::NoInstrumentParties::create_group(), FIX8::TEX::ContraryIntentionReport::NoComplexEvents::create_group(), FIX8::TEX::ContraryIntentionReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoLegs::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoUnderlyings::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoInstrumentParties::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoMarketSegments::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoMarketSegments::NoStrikeRules::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoMarketSegments::NoTradingSessionRules::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoComplexEvents::create_group(), FIX8::TEX::SecurityDefinitionUpdateReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::NoPartyIDs::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::NoInstrumentParties::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::NoSettlDetails::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::NoSettlDetails::NoSettlPartyIDs::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::NoComplexEvents::create_group(), FIX8::TEX::SettlementObligationReport::NoSettlOblig::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoRelatedSym::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoUndlyInstrumentParties::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoDerivativeInstrumentParties::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoMarketSegments::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoMarketSegments::NoStrikeRules::create_group(), FIX8::TEX::DerivativeSecurityListUpdateReport::NoMarketSegments::NoTradingSessionRules::create_group(), FIX8::TEX::TradingSessionListUpdateReport::NoTradingSessions::create_group(), FIX8::TEX::ApplicationMessageRequest::NoPartyIDs::create_group(), FIX8::TEX::ApplicationMessageRequest::NoApplIDs::create_group(), FIX8::TEX::ApplicationMessageRequest::NoApplIDs::NoNestedPartyIDs::create_group(), FIX8::TEX::ApplicationMessageRequestAck::NoPartyIDs::create_group(), FIX8::TEX::ApplicationMessageRequestAck::NoApplIDs::create_group(), FIX8::TEX::ApplicationMessageRequestAck::NoApplIDs::NoNestedPartyIDs::create_group(), FIX8::TEX::OrderMassActionReport::NoPartyIDs::create_group(), FIX8::TEX::OrderMassActionReport::NoInstrumentParties::create_group(), FIX8::TEX::OrderMassActionReport::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderMassActionReport::NoComplexEvents::create_group(), FIX8::TEX::OrderMassActionReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::Email::NoRelatedSym::create_group(), FIX8::TEX::Email::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::Email::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::Email::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::Email::NoLegs::create_group(), FIX8::TEX::Email::NoUnderlyings::create_group(), FIX8::TEX::Email::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderMassActionRequest::NoPartyIDs::create_group(), FIX8::TEX::OrderMassActionRequest::NoInstrumentParties::create_group(), FIX8::TEX::OrderMassActionRequest::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderMassActionRequest::NoComplexEvents::create_group(), FIX8::TEX::OrderMassActionRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::StreamAssignmentRequest::NoAsgnReqs::create_group(), FIX8::TEX::StreamAssignmentRequest::NoAsgnReqs::NoRelatedSym::create_group(), FIX8::TEX::StreamAssignmentRequest::NoAsgnReqs::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::StreamAssignmentRequest::NoAsgnReqs::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::StreamAssignmentRequest::NoAsgnReqs::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::StreamAssignmentRequest::NoAsgnReqs::NoPartyIDs::create_group(), FIX8::TEX::StreamAssignmentReport::NoAsgnReqs::create_group(), FIX8::TEX::StreamAssignmentReport::NoAsgnReqs::NoRelatedSym::create_group(), FIX8::TEX::StreamAssignmentReport::NoAsgnReqs::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::StreamAssignmentReport::NoAsgnReqs::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::StreamAssignmentReport::NoAsgnReqs::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::StreamAssignmentReport::NoAsgnReqs::NoPartyIDs::create_group(), FIX8::TEX::PartyDetailsListRequest::NoPartyIDs::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoPartyAltIDs::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoContextPartyIDs::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRiskLimits::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRiskLimits::NoRiskInstruments::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRelatedPartyIDs::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRelatedPartyIDs::NoRelatedPartyAltIDs::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRelatedPartyIDs::NoRelatedContextPartyIDs::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRelatedPartyIDs::NoRelationshipRiskLimits::create_group(), FIX8::TEX::PartyDetailsListReport::NoPartyList::NoRelatedPartyIDs::NoRelationshipRiskLimits::NoRelationshipRiskInstruments::create_group(), FIX8::TEX::NewOrderSingle::NoAllocs::create_group(), FIX8::TEX::NewOrderSingle::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::NewOrderSingle::NoPartyIDs::create_group(), FIX8::TEX::NewOrderSingle::NoUnderlyings::create_group(), FIX8::TEX::NewOrderSingle::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::NewOrderSingle::NoInstrumentParties::create_group(), FIX8::TEX::NewOrderSingle::NoComplexEvents::create_group(), FIX8::TEX::NewOrderSingle::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::NewOrderList::NoOrders::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoAllocs::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoPartyIDs::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoUnderlyings::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoInstrumentParties::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoComplexEvents::create_group(), FIX8::TEX::NewOrderList::NoOrders::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::NewOrderList::NoRootPartyIDs::create_group(), FIX8::TEX::OrderCancelRequest::NoPartyIDs::create_group(), FIX8::TEX::OrderCancelRequest::NoUnderlyings::create_group(), FIX8::TEX::OrderCancelRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderCancelRequest::NoInstrumentParties::create_group(), FIX8::TEX::OrderCancelRequest::NoComplexEvents::create_group(), FIX8::TEX::OrderCancelRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoAllocs::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoPartyIDs::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoUnderlyings::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoInstrumentParties::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoComplexEvents::create_group(), FIX8::TEX::OrderCancelReplaceRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::OrderStatusRequest::NoPartyIDs::create_group(), FIX8::TEX::OrderStatusRequest::NoUnderlyings::create_group(), FIX8::TEX::OrderStatusRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderStatusRequest::NoInstrumentParties::create_group(), FIX8::TEX::OrderStatusRequest::NoComplexEvents::create_group(), FIX8::TEX::OrderStatusRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::AllocationInstruction::NoOrders::create_group(), FIX8::TEX::AllocationInstruction::NoOrders::NoNested2PartyIDs::create_group(), FIX8::TEX::AllocationInstruction::NoAllocs::create_group(), FIX8::TEX::AllocationInstruction::NoAllocs::NoDlvyInst::create_group(), FIX8::TEX::AllocationInstruction::NoAllocs::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::AllocationInstruction::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::AllocationInstruction::NoPartyIDs::create_group(), FIX8::TEX::AllocationInstruction::NoLegs::create_group(), FIX8::TEX::AllocationInstruction::NoUnderlyings::create_group(), FIX8::TEX::AllocationInstruction::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::AllocationInstruction::NoInstrumentParties::create_group(), FIX8::TEX::AllocationInstruction::NoComplexEvents::create_group(), FIX8::TEX::AllocationInstruction::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::ListCancelRequest::NoPartyIDs::create_group(), FIX8::TEX::AllocationInstructionAck::NoAllocs::create_group(), FIX8::TEX::AllocationInstructionAck::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::AllocationInstructionAck::NoPartyIDs::create_group(), FIX8::TEX::DontKnowTrade::NoLegs::create_group(), FIX8::TEX::DontKnowTrade::NoUnderlyings::create_group(), FIX8::TEX::DontKnowTrade::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::DontKnowTrade::NoInstrumentParties::create_group(), FIX8::TEX::DontKnowTrade::NoComplexEvents::create_group(), FIX8::TEX::DontKnowTrade::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoPartyIDs::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoUnderlyings::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::QuoteRequest::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::QuoteRequest::NoRootPartyIDs::create_group(), FIX8::TEX::Quote::NoPartyIDs::create_group(), FIX8::TEX::Quote::NoLegs::create_group(), FIX8::TEX::Quote::NoLegs::NoNestedPartyIDs::create_group(), FIX8::TEX::Quote::NoUnderlyings::create_group(), FIX8::TEX::Quote::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::Quote::NoInstrumentParties::create_group(), FIX8::TEX::Quote::NoComplexEvents::create_group(), FIX8::TEX::Quote::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SettlementInstructions::NoSettlInst::create_group(), FIX8::TEX::SettlementInstructions::NoSettlInst::NoDlvyInst::create_group(), FIX8::TEX::SettlementInstructions::NoSettlInst::NoDlvyInst::NoSettlPartyIDs::create_group(), FIX8::TEX::SettlementInstructions::NoSettlInst::NoPartyIDs::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::NoUnderlyings::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::MarketDataRequest::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MarketDataRequest::NoPartyIDs::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoMDEntries::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoMDEntries::NoPartyIDs::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoLegs::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoUnderlyings::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoInstrumentParties::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoComplexEvents::create_group(), FIX8::TEX::MarketDataSnapshotFullRefresh::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoPartyIDs::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoLegs::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoUnderlyings::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoInstrumentParties::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoComplexEvents::create_group(), FIX8::TEX::MarketDataIncrementalRefresh::NoMDEntries::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MarketDataRequestReject::NoPartyIDs::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::NoLegs::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::NoUnderlyings::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::NoInstrumentParties::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::NoComplexEvents::create_group(), FIX8::TEX::QuoteCancel::NoQuoteEntries::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::QuoteCancel::NoPartyIDs::create_group(), FIX8::TEX::QuoteStatusRequest::NoPartyIDs::create_group(), FIX8::TEX::QuoteStatusRequest::NoLegs::create_group(), FIX8::TEX::QuoteStatusRequest::NoUnderlyings::create_group(), FIX8::TEX::QuoteStatusRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::QuoteStatusRequest::NoInstrumentParties::create_group(), FIX8::TEX::QuoteStatusRequest::NoComplexEvents::create_group(), FIX8::TEX::QuoteStatusRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::NoQuoteEntries::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::NoQuoteEntries::NoLegs::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::NoQuoteEntries::NoInstrumentParties::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::NoQuoteEntries::NoComplexEvents::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::NoQuoteEntries::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoQuoteSets::NoUndlyInstrumentParties::create_group(), FIX8::TEX::MassQuoteAcknowledgement::NoPartyIDs::create_group(), FIX8::TEX::SecurityDefinitionRequest::NoLegs::create_group(), FIX8::TEX::SecurityDefinitionRequest::NoUnderlyings::create_group(), FIX8::TEX::SecurityDefinitionRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityDefinitionRequest::NoInstrumentParties::create_group(), FIX8::TEX::SecurityDefinitionRequest::NoComplexEvents::create_group(), FIX8::TEX::SecurityDefinitionRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SecurityDefinition::NoLegs::create_group(), FIX8::TEX::SecurityDefinition::NoUnderlyings::create_group(), FIX8::TEX::SecurityDefinition::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityDefinition::NoInstrumentParties::create_group(), FIX8::TEX::SecurityDefinition::NoMarketSegments::create_group(), FIX8::TEX::SecurityDefinition::NoMarketSegments::NoStrikeRules::create_group(), FIX8::TEX::SecurityDefinition::NoMarketSegments::NoTradingSessionRules::create_group(), FIX8::TEX::SecurityDefinition::NoComplexEvents::create_group(), FIX8::TEX::SecurityDefinition::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SecurityStatusRequest::NoLegs::create_group(), FIX8::TEX::SecurityStatusRequest::NoUnderlyings::create_group(), FIX8::TEX::SecurityStatusRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityStatusRequest::NoInstrumentParties::create_group(), FIX8::TEX::SecurityStatusRequest::NoComplexEvents::create_group(), FIX8::TEX::SecurityStatusRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SecurityStatus::NoLegs::create_group(), FIX8::TEX::SecurityStatus::NoUnderlyings::create_group(), FIX8::TEX::SecurityStatus::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityStatus::NoInstrumentParties::create_group(), FIX8::TEX::SecurityStatus::NoComplexEvents::create_group(), FIX8::TEX::SecurityStatus::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::TradingSessionStatus::NoInstrumentParties::create_group(), FIX8::TEX::TradingSessionStatus::NoComplexEvents::create_group(), FIX8::TEX::TradingSessionStatus::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::NoQuoteEntries::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::NoQuoteEntries::NoLegs::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::NoQuoteEntries::NoInstrumentParties::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::NoQuoteEntries::NoComplexEvents::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::NoQuoteEntries::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::MassQuote::NoQuoteSets::NoUndlyInstrumentParties::create_group(), FIX8::TEX::MassQuote::NoPartyIDs::create_group(), FIX8::TEX::ListStrikePrice::NoStrikes::create_group(), FIX8::TEX::ListStrikePrice::NoStrikes::NoUnderlyings::create_group(), FIX8::TEX::ListStrikePrice::NoStrikes::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::ListStrikePrice::NoStrikes::NoInstrumentParties::create_group(), FIX8::TEX::ListStrikePrice::NoStrikes::NoComplexEvents::create_group(), FIX8::TEX::ListStrikePrice::NoStrikes::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::RegistrationInstructions::NoPartyIDs::create_group(), FIX8::TEX::RegistrationInstructions::NoRegistDtls::create_group(), FIX8::TEX::RegistrationInstructions::NoRegistDtls::NoNestedPartyIDs::create_group(), FIX8::TEX::RegistrationInstructionsResponse::NoPartyIDs::create_group(), FIX8::TEX::OrderMassCancelRequest::NoPartyIDs::create_group(), FIX8::TEX::OrderMassCancelRequest::NoInstrumentParties::create_group(), FIX8::TEX::OrderMassCancelRequest::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderMassCancelRequest::NoComplexEvents::create_group(), FIX8::TEX::OrderMassCancelRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::OrderMassCancelReport::NoPartyIDs::create_group(), FIX8::TEX::OrderMassCancelReport::NoInstrumentParties::create_group(), FIX8::TEX::OrderMassCancelReport::NoUndlyInstrumentParties::create_group(), FIX8::TEX::OrderMassCancelReport::NoComplexEvents::create_group(), FIX8::TEX::OrderMassCancelReport::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::NewOrderCross::NoSides::create_group(), FIX8::TEX::NewOrderCross::NoSides::NoAllocs::create_group(), FIX8::TEX::NewOrderCross::NoSides::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::NewOrderCross::NoSides::NoPartyIDs::create_group(), FIX8::TEX::NewOrderCross::NoLegs::create_group(), FIX8::TEX::NewOrderCross::NoUnderlyings::create_group(), FIX8::TEX::NewOrderCross::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::NewOrderCross::NoInstrumentParties::create_group(), FIX8::TEX::NewOrderCross::NoRootPartyIDs::create_group(), FIX8::TEX::NewOrderCross::NoComplexEvents::create_group(), FIX8::TEX::NewOrderCross::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoSides::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoSides::NoAllocs::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoSides::NoAllocs::NoNestedPartyIDs::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoSides::NoPartyIDs::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoLegs::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoUnderlyings::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoInstrumentParties::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoRootPartyIDs::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoComplexEvents::create_group(), FIX8::TEX::CrossOrderCancelReplaceRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoSides::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoSides::NoPartyIDs::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoLegs::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoUnderlyings::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoInstrumentParties::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoRootPartyIDs::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoComplexEvents::create_group(), FIX8::TEX::CrossOrderCancelRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SecurityListRequest::NoLegs::create_group(), FIX8::TEX::SecurityListRequest::NoUnderlyings::create_group(), FIX8::TEX::SecurityListRequest::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityListRequest::NoInstrumentParties::create_group(), FIX8::TEX::SecurityListRequest::NoComplexEvents::create_group(), FIX8::TEX::SecurityListRequest::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoLegs::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoUnderlyings::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoUnderlyings::NoUndlyInstrumentParties::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoInstrumentParties::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoStrikeRules::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoTradingSessionRules::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoComplexEvents::create_group(), FIX8::TEX::SecurityList::NoRelatedSym::NoComplexEvents::NoComplexEventDates::create_group(), FIX8::TEX::DerivativeSecurityListRequest::NoUndlyInstrumentParties::create_group(), and FIX8::TEX::DerivativeSecurityListRequest::NoDerivativeInstrumentParties::create_group().

650 { return _groups; }
virtual msg_type* FIX8::MessageBase::get_msg_type ( )
inlinevirtual

Get pointer to msg_type Field; used by header/trailer.

Returns
Field

Reimplemented in FIX8::TEX::header, and FIX8::TEX::header.

Definition at line 1015 of file message.hpp.

1015 { return nullptr; }
const f8String& FIX8::MessageBase::get_msgtype ( ) const
inline

Get the message type as a string.

Returns
the Fix message type as a string

Definition at line 538 of file message.hpp.

References _msgType.

Referenced by FIX8::Session::enforce(), FIX8::Session::generate_business_reject(), FIX8::Session::handle_logon(), FIX8::Session::handle_outbound_reject(), FIX8::Session::process(), and FIX8::ConsoleMenu::SelectField().

538 { return _msgType; }
const f8String & _msgType
Definition: message.hpp:391
static unsigned FIX8::MessageBase::get_tabsize ( )
inlinestatic

get the tabsize used by the printer

Returns
tabsize of spaces in a tab

Definition at line 994 of file message.hpp.

References _tabsize.

994 { return _tabsize; }
static F8API unsigned _tabsize
Definition: message.hpp:408
const f8String& FIX8::MessageBase::get_unknown ( ) const
inline

Get pass through fields (permissive mode only)

Returns
string of unknown pass through fields

Definition at line 1023 of file message.hpp.

References _unknown.

1023 { return _unknown; }
f8String _unknown
pass through for permissive mode
Definition: message.hpp:384
unsigned short FIX8::MessageBase::getPos ( const unsigned short  field) const
inline

Find the position of a field in a message.

Parameters
fieldfield number
Returns
position of field

Definition at line 846 of file message.hpp.

References FIX8::FieldTraits::getPos().

846 { return _fp.getPos(field); }
FieldTraits _fp
Definition: message.hpp:388
unsigned short getPos(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:639
template<typename T >
bool FIX8::MessageBase::has ( ) const
inline

Check if a field is present.

Template Parameters
Ttype of field to get
Returns
true if present

Definition at line 686 of file message.hpp.

References FIX8::FieldTraits::get().

686 { return _fp.get(T::get_field_id()); }
FieldTraits _fp
Definition: message.hpp:388
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
static bool FIX8::MessageBase::has_group_count ( const BaseField bf)
inlinestatic

Determine if this repeating group count field has any elements (> 0)

Parameters
bfBasefield *
Returns
true if has count

Definition at line 999 of file message.hpp.

999 { return static_cast<const Field<int, 0> *>(bf)->get() > 0; }
bool FIX8::MessageBase::have ( const unsigned short  fnum) const
inline

Check if a field is present in this message.

Parameters
fnumfield number
Returns
true is present

Definition at line 725 of file message.hpp.

References FIX8::FieldTraits::get(), and FIX8::FieldTrait::present.

Referenced by FIX8::Session::handle_logon(), FIX8::ConsoleMenu::SelectField(), and FIX8::Session::send_process().

725 { return _fp.get(fnum, FieldTrait::present); }
FieldTraits _fp
Definition: message.hpp:388
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
bool FIX8::MessageBase::is_legal ( unsigned short  fnum) const
inline

Check if a field is legal in a message.

Parameters
fnumfield number
Returns
true if present

Definition at line 691 of file message.hpp.

References FIX8::FieldTraits::has().

Referenced by FIX8::Session::generate_logon().

691 { return _fp.has(fnum); }
FieldTraits _fp
Definition: message.hpp:388
bool has(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:457
template<typename T >
bool FIX8::MessageBase::is_legal ( ) const
inline

Check if a field is legal.

Template Parameters
Ttype of field to check
Returns
true if present

Definition at line 697 of file message.hpp.

References FIX8::FieldTraits::has().

697 { return _fp.has(T::get_field_id()); }
FieldTraits _fp
Definition: message.hpp:388
bool has(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:457
unsigned MessageBase::move_legal ( MessageBase to,
bool  force = false 
)

Move all fields from this message to 'to' where the field is legal for 'to' and it is not already present in 'to'; includes nested repeating groups. Not thread safe. Source message must be heap based. Source message is invalidated (but can be deleted).

Parameters
totarget message
forceif true move all fields regardless, replacing any existing, adding any new
Returns
number of fields moved

Definition at line 315 of file message.cpp.

References _fp, add_field(), find_group(), FIX8::FieldTraits::get(), FIX8::FieldTrait::group, FIX8::FieldTraits::has(), FIX8::FieldTrait::present, and replace().

316 {
317  unsigned moved{};
318  for (const auto& pp : _fp.get_presence())
319  {
320  if (pp._field_traits & FieldTrait::present && (force || (to->_fp.has(pp._fnum) && !to->_fp.get(pp._fnum))))
321  {
322  if (pp._field_traits & FieldTrait::group)
323  {
324  auto gitr(_groups.find(pp._fnum));
325  GroupBase *gb1(to->find_group(pp._fnum));
326  if (gb1)
327  delete to->replace(pp._fnum, gitr->second);
328  else
329  *to += gitr->second;
330  gitr->second = nullptr;
331  }
332 
333  auto itr(_fields.find(pp._fnum));
335  if (force && to->_fp.get(pp._fnum, fpitr, FieldTrait::present))
336  delete to->replace(pp._fnum, fpitr, itr->second);
337  else
338  to->add_field(itr->second);
339  itr->second = nullptr;
340  ++moved;
341  }
342  }
343  clear_positions();
344 
345  return moved;
346 }
FieldTraits _fp
Definition: message.hpp:388
GroupBase * find_group() const
Definition: message.hpp:792
bool has(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:457
const Presence & get_presence() const
Definition: traits.hpp:658
Abstract base class for all repeating groups.
Definition: message.hpp:59
Used for static trait interrogation.
Definition: traits.hpp:57
void clear_positions()
empty the positions map
Definition: message.hpp:447
F8API BaseField * replace(const unsigned short fnum, Presence::const_iterator itr, BaseField *with)
Definition: message.cpp:599
bool get(const unsigned short field, FieldTrait::TraitTypes type=FieldTrait::present) const
Definition: traits.hpp:490
void add_field(const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
Definition: message.hpp:556
template<typename T >
bool FIX8::MessageBase::operator() ( T &  to) const
inline

Populate supplied field with value from message.

Template Parameters
Ttype of field to get
Parameters
tofield to populate
Returns
true on success

Definition at line 714 of file message.hpp.

714 { return get(to); }
template<typename T >
const T* FIX8::MessageBase::operator() ( ) const
inline

Get a pointer to a field. Inplace, 0 copy.

Template Parameters
Ttype of field to get
Returns
pointer to field or 0 if not present

Definition at line 720 of file message.hpp.

720 { return get<T>(); }
template<typename T >
bool FIX8::MessageBase::operator+= ( T *  what)
inline

Add fix field to this message.

Template Parameters
Tfield type
Parameters
whatpointer to field
Returns
true on success; throws InvalidField if not valid

Definition at line 657 of file message.hpp.

References add_field().

657 { return add_field(what); }
void add_field(const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
Definition: message.hpp:556
void FIX8::MessageBase::operator+= ( GroupBase what)
inline

Add a repeating group to a message.

Parameters
whatpointer to group to add

Definition at line 841 of file message.hpp.

References add_group().

841 { add_group(what); }
void add_group(GroupBase *what)
Definition: message.hpp:832
template<typename T >
MessageBase& FIX8::MessageBase::operator<< ( T *  what)
inline

Add fix field to this message.

Template Parameters
Tfield type
Parameters
whatpointer to field
Returns
reference to MessageBase on success

Definition at line 664 of file message.hpp.

References add_field().

664 { add_field(what); return *this; }
void add_field(const unsigned short fnum, Presence::const_iterator itr, const unsigned pos, BaseField *what, bool check)
Definition: message.hpp:556
MessageBase& FIX8::MessageBase::operator<< ( GroupBase what)
inline

Add a repeating group to a message.

Parameters
whatpointer to field
Returns
reference to MessageBase on success

Definition at line 837 of file message.hpp.

References add_group().

837 { add_group(what); return *this; }
void add_group(GroupBase *what)
Definition: message.hpp:832
F8API MessageBase& FIX8::MessageBase::operator= ( const MessageBase that)

Assignment operator.

void MessageBase::print ( std::ostream &  os,
int  depth = 0 
) const
virtual

Print the message to the specified stream.

Parameters
osrefererence to stream to print to
depthnesting depth

Reimplemented in FIX8::Message.

Definition at line 509 of file message.cpp.

References FIX8::BaseMsgEntry::_name.

Referenced by FIX8::Message::print().

510 {
511  const string dspacer((depth + 1) * _tabsize, ' ');
512  const BaseMsgEntry *tbme(_ctx._bme.find_ptr(_msgType.c_str()));
513  if (tbme)
514  os << string(depth * _tabsize, ' ') << tbme->_name << " (\"" << _msgType << "\")" << endl;
515  for (const auto& pp : _pos)
516  {
517  const BaseEntry *tbe(_ctx.find_be(pp.second->_fnum));
518  if (!tbe)
519  throw InvalidField(pp.second->_fnum);
520  os << dspacer << tbe->_name;
521  const unsigned short comp(_fp.getComp(pp.second->_fnum));
522  if (comp)
523  os << " [" << _ctx._cn[comp] << ']';
524  os << " (" << pp.second->_fnum << "): ";
525  int idx;
526  if (pp.second->_rlm && (idx = (pp.second->get_rlm_idx())) >= 0)
527  os << pp.second->_rlm->_descriptions[idx] << " (" << *pp.second << ')' << endl;
528  else
529  os << *pp.second << endl;
530  if (_fp.is_group(pp.second->_fnum) && has_group_count(pp.second))
531  print_group(pp.second->_fnum, os, depth);
532  }
533 }
const MsgTable & _bme
Framework generated lookup table to generate Fix messages.
Definition: message.hpp:216
FieldTraits _fp
Definition: message.hpp:388
Message instantiation table entry.
Definition: message.hpp:192
const F8MetaCntx & _ctx
Definition: message.hpp:392
virtual F8API void print_group(const unsigned short fnum, std::ostream &os, int depth=0) const
Definition: message.cpp:536
Positions _pos
Definition: message.hpp:389
static bool has_group_count(const BaseField *bf)
Definition: message.hpp:999
bool is_group(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:602
const char ** _cn
Framework generated component name table.
Definition: message.hpp:220
An invalid field was requested or added.
const BaseEntry * find_be(const unsigned short fnum) const
Definition: message.hpp:267
static F8API unsigned _tabsize
Definition: message.hpp:408
const f8String & _msgType
Definition: message.hpp:391
unsigned short getComp(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:618
const Val * find_ptr(const Key &key) const
Definition: f8types.hpp:154
void MessageBase::print_field ( const unsigned short  fnum,
std::ostream &  os 
) const
virtual

Print the field specified by the field num from message to the specified stream.

Parameters
fnumfield number
osrefererence to stream to print to

Definition at line 554 of file message.cpp.

Referenced by FIX8::ConsoleMenu::SelectField().

555 {
556  Fields::const_iterator fitr(_fields.find(fnum));
557  if (fitr != _fields.end())
558  {
559  const BaseEntry *tbe(_ctx.find_be(fnum));
560  if (!tbe)
561  throw InvalidField(fnum);
562  os << tbe->_name << " (" << fnum << "): ";
563  int idx;
564  if (fitr->second->_rlm && (idx = (fitr->second->get_rlm_idx())) >= 0)
565  os << fitr->second->_rlm->_descriptions[idx] << " (" << *fitr->second << ')';
566  else
567  os << *fitr->second;
568  if (_fp.is_group(fnum) && has_group_count(fitr->second))
569  print_group(fnum, os, 0);
570  }
571 }
FieldTraits _fp
Definition: message.hpp:388
const F8MetaCntx & _ctx
Definition: message.hpp:392
virtual F8API void print_group(const unsigned short fnum, std::ostream &os, int depth=0) const
Definition: message.cpp:536
static bool has_group_count(const BaseField *bf)
Definition: message.hpp:999
bool is_group(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:602
An invalid field was requested or added.
const BaseEntry * find_be(const unsigned short fnum) const
Definition: message.hpp:267
void FIX8::MessageBase::print_fp ( std::ostream &  os)
inline

Presence printer

Parameters
osstream to send to

Definition at line 1003 of file message.hpp.

References _fp.

1003 { os << _fp; }
FieldTraits _fp
Definition: message.hpp:388
void MessageBase::print_group ( const unsigned short  fnum,
std::ostream &  os,
int  depth = 0 
) const
virtual

Print the repeating group to the specified stream.

Parameters
fnumfield number
osrefererence to stream to print to
depthnesting depth

Definition at line 536 of file message.cpp.

References FIX8::GroupBase::_msgs, FILE_LINE, and find_group().

537 {
538  const GroupBase *grpbase(find_group(fnum));
539  if (!grpbase)
540  throw InvalidRepeatingGroup(fnum, FILE_LINE);
541 
542  ++depth;
543  const string dspacer(depth * _tabsize, ' ');
544  size_t cnt(1);
545  for (const auto *pp : grpbase->_msgs)
546  {
547  os << dspacer << pp->_msgType << " (Repeating group " << cnt << '/' << grpbase->_msgs.size() << ')' << endl;
548  pp->print(os, depth);
549  ++cnt;
550  }
551 }
#define FILE_LINE
Definition: f8utils.hpp:68
GroupBase * find_group() const
Definition: message.hpp:792
Abstract base class for all repeating groups.
Definition: message.hpp:59
An invalid repeating group was found while attempting to encode a message.
static F8API unsigned _tabsize
Definition: message.hpp:408
void FIX8::MessageBase::push_unknown ( MessageBase to) const
inline

Copy _unknown string from this message to given message

Definition at line 518 of file message.hpp.

References _unknown.

Referenced by FIX8::Message::push_unknown().

519  {
520  if (_unknown.size() && to)
521  to->_unknown = _unknown;
522  }
f8String _unknown
pass through for permissive mode
Definition: message.hpp:384
BaseField * MessageBase::remove ( const unsigned short  fnum,
Presence::const_iterator  itr 
)

Remove a field from this message.

Parameters
fnumfield number
itrhint iterator: if end, set to itr of found element, if not end use it to locate element
Returns
pointer to original field or 0 if not found

Definition at line 646 of file message.cpp.

References FIX8::FieldTrait::present.

Referenced by MyMenu::load_msgs(), FIX8::Session::send_process(), and FIX8::Message::setup_reuse().

647 {
648  BaseField *old(nullptr);
649  Fields::iterator itr(_fields.find(fnum));
650  if (itr != _fields.end())
651  {
652  old = itr->second;
653  for (Positions::iterator pitr(_pos.begin()); pitr != _pos.end(); ++pitr)
654  {
655  if (pitr->second == old)
656  {
657  _pos.erase(pitr);
658  break;
659  }
660  }
661  _fp.clear(fnum, fitr, FieldTrait::present);
662  _fields.erase(itr);
663  }
664  return old;
665 }
FieldTraits _fp
Definition: message.hpp:388
void clear(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type=FieldTrait::present)
Definition: traits.hpp:550
Positions _pos
Definition: message.hpp:389
The base field class (ABC) for all fields.
Definition: field.hpp:127
BaseField * MessageBase::remove ( const unsigned short  fnum)

Remove a field from this message.

Parameters
fnumfield number
Returns
pointer to original field or 0 if not found

Definition at line 624 of file message.cpp.

References FIX8::FieldTrait::present.

625 {
626  BaseField *old(nullptr);
627  Fields::iterator itr(_fields.find(fnum));
628  if (itr != _fields.end())
629  {
630  old = itr->second;
631  for (Positions::iterator pitr(_pos.begin()); pitr != _pos.end(); ++pitr)
632  {
633  if (pitr->second == old)
634  {
635  _pos.erase(pitr);
636  break;
637  }
638  }
640  _fields.erase(itr);
641  }
642  return old;
643 }
FieldTraits _fp
Definition: message.hpp:388
void clear(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type=FieldTrait::present)
Definition: traits.hpp:550
Positions _pos
Definition: message.hpp:389
The base field class (ABC) for all fields.
Definition: field.hpp:127
BaseField * MessageBase::replace ( const unsigned short  fnum,
Presence::const_iterator  itr,
BaseField with 
)

Replace a field value with another field value.

Parameters
fnumfield number
itrhint iterator: if end, set to itr of found element, if not end use it to locate element
withfield to replace with
Returns
pointer to original field or 0 if not found

Definition at line 599 of file message.cpp.

References FIX8::FieldTrait::present.

Referenced by add_field(), copy_legal(), and move_legal().

600 {
601  BaseField *old(nullptr);
602  Fields::iterator itr(_fields.find(fnum));
603  if (itr != _fields.end())
604  {
605  old = itr->second;
606  unsigned pos(_fp.getPos(fnum, fitr));
607  for (Positions::iterator pitr(_pos.begin()); pitr != _pos.end(); ++pitr)
608  {
609  if (pitr->second == old)
610  {
611  pos = pitr->first;
612  _pos.erase(pitr);
613  break;
614  }
615  }
616  _pos.insert({pos, with});
617  itr->second = with;
618  _fp.set(fnum, fitr, FieldTrait::present);
619  }
620  return old;
621 }
FieldTraits _fp
Definition: message.hpp:388
unsigned short getPos(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:639
Positions _pos
Definition: message.hpp:389
The base field class (ABC) for all fields.
Definition: field.hpp:127
void set(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type)
Definition: traits.hpp:524
BaseField * MessageBase::replace ( const unsigned short  fnum,
BaseField with 
)

Replace a field value with another field value.

Parameters
fnumfield number
withfield to replace with
Returns
pointer to original field or 0 if not found

Definition at line 574 of file message.cpp.

References FIX8::FieldTrait::present.

575 {
576  BaseField *old(nullptr);
577  Fields::iterator itr(_fields.find(fnum));
578  if (itr != _fields.end())
579  {
580  old = itr->second;
581  unsigned pos(_fp.getPos(fnum));
582  for (Positions::iterator pitr(_pos.begin()); pitr != _pos.end(); ++pitr)
583  {
584  if (pitr->second == old)
585  {
586  pos = pitr->first;
587  _pos.erase(pitr);
588  break;
589  }
590  }
591  _pos.insert({pos, with});
592  itr->second = with;
593  _fp.set(fnum, FieldTrait::present);
594  }
595  return old;
596 }
FieldTraits _fp
Definition: message.hpp:388
unsigned short getPos(const unsigned short field, Presence::const_iterator &itr) const
Definition: traits.hpp:639
Positions _pos
Definition: message.hpp:389
The base field class (ABC) for all fields.
Definition: field.hpp:127
void set(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type)
Definition: traits.hpp:524
GroupBase * MessageBase::replace ( const unsigned short  fnum,
GroupBase with 
)

Replace a group with another group.

Parameters
fnumgroup field number
withgroup to replace with
Returns
pointer to original group or 0 if not found

Definition at line 721 of file message.cpp.

722 {
723  GroupBase *old(nullptr);
724  auto itr(_groups.find(fnum));
725  if (itr != _groups.end())
726  {
727  old = itr->second;
728  itr->second = with;
729  }
730  return old;
731 }
Abstract base class for all repeating groups.
Definition: message.hpp:59
void FIX8::MessageBase::set ( const unsigned short  field,
FieldTrait::TraitTypes  type = FieldTrait::present 
)
inline

Set field attribute to given value.

Parameters
fieldtag number
typefieldtrait type

Definition at line 614 of file message.hpp.

References FIX8::FieldTraits::set().

614 { _fp.set(field, type); }
FieldTraits _fp
Definition: message.hpp:388
void set(const unsigned short field, Presence::const_iterator &itr, FieldTrait::TraitTypes type)
Definition: traits.hpp:524
static void FIX8::MessageBase::set_tabsize ( unsigned  tabsize)
inlinestatic

Set the tabsize used by the printer

Parameters
tabsizenumber of spaces in a tab

Definition at line 990 of file message.hpp.

References tabsize().

Referenced by FIX8::SessionConfig::SessionConfig().

990 { _tabsize = tabsize; }
unsigned tabsize(3)
static F8API unsigned _tabsize
Definition: message.hpp:408
size_t FIX8::MessageBase::size ( ) const
inline

Get the number of possible fields in this message

Returns
number of fields

Definition at line 451 of file message.hpp.

References FIX8::FieldTraits::size().

Referenced by FIX8::GroupBase::get_element(), and MyMenu::preload_new_order_single().

451 { return _fp.size(); }
FieldTraits _fp
Definition: message.hpp:388
size_t size() const
Definition: traits.hpp:484

Friends And Related Function Documentation

friend class Message
friend

Definition at line 986 of file message.hpp.

std::ostream& operator<< ( std::ostream &  os,
const MessageBase what 
)
friend

Inserter friend.

Parameters
osstream to send to
whatmessagebase
Returns
stream

Definition at line 985 of file message.hpp.

985 { what.print(os); return os; }

Member Data Documentation

const F8MetaCntx& FIX8::MessageBase::_ctx
protected

Definition at line 392 of file message.hpp.

Referenced by FIX8::Message::get_field_by_name_flattened().

Fields FIX8::MessageBase::_fields
protected

Definition at line 387 of file message.hpp.

Referenced by FIX8::Message::get_field_flattened().

FieldTraits FIX8::MessageBase::_fp
protected

Definition at line 388 of file message.hpp.

Referenced by copy_legal(), get_fp(), move_legal(), print_fp(), and FIX8::Message::setup_reuse().

Groups FIX8::MessageBase::_groups
protected

Definition at line 390 of file message.hpp.

Referenced by FIX8::TEX::AdjustedPositionReport::AdjustedPositionReport(), FIX8::TEX::Advertisement::Advertisement(), FIX8::TEX::AllocationInstruction::AllocationInstruction(), FIX8::TEX::AllocationInstructionAck::AllocationInstructionAck(), FIX8::TEX::AllocationInstructionAlert::AllocationInstructionAlert(), FIX8::TEX::AllocationReport::AllocationReport(), FIX8::TEX::AllocationReportAck::AllocationReportAck(), FIX8::TEX::ApplicationMessageReport::ApplicationMessageReport(), FIX8::TEX::ApplicationMessageRequest::ApplicationMessageRequest(), FIX8::TEX::ApplicationMessageRequestAck::ApplicationMessageRequestAck(), FIX8::TEX::AssignmentReport::AssignmentReport(), FIX8::TEX::BidRequest::BidRequest(), FIX8::TEX::BidResponse::BidResponse(), FIX8::TEX::CollateralAssignment::CollateralAssignment(), FIX8::TEX::CollateralInquiry::CollateralInquiry(), FIX8::TEX::CollateralInquiryAck::CollateralInquiryAck(), FIX8::TEX::CollateralReport::CollateralReport(), FIX8::TEX::CollateralRequest::CollateralRequest(), FIX8::TEX::CollateralResponse::CollateralResponse(), FIX8::TEX::Confirmation::Confirmation(), FIX8::TEX::ConfirmationRequest::ConfirmationRequest(), FIX8::TEX::ContraryIntentionReport::ContraryIntentionReport(), FIX8::TEX::CrossOrderCancelReplaceRequest::CrossOrderCancelReplaceRequest(), FIX8::TEX::CrossOrderCancelRequest::CrossOrderCancelRequest(), FIX8::TEX::DerivativeSecurityList::DerivativeSecurityList(), FIX8::TEX::DerivativeSecurityListRequest::DerivativeSecurityListRequest(), FIX8::TEX::DerivativeSecurityListUpdateReport::DerivativeSecurityListUpdateReport(), FIX8::TEX::DontKnowTrade::DontKnowTrade(), FIX8::TEX::Email::Email(), FIX8::TEX::ExecutionAcknowledgement::ExecutionAcknowledgement(), FIX8::TEX::ExecutionReport::ExecutionReport(), get_groups(), FIX8::TEX::IOI::IOI(), FIX8::TEX::ListCancelRequest::ListCancelRequest(), FIX8::TEX::ListStatus::ListStatus(), FIX8::TEX::ListStrikePrice::ListStrikePrice(), FIX8::TEX::Logon::Logon(), FIX8::TEX::MarketDataIncrementalRefresh::MarketDataIncrementalRefresh(), FIX8::TEX::MarketDataRequest::MarketDataRequest(), FIX8::TEX::MarketDataRequestReject::MarketDataRequestReject(), FIX8::TEX::MarketDataSnapshotFullRefresh::MarketDataSnapshotFullRefresh(), FIX8::TEX::MarketDefinition::MarketDefinition(), FIX8::TEX::MarketDefinitionUpdateReport::MarketDefinitionUpdateReport(), FIX8::TEX::MassQuote::MassQuote(), FIX8::TEX::MassQuoteAcknowledgement::MassQuoteAcknowledgement(), FIX8::TEX::MultilegOrderCancelReplace::MultilegOrderCancelReplace(), FIX8::TEX::NetworkCounterpartySystemStatusRequest::NetworkCounterpartySystemStatusRequest(), FIX8::TEX::NetworkCounterpartySystemStatusResponse::NetworkCounterpartySystemStatusResponse(), FIX8::TEX::NewOrderCross::NewOrderCross(), FIX8::TEX::NewOrderList::NewOrderList(), FIX8::TEX::NewOrderMultileg::NewOrderMultileg(), FIX8::TEX::NewOrderSingle::NewOrderSingle(), FIX8::TEX::News::News(), FIX8::TEX::OrderCancelReplaceRequest::OrderCancelReplaceRequest(), FIX8::TEX::OrderCancelRequest::OrderCancelRequest(), FIX8::TEX::OrderMassActionReport::OrderMassActionReport(), FIX8::TEX::OrderMassActionRequest::OrderMassActionRequest(), FIX8::TEX::OrderMassCancelReport::OrderMassCancelReport(), FIX8::TEX::OrderMassCancelRequest::OrderMassCancelRequest(), FIX8::TEX::OrderMassStatusRequest::OrderMassStatusRequest(), FIX8::TEX::OrderStatusRequest::OrderStatusRequest(), FIX8::TEX::PartyDetailsListReport::PartyDetailsListReport(), FIX8::TEX::PartyDetailsListRequest::PartyDetailsListRequest(), FIX8::TEX::PositionMaintenanceReport::PositionMaintenanceReport(), FIX8::TEX::PositionMaintenanceRequest::PositionMaintenanceRequest(), FIX8::TEX::PositionReport::PositionReport(), FIX8::TEX::Quote::Quote(), FIX8::TEX::QuoteCancel::QuoteCancel(), FIX8::TEX::QuoteRequest::QuoteRequest(), FIX8::TEX::QuoteRequestReject::QuoteRequestReject(), FIX8::TEX::QuoteResponse::QuoteResponse(), FIX8::TEX::QuoteStatusReport::QuoteStatusReport(), FIX8::TEX::QuoteStatusRequest::QuoteStatusRequest(), FIX8::TEX::RegistrationInstructions::RegistrationInstructions(), FIX8::TEX::RegistrationInstructionsResponse::RegistrationInstructionsResponse(), FIX8::TEX::RequestForPositions::RequestForPositions(), FIX8::TEX::RequestForPositionsAck::RequestForPositionsAck(), FIX8::TEX::RFQRequest::RFQRequest(), FIX8::TEX::SecurityDefinition::SecurityDefinition(), FIX8::TEX::SecurityDefinitionRequest::SecurityDefinitionRequest(), FIX8::TEX::SecurityDefinitionUpdateReport::SecurityDefinitionUpdateReport(), FIX8::TEX::SecurityList::SecurityList(), FIX8::TEX::SecurityListRequest::SecurityListRequest(), FIX8::TEX::SecurityListUpdateReport::SecurityListUpdateReport(), FIX8::TEX::SecurityStatus::SecurityStatus(), FIX8::TEX::SecurityStatusRequest::SecurityStatusRequest(), FIX8::TEX::SecurityTypes::SecurityTypes(), FIX8::TEX::SettlementInstructionRequest::SettlementInstructionRequest(), FIX8::TEX::SettlementInstructions::SettlementInstructions(), FIX8::TEX::SettlementObligationReport::SettlementObligationReport(), FIX8::TEX::StreamAssignmentReport::StreamAssignmentReport(), FIX8::TEX::StreamAssignmentRequest::StreamAssignmentRequest(), FIX8::TEX::TradeCaptureReport::TradeCaptureReport(), FIX8::TEX::TradeCaptureReportAck::TradeCaptureReportAck(), FIX8::TEX::TradeCaptureReportRequest::TradeCaptureReportRequest(), FIX8::TEX::TradeCaptureReportRequestAck::TradeCaptureReportRequestAck(), FIX8::TEX::TradingSessionList::TradingSessionList(), FIX8::TEX::TradingSessionListUpdateReport::TradingSessionListUpdateReport(), and FIX8::TEX::TradingSessionStatus::TradingSessionStatus().

const f8String& FIX8::MessageBase::_msgType
protected

Definition at line 391 of file message.hpp.

Referenced by get_msgtype().

Positions FIX8::MessageBase::_pos
protected

Definition at line 389 of file message.hpp.

unsigned MessageBase::_tabsize = defaults::tabsize
staticprotected

Definition at line 408 of file message.hpp.

Referenced by get_tabsize().

f8String FIX8::MessageBase::_unknown
private

pass through for permissive mode

Definition at line 384 of file message.hpp.

Referenced by get_unknown(), and push_unknown().


The documentation for this class was generated from the following files: