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

Enumerator
header 
trailer 
normal 
group 

Definition at line 116 of file MessageSorters.h.

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.

◆ message_order() [2/4]

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

Definition at line 32 of file MessageSorters.cpp.

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}
static shared_array create(const std::size_t nSize)
shared_array< int > m_groupOrder

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

◆ message_order() [3/4]

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

Definition at line 71 of file MessageSorters.cpp.

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[])

References setOrder().

◆ 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(); }
bool empty() const

References FIX::shared_array< T >::empty(), and m_groupOrder.

◆ operator()()

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

Definition at line 125 of file MessageSorters.h.

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)

References FIX::header_order::compare(), FIX::trailer_order::compare(), FIX::group_order::compare(), group, header, m_groupOrder, m_largest, m_mode, normal, and trailer.

◆ operator=()

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

Definition at line 79 of file MessageSorters.cpp.

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}

References m_delim, m_groupOrder, m_largest, and m_mode.

◆ setOrder()

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

Definition at line 89 of file MessageSorters.cpp.

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}

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

Referenced by message_order().

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 bool(), operator()(), 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()(), operator=(), and setOrder().

◆ m_mode

cmp_mode FIX::message_order::m_mode
private

Definition at line 148 of file MessageSorters.h.

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


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

Generated on Sat Feb 3 2024 04:23:15 for QuickFIX by doxygen 1.9.8 written by Dimitri van Heesch, © 1997-2001