Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
FIX::message_order Struct Reference

Sorts fields in header, normal, or trailer order. More...

#include <MessageSorters.h>

Collaboration diagram for FIX::message_order:
Collaboration graph
[legend]

Public Types

enum  cmp_mode { header, trailer, normal, group }
 

Public Member Functions

 message_order (cmp_mode mode=normal)
 
 message_order (int first,...)
 
 message_order (const int order[])
 
 message_order (const message_order &copy)
 
bool operator() (const int x, const int y) const
 
message_orderoperator= (const message_order &rhs)
 
 operator bool () const
 

Private Member Functions

void setOrder (int size, const int order[])
 

Private Attributes

cmp_mode m_mode
 
int m_delim
 
shared_array< int > m_groupOrder
 
int m_largest
 

Detailed Description

Sorts fields in header, normal, or trailer order.

Used as a dynamic sorter to create Header, Trailer, and Message FieldMaps while maintaining the same base type.

Definition at line 113 of file MessageSorters.h.

Member Enumeration Documentation

◆ cmp_mode

Constructor & Destructor Documentation

◆ message_order() [1/4]

FIX::message_order::message_order ( cmp_mode  mode = normal)
inline

Definition at line 118 of file MessageSorters.h.

119  : m_mode( mode ), m_delim( 0 ), m_largest( 0 ) {}

◆ message_order() [2/4]

FIX::message_order::message_order ( int  first,
  ... 
)

Definition at line 32 of file MessageSorters.cpp.

References FIX::shared_array< T >::create(), m_delim, m_groupOrder, and m_largest.

33 : m_mode( group ), m_delim( 0 ), m_largest( 0 )
34 {
35  int field = first;
36  int size = 0;
37  m_largest = m_delim = first;
38 
39  va_list arguments;
40  va_start( arguments, first );
41  while( field != 0 )
42  {
43  m_largest = m_largest > field ? m_largest : field;
44 
45  size++;
46  field = va_arg( arguments, int );
47  }
48 
49  if(size)
50  {
52 
53  va_start( arguments, first );
54  field = first;
55  int i = 0;
56  while( field != 0 )
57  {
58  m_groupOrder[ field ] = ++i;
59  field = va_arg( arguments, int );
60  }
61  }
62  else
63  {
64  m_largest = 0;
65  m_delim = 0;
66  }
67 
68  va_end( arguments );
69 }
shared_array< int > m_groupOrder
static shared_array create(const std::size_t nSize)
Definition: SharedArray.h:201

◆ message_order() [3/4]

FIX::message_order::message_order ( const int  order[])

Definition at line 71 of file MessageSorters.cpp.

References setOrder().

72 : m_mode( group ), m_delim( 0 ), m_largest( 0 )
73 {
74  int size = 0;
75  while( order[size] != 0 ) { ++size; }
76  setOrder(size, order);
77 }
void setOrder(int size, const int order[])

◆ message_order() [4/4]

FIX::message_order::message_order ( const message_order copy)
inline

Definition at line 122 of file MessageSorters.h.

123  { *this = copy; }

Member Function Documentation

◆ operator bool()

FIX::message_order::operator bool ( ) const
inline

Definition at line 142 of file MessageSorters.h.

143  { return !m_groupOrder.empty(); }
shared_array< int > m_groupOrder
bool empty() const
Definition: SharedArray.h:194

◆ operator()()

bool FIX::message_order::operator() ( const int  x,
const int  y 
) const
inline

Definition at line 125 of file MessageSorters.h.

References FIX::header_order::compare(), FIX::trailer_order::compare(), and FIX::group_order::compare().

126  {
127  switch ( m_mode )
128  {
129  case header:
130  return header_order::compare( x, y );
131  case trailer:
132  return trailer_order::compare( x, y );
133  case group:
135  case normal: default:
136  return x < y;
137  }
138  }
static bool compare(const int x, const int y, int *order, int largest)
static bool compare(const int x, const int y)
static bool compare(const int x, const int y)
shared_array< int > m_groupOrder

◆ operator=()

message_order & FIX::message_order::operator= ( const message_order rhs)

Definition at line 79 of file MessageSorters.cpp.

References m_delim, m_groupOrder, m_largest, and m_mode.

80 {
81  m_mode = rhs.m_mode;
82  m_delim = rhs.m_delim;
83  m_largest = rhs.m_largest;
84  m_groupOrder = rhs.m_groupOrder;
85 
86  return *this;
87 }
shared_array< int > m_groupOrder

◆ setOrder()

void FIX::message_order::setOrder ( int  size,
const int  order[] 
)
private

Definition at line 89 of file MessageSorters.cpp.

References FIX::shared_array< T >::create(), m_delim, m_groupOrder, and m_largest.

Referenced by message_order().

90 {
91  if(size < 1) return;
92  m_largest = m_delim = order[0];
93 
94  // collect all fields and find the largest field number
95  for (int i = 1; i < size; ++i )
96  {
97  int field = order[i];
98  m_largest = m_largest > field ? m_largest : field;
99  }
100 
102  for (int i = 0; i < size; ++i )
103  m_groupOrder[ order[ i ] ] = i + 1;
104 }
shared_array< int > m_groupOrder
static shared_array create(const std::size_t nSize)
Definition: SharedArray.h:201

Member Data Documentation

◆ m_delim

int FIX::message_order::m_delim
private

Definition at line 149 of file MessageSorters.h.

Referenced by message_order(), operator=(), and setOrder().

◆ m_groupOrder

shared_array<int> FIX::message_order::m_groupOrder
private

Definition at line 150 of file MessageSorters.h.

Referenced by message_order(), operator=(), and setOrder().

◆ m_largest

int FIX::message_order::m_largest
private

Definition at line 151 of file MessageSorters.h.

Referenced by message_order(), operator=(), and setOrder().

◆ m_mode

cmp_mode FIX::message_order::m_mode
private

Definition at line 148 of file MessageSorters.h.

Referenced by operator=().


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

Generated on Sun Apr 15 2018 21:44:06 for QuickFIX by doxygen 1.8.13 written by Dimitri van Heesch, © 1997-2001