quickfix_ruby 1.14.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/quickfix/Acceptor.cpp +248 -0
- data/ext/quickfix/Acceptor.h +127 -0
- data/ext/quickfix/Allocator.h +9 -0
- data/ext/quickfix/Application.h +127 -0
- data/ext/quickfix/AtomicCount.h +109 -0
- data/ext/quickfix/DOMDocument.h +74 -0
- data/ext/quickfix/DataDictionary.cpp +618 -0
- data/ext/quickfix/DataDictionary.h +539 -0
- data/ext/quickfix/DataDictionaryProvider.cpp +71 -0
- data/ext/quickfix/DataDictionaryProvider.h +70 -0
- data/ext/quickfix/DatabaseConnectionID.h +105 -0
- data/ext/quickfix/DatabaseConnectionPool.h +91 -0
- data/ext/quickfix/Dictionary.cpp +162 -0
- data/ext/quickfix/Dictionary.h +94 -0
- data/ext/quickfix/Event.h +95 -0
- data/ext/quickfix/Exceptions.h +299 -0
- data/ext/quickfix/Field.h +672 -0
- data/ext/quickfix/FieldConvertors.h +863 -0
- data/ext/quickfix/FieldMap.cpp +238 -0
- data/ext/quickfix/FieldMap.h +244 -0
- data/ext/quickfix/FieldNumbers.h +46 -0
- data/ext/quickfix/FieldTypes.cpp +64 -0
- data/ext/quickfix/FieldTypes.h +698 -0
- data/ext/quickfix/Fields.h +31 -0
- data/ext/quickfix/FileLog.cpp +200 -0
- data/ext/quickfix/FileLog.h +112 -0
- data/ext/quickfix/FileStore.cpp +332 -0
- data/ext/quickfix/FileStore.h +129 -0
- data/ext/quickfix/FixFieldNumbers.h +1537 -0
- data/ext/quickfix/FixFields.h +1538 -0
- data/ext/quickfix/FixValues.h +3281 -0
- data/ext/quickfix/FlexLexer.h +188 -0
- data/ext/quickfix/Group.cpp +64 -0
- data/ext/quickfix/Group.h +73 -0
- data/ext/quickfix/HtmlBuilder.h +186 -0
- data/ext/quickfix/HttpConnection.cpp +739 -0
- data/ext/quickfix/HttpConnection.h +78 -0
- data/ext/quickfix/HttpMessage.cpp +149 -0
- data/ext/quickfix/HttpMessage.h +133 -0
- data/ext/quickfix/HttpParser.cpp +49 -0
- data/ext/quickfix/HttpParser.h +54 -0
- data/ext/quickfix/HttpServer.cpp +169 -0
- data/ext/quickfix/HttpServer.h +78 -0
- data/ext/quickfix/Initiator.cpp +289 -0
- data/ext/quickfix/Initiator.h +149 -0
- data/ext/quickfix/Log.cpp +77 -0
- data/ext/quickfix/Log.h +179 -0
- data/ext/quickfix/Message.cpp +580 -0
- data/ext/quickfix/Message.h +370 -0
- data/ext/quickfix/MessageCracker.h +188 -0
- data/ext/quickfix/MessageSorters.cpp +105 -0
- data/ext/quickfix/MessageSorters.h +156 -0
- data/ext/quickfix/MessageStore.cpp +146 -0
- data/ext/quickfix/MessageStore.h +174 -0
- data/ext/quickfix/Mutex.h +131 -0
- data/ext/quickfix/MySQLConnection.h +194 -0
- data/ext/quickfix/MySQLLog.cpp +275 -0
- data/ext/quickfix/MySQLLog.h +145 -0
- data/ext/quickfix/MySQLStore.cpp +331 -0
- data/ext/quickfix/MySQLStore.h +142 -0
- data/ext/quickfix/NullStore.cpp +54 -0
- data/ext/quickfix/NullStore.h +99 -0
- data/ext/quickfix/OdbcConnection.h +266 -0
- data/ext/quickfix/OdbcLog.cpp +252 -0
- data/ext/quickfix/OdbcLog.h +117 -0
- data/ext/quickfix/OdbcStore.cpp +338 -0
- data/ext/quickfix/OdbcStore.h +113 -0
- data/ext/quickfix/PUGIXML_DOMDocument.cpp +112 -0
- data/ext/quickfix/PUGIXML_DOMDocument.h +81 -0
- data/ext/quickfix/Parser.cpp +103 -0
- data/ext/quickfix/Parser.h +57 -0
- data/ext/quickfix/PostgreSQLConnection.h +176 -0
- data/ext/quickfix/PostgreSQLLog.cpp +276 -0
- data/ext/quickfix/PostgreSQLLog.h +144 -0
- data/ext/quickfix/PostgreSQLStore.cpp +334 -0
- data/ext/quickfix/PostgreSQLStore.h +141 -0
- data/ext/quickfix/Queue.h +75 -0
- data/ext/quickfix/QuickfixRuby.cpp +252066 -0
- data/ext/quickfix/QuickfixRuby.h +34 -0
- data/ext/quickfix/Responder.h +43 -0
- data/ext/quickfix/Session.cpp +1487 -0
- data/ext/quickfix/Session.h +335 -0
- data/ext/quickfix/SessionFactory.cpp +274 -0
- data/ext/quickfix/SessionFactory.h +86 -0
- data/ext/quickfix/SessionID.h +170 -0
- data/ext/quickfix/SessionSettings.cpp +189 -0
- data/ext/quickfix/SessionSettings.h +171 -0
- data/ext/quickfix/SessionState.h +231 -0
- data/ext/quickfix/Settings.cpp +100 -0
- data/ext/quickfix/Settings.h +53 -0
- data/ext/quickfix/SharedArray.h +150 -0
- data/ext/quickfix/SocketAcceptor.cpp +222 -0
- data/ext/quickfix/SocketAcceptor.h +75 -0
- data/ext/quickfix/SocketConnection.cpp +238 -0
- data/ext/quickfix/SocketConnection.h +103 -0
- data/ext/quickfix/SocketConnector.cpp +116 -0
- data/ext/quickfix/SocketConnector.h +67 -0
- data/ext/quickfix/SocketInitiator.cpp +260 -0
- data/ext/quickfix/SocketInitiator.h +81 -0
- data/ext/quickfix/SocketMonitor.cpp +335 -0
- data/ext/quickfix/SocketMonitor.h +111 -0
- data/ext/quickfix/SocketServer.cpp +177 -0
- data/ext/quickfix/SocketServer.h +100 -0
- data/ext/quickfix/ThreadedSocketAcceptor.cpp +258 -0
- data/ext/quickfix/ThreadedSocketAcceptor.h +98 -0
- data/ext/quickfix/ThreadedSocketConnection.cpp +209 -0
- data/ext/quickfix/ThreadedSocketConnection.h +82 -0
- data/ext/quickfix/ThreadedSocketInitiator.cpp +268 -0
- data/ext/quickfix/ThreadedSocketInitiator.h +84 -0
- data/ext/quickfix/TimeRange.cpp +173 -0
- data/ext/quickfix/TimeRange.h +258 -0
- data/ext/quickfix/Utility.cpp +537 -0
- data/ext/quickfix/Utility.h +219 -0
- data/ext/quickfix/Values.h +62 -0
- data/ext/quickfix/config.h +0 -0
- data/ext/quickfix/config_windows.h +0 -0
- data/ext/quickfix/extconf.rb +12 -0
- data/ext/quickfix/index.h +37 -0
- data/ext/quickfix/pugiconfig.hpp +72 -0
- data/ext/quickfix/pugixml.cpp +10765 -0
- data/ext/quickfix/pugixml.hpp +1341 -0
- data/ext/quickfix/strptime.h +7 -0
- data/lib/quickfix40.rb +274 -0
- data/lib/quickfix41.rb +351 -0
- data/lib/quickfix42.rb +1184 -0
- data/lib/quickfix43.rb +3504 -0
- data/lib/quickfix44.rb +10721 -0
- data/lib/quickfix50.rb +13426 -0
- data/lib/quickfix50sp1.rb +15629 -0
- data/lib/quickfix50sp2.rb +17068 -0
- data/lib/quickfix_fields.rb +19853 -0
- data/lib/quickfix_ruby.rb +82 -0
- data/lib/quickfixt11.rb +70 -0
- data/spec/FIX40.xml +862 -0
- data/spec/FIX41.xml +1285 -0
- data/spec/FIX42.xml +2746 -0
- data/spec/FIX43.xml +4229 -0
- data/spec/FIX44.xml +6596 -0
- data/spec/FIX50.xml +8137 -0
- data/spec/FIX50SP1.xml +9496 -0
- data/spec/FIX50SP2.xml +10011 -0
- data/spec/FIXT11.xml +313 -0
- data/test/test_DataDictionaryTestCase.rb +268 -0
- data/test/test_DictionaryTestCase.rb +112 -0
- data/test/test_FieldBaseTestCase.rb +24 -0
- data/test/test_MessageTestCase.rb +368 -0
- data/test/test_SessionSettingsTestCase.rb +41 -0
- metadata +193 -0
|
@@ -0,0 +1,672 @@
|
|
|
1
|
+
/* -*- C++ -*- */
|
|
2
|
+
|
|
3
|
+
/****************************************************************************
|
|
4
|
+
** Copyright (c) 2001-2014
|
|
5
|
+
**
|
|
6
|
+
** This file is part of the QuickFIX FIX Engine
|
|
7
|
+
**
|
|
8
|
+
** This file may be distributed under the terms of the quickfixengine.org
|
|
9
|
+
** license as defined by quickfixengine.org and appearing in the file
|
|
10
|
+
** LICENSE included in the packaging of this file.
|
|
11
|
+
**
|
|
12
|
+
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
|
|
13
|
+
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
14
|
+
**
|
|
15
|
+
** See http://www.quickfixengine.org/LICENSE for licensing information.
|
|
16
|
+
**
|
|
17
|
+
** Contact ask@quickfixengine.org if any conditions of this licensing are
|
|
18
|
+
** not clear to you.
|
|
19
|
+
**
|
|
20
|
+
****************************************************************************/
|
|
21
|
+
|
|
22
|
+
#ifndef FIX_FIELD
|
|
23
|
+
#define FIX_FIELD
|
|
24
|
+
|
|
25
|
+
#ifdef _MSC_VER
|
|
26
|
+
#pragma warning( disable : 4786 )
|
|
27
|
+
#endif
|
|
28
|
+
|
|
29
|
+
#include <sstream>
|
|
30
|
+
#include <numeric>
|
|
31
|
+
#include "FieldNumbers.h"
|
|
32
|
+
#include "FieldConvertors.h"
|
|
33
|
+
#include "FieldTypes.h"
|
|
34
|
+
#include "Utility.h"
|
|
35
|
+
|
|
36
|
+
namespace FIX
|
|
37
|
+
{
|
|
38
|
+
/**
|
|
39
|
+
* Base representation of all Field classes.
|
|
40
|
+
*
|
|
41
|
+
* This base class is the lowest common denominator of all fields. It
|
|
42
|
+
* keeps all fields in its most generic string representation with its
|
|
43
|
+
* integer tag.
|
|
44
|
+
*/
|
|
45
|
+
class FieldBase
|
|
46
|
+
{
|
|
47
|
+
|
|
48
|
+
/// Class used to store field metrics like total length and checksum
|
|
49
|
+
class field_metrics
|
|
50
|
+
{
|
|
51
|
+
public:
|
|
52
|
+
|
|
53
|
+
field_metrics( const size_t length, const int checksum )
|
|
54
|
+
: m_length( length )
|
|
55
|
+
, m_checksum( checksum )
|
|
56
|
+
{}
|
|
57
|
+
|
|
58
|
+
size_t getLength() const
|
|
59
|
+
{ return m_length; }
|
|
60
|
+
|
|
61
|
+
int getCheckSum() const
|
|
62
|
+
{ return m_checksum; }
|
|
63
|
+
|
|
64
|
+
bool isValid() const
|
|
65
|
+
{ return m_length > 0; }
|
|
66
|
+
|
|
67
|
+
private:
|
|
68
|
+
|
|
69
|
+
size_t m_length;
|
|
70
|
+
int m_checksum;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
friend class Message;
|
|
74
|
+
|
|
75
|
+
/// Constructor which also calculates field metrics
|
|
76
|
+
FieldBase( int field,
|
|
77
|
+
std::string::const_iterator valueStart,
|
|
78
|
+
std::string::const_iterator valueEnd,
|
|
79
|
+
std::string::const_iterator tagStart,
|
|
80
|
+
std::string::const_iterator tagEnd )
|
|
81
|
+
: m_field( field )
|
|
82
|
+
, m_string( valueStart, valueEnd )
|
|
83
|
+
, m_metrics( calculateMetrics( tagStart, tagEnd ) )
|
|
84
|
+
{}
|
|
85
|
+
|
|
86
|
+
public:
|
|
87
|
+
FieldBase( int field, const std::string& string )
|
|
88
|
+
: m_field( field ), m_string(string), m_metrics( no_metrics() )
|
|
89
|
+
{}
|
|
90
|
+
|
|
91
|
+
virtual ~FieldBase() {}
|
|
92
|
+
|
|
93
|
+
void setField( int field )
|
|
94
|
+
{
|
|
95
|
+
m_field = field;
|
|
96
|
+
m_metrics = no_metrics();
|
|
97
|
+
m_data.clear();
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
void setString( const std::string& string )
|
|
101
|
+
{
|
|
102
|
+
m_string = string;
|
|
103
|
+
m_metrics = no_metrics();
|
|
104
|
+
m_data.clear();
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Get the fields integer tag.
|
|
108
|
+
int getField() const
|
|
109
|
+
{ return m_field; }
|
|
110
|
+
|
|
111
|
+
/// Get the string representation of the fields value.
|
|
112
|
+
const std::string& getString() const
|
|
113
|
+
{ return m_string; }
|
|
114
|
+
|
|
115
|
+
/// Get the string representation of the Field (i.e.) 55=MSFT[SOH]
|
|
116
|
+
const std::string& getFixString() const
|
|
117
|
+
{
|
|
118
|
+
if( m_data.empty() )
|
|
119
|
+
encodeTo( m_data );
|
|
120
|
+
|
|
121
|
+
return m_data;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/// Get the length of the fields string representation
|
|
125
|
+
size_t getLength() const
|
|
126
|
+
{
|
|
127
|
+
calculate();
|
|
128
|
+
return m_metrics.getLength();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// Get the total value the fields characters added together
|
|
132
|
+
int getTotal() const
|
|
133
|
+
{
|
|
134
|
+
calculate();
|
|
135
|
+
return m_metrics.getCheckSum();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// Compares fields based on their tag numbers
|
|
139
|
+
bool operator < ( const FieldBase& field ) const
|
|
140
|
+
{ return m_field < field.m_field; }
|
|
141
|
+
|
|
142
|
+
private:
|
|
143
|
+
|
|
144
|
+
void calculate() const
|
|
145
|
+
{
|
|
146
|
+
if( m_metrics.isValid() ) return;
|
|
147
|
+
|
|
148
|
+
m_metrics = calculateMetrics( getFixString() );
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/// Serializes string representation of the Field to input string
|
|
152
|
+
void encodeTo( std::string& result ) const
|
|
153
|
+
{
|
|
154
|
+
size_t tagLength = FIX::number_of_symbols_in( m_field ) + 1;
|
|
155
|
+
size_t totalLength = tagLength + m_string.length() + 1;
|
|
156
|
+
|
|
157
|
+
result.resize( totalLength );
|
|
158
|
+
|
|
159
|
+
char * buf = (char*)result.c_str();
|
|
160
|
+
FIX::integer_to_string( buf, tagLength, m_field );
|
|
161
|
+
|
|
162
|
+
buf[tagLength - 1] = '=';
|
|
163
|
+
memcpy( buf + tagLength, m_string.data(), m_string.length() );
|
|
164
|
+
buf[totalLength - 1] = '\001';
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
static field_metrics no_metrics()
|
|
168
|
+
{
|
|
169
|
+
return field_metrics( 0, 0 );
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/// Calculate metrics for any input string
|
|
173
|
+
static field_metrics calculateMetrics(
|
|
174
|
+
std::string::const_iterator const start,
|
|
175
|
+
std::string::const_iterator const end )
|
|
176
|
+
{
|
|
177
|
+
int checksum = 0;
|
|
178
|
+
for ( std::string::const_iterator str = start; str != end; ++str )
|
|
179
|
+
checksum += (unsigned char)( *str );
|
|
180
|
+
|
|
181
|
+
return field_metrics( std::distance( start, end ), checksum );
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
static field_metrics calculateMetrics( const std::string& field )
|
|
185
|
+
{
|
|
186
|
+
return calculateMetrics( field.begin(), field.end() );
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
int m_field;
|
|
190
|
+
std::string m_string;
|
|
191
|
+
mutable std::string m_data;
|
|
192
|
+
mutable field_metrics m_metrics;
|
|
193
|
+
};
|
|
194
|
+
/*! @} */
|
|
195
|
+
|
|
196
|
+
inline std::ostream& operator <<
|
|
197
|
+
( std::ostream& stream, const FieldBase& field )
|
|
198
|
+
{
|
|
199
|
+
stream << field.getString();
|
|
200
|
+
return stream;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* MSC doesn't support partial template specialization so we have this.
|
|
205
|
+
* this is here to provide equality checking against native char arrays.
|
|
206
|
+
*/
|
|
207
|
+
class StringField : public FieldBase
|
|
208
|
+
{
|
|
209
|
+
public:
|
|
210
|
+
explicit StringField( int field, const std::string& data )
|
|
211
|
+
: FieldBase( field, data ) {}
|
|
212
|
+
StringField( int field )
|
|
213
|
+
: FieldBase( field, "" ) {}
|
|
214
|
+
|
|
215
|
+
void setValue( const std::string& value )
|
|
216
|
+
{ setString( value ); }
|
|
217
|
+
const std::string& getValue() const
|
|
218
|
+
{ return getString(); }
|
|
219
|
+
operator const std::string&() const
|
|
220
|
+
{ return getString(); }
|
|
221
|
+
|
|
222
|
+
bool operator<( const StringField& rhs ) const
|
|
223
|
+
{ return getString() < rhs.getString(); }
|
|
224
|
+
bool operator>( const StringField& rhs ) const
|
|
225
|
+
{ return getString() > rhs.getString(); }
|
|
226
|
+
bool operator==( const StringField& rhs ) const
|
|
227
|
+
{ return getString() == rhs.getString(); }
|
|
228
|
+
bool operator!=( const StringField& rhs ) const
|
|
229
|
+
{ return getString() != rhs.getString(); }
|
|
230
|
+
bool operator<=( const StringField& rhs ) const
|
|
231
|
+
{ return getString() <= rhs.getString(); }
|
|
232
|
+
bool operator>=( const StringField& rhs ) const
|
|
233
|
+
{ return getString() >= rhs.getString(); }
|
|
234
|
+
friend bool operator<( const StringField&, const char* );
|
|
235
|
+
friend bool operator<( const char*, const StringField& );
|
|
236
|
+
friend bool operator>( const StringField&, const char* );
|
|
237
|
+
friend bool operator>( const char*, const StringField& );
|
|
238
|
+
friend bool operator==( const StringField&, const char* );
|
|
239
|
+
friend bool operator==( const char*, const StringField& );
|
|
240
|
+
friend bool operator!=( const StringField&, const char* );
|
|
241
|
+
friend bool operator!=( const char*, const StringField& );
|
|
242
|
+
friend bool operator<=( const StringField&, const char* );
|
|
243
|
+
friend bool operator<=( const char*, const StringField& );
|
|
244
|
+
friend bool operator>=( const StringField&, const char* );
|
|
245
|
+
friend bool operator>=( const char*, const StringField& );
|
|
246
|
+
|
|
247
|
+
friend bool operator<( const StringField&, const std::string& );
|
|
248
|
+
friend bool operator<( const std::string&, const StringField& );
|
|
249
|
+
friend bool operator>( const StringField&, const std::string& );
|
|
250
|
+
friend bool operator>( const std::string&, const StringField& );
|
|
251
|
+
friend bool operator==( const StringField&, const std::string& );
|
|
252
|
+
friend bool operator==( const std::string&, const StringField& );
|
|
253
|
+
friend bool operator!=( const StringField&, const std::string& );
|
|
254
|
+
friend bool operator!=( const std::string&, const StringField& );
|
|
255
|
+
friend bool operator<=( const StringField&, const std::string& );
|
|
256
|
+
friend bool operator<=( const std::string&, const StringField& );
|
|
257
|
+
friend bool operator>=( const StringField&, const std::string& );
|
|
258
|
+
friend bool operator>=( const std::string&, const StringField& );
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
inline bool operator<( const StringField& lhs, const char* rhs )
|
|
262
|
+
{ return lhs.getValue() < rhs; }
|
|
263
|
+
inline bool operator<( const char* lhs, const StringField& rhs )
|
|
264
|
+
{ return lhs < rhs.getValue(); }
|
|
265
|
+
inline bool operator>( const StringField& lhs, const char* rhs )
|
|
266
|
+
{ return lhs.getValue() > rhs; }
|
|
267
|
+
inline bool operator>( const char* lhs, const StringField& rhs )
|
|
268
|
+
{ return lhs > rhs.getValue(); }
|
|
269
|
+
inline bool operator==( const StringField& lhs, const char* rhs )
|
|
270
|
+
{ return lhs.getValue() == rhs; }
|
|
271
|
+
inline bool operator==( const char* lhs, const StringField& rhs )
|
|
272
|
+
{ return lhs == rhs.getValue(); }
|
|
273
|
+
inline bool operator!=( const StringField& lhs, const char* rhs )
|
|
274
|
+
{ return lhs.getValue() != rhs; }
|
|
275
|
+
inline bool operator!=( const char* lhs, const StringField& rhs )
|
|
276
|
+
{ return lhs != rhs.getValue(); }
|
|
277
|
+
inline bool operator<=( const StringField& lhs, const char* rhs )
|
|
278
|
+
{ return lhs.getValue() <= rhs; }
|
|
279
|
+
inline bool operator<=( const char* lhs, const StringField& rhs )
|
|
280
|
+
{ return lhs <= rhs.getValue(); }
|
|
281
|
+
inline bool operator>=( const StringField& lhs, const char* rhs )
|
|
282
|
+
{ return lhs.getValue() >= rhs; }
|
|
283
|
+
inline bool operator>=( const char* lhs, const StringField& rhs )
|
|
284
|
+
{ return lhs >= rhs.getValue(); }
|
|
285
|
+
|
|
286
|
+
inline bool operator<( const StringField& lhs, const std::string& rhs )
|
|
287
|
+
{ return lhs.getValue() < rhs; }
|
|
288
|
+
inline bool operator<( const std::string& lhs, const StringField& rhs )
|
|
289
|
+
{ return lhs < rhs.getValue(); }
|
|
290
|
+
inline bool operator>( const StringField& lhs, const std::string& rhs )
|
|
291
|
+
{ return lhs.getValue() > rhs; }
|
|
292
|
+
inline bool operator>( const std::string& lhs, const StringField& rhs )
|
|
293
|
+
{ return lhs > rhs.getValue(); }
|
|
294
|
+
inline bool operator==( const StringField& lhs, const std::string& rhs )
|
|
295
|
+
{ return lhs.getValue() == rhs; }
|
|
296
|
+
inline bool operator==( const std::string& lhs, const StringField& rhs )
|
|
297
|
+
{ return lhs == rhs.getValue(); }
|
|
298
|
+
inline bool operator!=( const StringField& lhs, const std::string& rhs )
|
|
299
|
+
{ return lhs.getValue() != rhs; }
|
|
300
|
+
inline bool operator!=( const std::string& lhs, const StringField& rhs )
|
|
301
|
+
{ return lhs != rhs.getValue(); }
|
|
302
|
+
inline bool operator<=( const StringField& lhs, const std::string& rhs )
|
|
303
|
+
{ return lhs.getValue() <= rhs; }
|
|
304
|
+
inline bool operator<=( const std::string& lhs, const StringField& rhs )
|
|
305
|
+
{ return lhs <= rhs.getValue(); }
|
|
306
|
+
inline bool operator>=( const StringField& lhs, const std::string& rhs )
|
|
307
|
+
{ return lhs.getValue() >= rhs; }
|
|
308
|
+
inline bool operator>=( const std::string& lhs, const StringField& rhs )
|
|
309
|
+
{ return lhs >= rhs.getValue(); }
|
|
310
|
+
|
|
311
|
+
/// Field that contains a character value
|
|
312
|
+
class CharField : public FieldBase
|
|
313
|
+
{
|
|
314
|
+
public:
|
|
315
|
+
explicit CharField( int field, char data )
|
|
316
|
+
: FieldBase( field, CharConvertor::convert( data ) ) {}
|
|
317
|
+
CharField( int field )
|
|
318
|
+
: FieldBase( field, "" ) {}
|
|
319
|
+
|
|
320
|
+
void setValue( char value )
|
|
321
|
+
{ setString( CharConvertor::convert( value ) ); }
|
|
322
|
+
char getValue() const throw ( IncorrectDataFormat )
|
|
323
|
+
{ try
|
|
324
|
+
{ return CharConvertor::convert( getString() ); }
|
|
325
|
+
catch( FieldConvertError& )
|
|
326
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
327
|
+
operator char() const
|
|
328
|
+
{ return getValue(); }
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
/// Field that contains a double value
|
|
332
|
+
class DoubleField : public FieldBase
|
|
333
|
+
{
|
|
334
|
+
public:
|
|
335
|
+
explicit DoubleField( int field, double data, int padding = 0 )
|
|
336
|
+
: FieldBase( field, DoubleConvertor::convert( data, padding ) ) {}
|
|
337
|
+
DoubleField( int field )
|
|
338
|
+
: FieldBase( field, "" ) {}
|
|
339
|
+
|
|
340
|
+
void setValue( double value, int padding = 0 )
|
|
341
|
+
{ setString( DoubleConvertor::convert( value, padding ) ); }
|
|
342
|
+
double getValue() const throw ( IncorrectDataFormat )
|
|
343
|
+
{ try
|
|
344
|
+
{ return DoubleConvertor::convert( getString() ); }
|
|
345
|
+
catch( FieldConvertError& )
|
|
346
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
347
|
+
operator double() const
|
|
348
|
+
{ return getValue(); }
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
/// Field that contains an integer value
|
|
352
|
+
class IntField : public FieldBase
|
|
353
|
+
{
|
|
354
|
+
public:
|
|
355
|
+
explicit IntField( int field, int data )
|
|
356
|
+
: FieldBase( field, IntConvertor::convert( data ) ) {}
|
|
357
|
+
IntField( int field )
|
|
358
|
+
: FieldBase( field, "" ) {}
|
|
359
|
+
|
|
360
|
+
void setValue( int value )
|
|
361
|
+
{ setString( IntConvertor::convert( value ) ); }
|
|
362
|
+
int getValue() const throw ( IncorrectDataFormat )
|
|
363
|
+
{ try
|
|
364
|
+
{ return IntConvertor::convert( getString() ); }
|
|
365
|
+
catch( FieldConvertError& )
|
|
366
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
367
|
+
operator const int() const
|
|
368
|
+
{ return getValue(); }
|
|
369
|
+
};
|
|
370
|
+
|
|
371
|
+
/// Field that contains a boolean value
|
|
372
|
+
class BoolField : public FieldBase
|
|
373
|
+
{
|
|
374
|
+
public:
|
|
375
|
+
explicit BoolField( int field, bool data )
|
|
376
|
+
: FieldBase( field, BoolConvertor::convert( data ) ) {}
|
|
377
|
+
BoolField( int field )
|
|
378
|
+
: FieldBase( field, "" ) {}
|
|
379
|
+
|
|
380
|
+
void setValue( bool value )
|
|
381
|
+
{ setString( BoolConvertor::convert( value ) ); }
|
|
382
|
+
bool getValue() const throw ( IncorrectDataFormat )
|
|
383
|
+
{ try
|
|
384
|
+
{ return BoolConvertor::convert( getString() ); }
|
|
385
|
+
catch( FieldConvertError& )
|
|
386
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
387
|
+
operator bool() const
|
|
388
|
+
{ return getValue(); }
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
/// Field that contains a UTC time stamp value
|
|
392
|
+
class UtcTimeStampField : public FieldBase
|
|
393
|
+
{
|
|
394
|
+
public:
|
|
395
|
+
explicit UtcTimeStampField( int field, const UtcTimeStamp& data, bool showMilliseconds = false )
|
|
396
|
+
: FieldBase( field, UtcTimeStampConvertor::convert( data, showMilliseconds ) ) {}
|
|
397
|
+
UtcTimeStampField( int field, bool showMilliseconds = false )
|
|
398
|
+
: FieldBase( field, UtcTimeStampConvertor::convert( UtcTimeStamp(), showMilliseconds ) ) {}
|
|
399
|
+
|
|
400
|
+
void setValue( const UtcTimeStamp& value )
|
|
401
|
+
{ setString( UtcTimeStampConvertor::convert( value ) ); }
|
|
402
|
+
UtcTimeStamp getValue() const throw ( IncorrectDataFormat )
|
|
403
|
+
{ try
|
|
404
|
+
{ return UtcTimeStampConvertor::convert( getString() ); }
|
|
405
|
+
catch( FieldConvertError& )
|
|
406
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
407
|
+
operator UtcTimeStamp() const
|
|
408
|
+
{ return getValue(); }
|
|
409
|
+
|
|
410
|
+
bool operator<( const UtcTimeStampField& rhs ) const
|
|
411
|
+
{ return getValue() < rhs.getValue(); }
|
|
412
|
+
bool operator==( const UtcTimeStampField& rhs ) const
|
|
413
|
+
{ return getValue() == rhs.getValue(); }
|
|
414
|
+
bool operator!=( const UtcTimeStampField& rhs ) const
|
|
415
|
+
{ return getValue() != rhs.getValue(); }
|
|
416
|
+
};
|
|
417
|
+
|
|
418
|
+
/// Field that contains a UTC date value
|
|
419
|
+
class UtcDateField : public FieldBase
|
|
420
|
+
{
|
|
421
|
+
public:
|
|
422
|
+
explicit UtcDateField( int field, const UtcDate& data )
|
|
423
|
+
: FieldBase( field, UtcDateConvertor::convert( data ) ) {}
|
|
424
|
+
UtcDateField( int field )
|
|
425
|
+
: FieldBase( field, UtcDateConvertor::convert( UtcDate() ) ) {}
|
|
426
|
+
|
|
427
|
+
void setValue( const UtcDate& value )
|
|
428
|
+
{ setString( UtcDateConvertor::convert( value ) ); }
|
|
429
|
+
UtcDate getValue() const throw ( IncorrectDataFormat )
|
|
430
|
+
{ try
|
|
431
|
+
{ return UtcDateConvertor::convert( getString() ); }
|
|
432
|
+
catch( FieldConvertError& )
|
|
433
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
434
|
+
operator UtcDate() const
|
|
435
|
+
{ return getValue(); }
|
|
436
|
+
|
|
437
|
+
bool operator<( const UtcDateField& rhs ) const
|
|
438
|
+
{ return getValue() < rhs.getValue(); }
|
|
439
|
+
bool operator==( const UtcDateField& rhs ) const
|
|
440
|
+
{ return getValue() == rhs.getValue(); }
|
|
441
|
+
bool operator!=( const UtcDateField& rhs ) const
|
|
442
|
+
{ return getValue() != rhs.getValue(); }
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
/// Field that contains a UTC time value
|
|
446
|
+
class UtcTimeOnlyField : public FieldBase
|
|
447
|
+
{
|
|
448
|
+
public:
|
|
449
|
+
explicit UtcTimeOnlyField( int field, const UtcTimeOnly& data, bool showMilliseconds = false )
|
|
450
|
+
: FieldBase( field, UtcTimeOnlyConvertor::convert( data, showMilliseconds ) ) {}
|
|
451
|
+
UtcTimeOnlyField( int field, bool showMilliseconds = false )
|
|
452
|
+
: FieldBase( field, UtcTimeOnlyConvertor::convert( UtcTimeOnly(), showMilliseconds ) ) {}
|
|
453
|
+
|
|
454
|
+
void setValue( const UtcTimeOnly& value )
|
|
455
|
+
{ setString( UtcTimeOnlyConvertor::convert( value ) ); }
|
|
456
|
+
UtcTimeOnly getValue() const throw ( IncorrectDataFormat )
|
|
457
|
+
{ try
|
|
458
|
+
{ return UtcTimeOnlyConvertor::convert( getString() ); }
|
|
459
|
+
catch( FieldConvertError& )
|
|
460
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
461
|
+
operator UtcTimeOnly() const
|
|
462
|
+
{ return getValue(); }
|
|
463
|
+
|
|
464
|
+
bool operator<( const UtcTimeOnlyField& rhs ) const
|
|
465
|
+
{ return getValue() < rhs.getValue(); }
|
|
466
|
+
bool operator==( const UtcTimeOnlyField& rhs ) const
|
|
467
|
+
{ return getValue() == rhs.getValue(); }
|
|
468
|
+
bool operator!=( const UtcTimeOnlyField& rhs ) const
|
|
469
|
+
{ return getValue() != rhs.getValue(); }
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
/// Field that contains a checksum value
|
|
473
|
+
class CheckSumField : public FieldBase
|
|
474
|
+
{
|
|
475
|
+
public:
|
|
476
|
+
explicit CheckSumField( int field, int data )
|
|
477
|
+
: FieldBase( field, CheckSumConvertor::convert( data ) ) {}
|
|
478
|
+
CheckSumField( int field )
|
|
479
|
+
: FieldBase( field, "" ) {}
|
|
480
|
+
|
|
481
|
+
void setValue( int value )
|
|
482
|
+
{ setString( CheckSumConvertor::convert( value ) ); }
|
|
483
|
+
int getValue() const throw ( IncorrectDataFormat )
|
|
484
|
+
{ try
|
|
485
|
+
{ return CheckSumConvertor::convert( getString() ); }
|
|
486
|
+
catch( FieldConvertError& )
|
|
487
|
+
{ throw IncorrectDataFormat( getField(), getString() ); } }
|
|
488
|
+
operator const int() const
|
|
489
|
+
{ return getValue(); }
|
|
490
|
+
};
|
|
491
|
+
|
|
492
|
+
typedef DoubleField PriceField;
|
|
493
|
+
typedef DoubleField AmtField;
|
|
494
|
+
typedef DoubleField QtyField;
|
|
495
|
+
typedef StringField CurrencyField;
|
|
496
|
+
typedef StringField MultipleValueStringField;
|
|
497
|
+
typedef StringField MultipleStringValueField;
|
|
498
|
+
typedef StringField MultipleCharValueField;
|
|
499
|
+
typedef StringField ExchangeField;
|
|
500
|
+
typedef StringField LocalMktDateField;
|
|
501
|
+
typedef StringField DataField;
|
|
502
|
+
typedef DoubleField FloatField;
|
|
503
|
+
typedef DoubleField PriceOffsetField;
|
|
504
|
+
typedef StringField MonthField;
|
|
505
|
+
typedef StringField MonthYearField;
|
|
506
|
+
typedef StringField DayOfMonthField;
|
|
507
|
+
typedef UtcDateField UtcDateOnlyField;
|
|
508
|
+
typedef IntField LengthField;
|
|
509
|
+
typedef IntField NumInGroupField;
|
|
510
|
+
typedef IntField SeqNumField;
|
|
511
|
+
typedef DoubleField PercentageField;
|
|
512
|
+
typedef StringField CountryField;
|
|
513
|
+
typedef StringField TzTimeOnlyField;
|
|
514
|
+
typedef StringField TzTimeStampField;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
#define DEFINE_FIELD_CLASS_NUM( NAME, TOK, TYPE, NUM ) \
|
|
518
|
+
class NAME : public TOK##Field { public: \
|
|
519
|
+
NAME() : TOK##Field(NUM) {} \
|
|
520
|
+
NAME(const TYPE& value) : TOK##Field(NUM, value) {} \
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
#define DEFINE_FIELD_CLASS( NAME, TOK, TYPE ) \
|
|
524
|
+
DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
|
|
525
|
+
|
|
526
|
+
#define DEFINE_DEPRECATED_FIELD_CLASS( NAME, TOK, TYPE ) \
|
|
527
|
+
DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, DEPRECATED_FIELD::NAME)
|
|
528
|
+
|
|
529
|
+
#define DEFINE_FIELD_TIMECLASS_NUM( NAME, TOK, TYPE, NUM ) \
|
|
530
|
+
class NAME : public TOK##Field { public: \
|
|
531
|
+
NAME() : TOK##Field(NUM, false) {} \
|
|
532
|
+
NAME(bool showMilliseconds) : TOK##Field(NUM, showMilliseconds) {} \
|
|
533
|
+
NAME(const TYPE& value) : TOK##Field(NUM, value) {} \
|
|
534
|
+
NAME(const TYPE& value, bool showMilliseconds) : TOK##Field(NUM, value, showMilliseconds) {} \
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
#define DEFINE_FIELD_TIMECLASS( NAME, TOK, TYPE ) \
|
|
538
|
+
DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
|
|
539
|
+
|
|
540
|
+
#define DEFINE_DEPRECATED_FIELD_TIMECLASS( NAME, TOK, TYPE ) \
|
|
541
|
+
DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, DEPRECATED_FIELD::NAME)
|
|
542
|
+
|
|
543
|
+
#define DEFINE_CHECKSUM( NAME ) \
|
|
544
|
+
DEFINE_FIELD_CLASS(NAME, CheckSum, FIX::INT)
|
|
545
|
+
#define DEFINE_STRING( NAME ) \
|
|
546
|
+
DEFINE_FIELD_CLASS(NAME, String, FIX::STRING)
|
|
547
|
+
#define DEFINE_CHAR( NAME ) \
|
|
548
|
+
DEFINE_FIELD_CLASS(NAME, Char, FIX::CHAR)
|
|
549
|
+
#define DEFINE_PRICE( NAME ) \
|
|
550
|
+
DEFINE_FIELD_CLASS(NAME, Price, FIX::PRICE)
|
|
551
|
+
#define DEFINE_INT( NAME ) \
|
|
552
|
+
DEFINE_FIELD_CLASS(NAME, Int, FIX::INT)
|
|
553
|
+
#define DEFINE_AMT( NAME ) \
|
|
554
|
+
DEFINE_FIELD_CLASS(NAME, Amt, FIX::AMT)
|
|
555
|
+
#define DEFINE_QTY( NAME ) \
|
|
556
|
+
DEFINE_FIELD_CLASS(NAME, Qty, FIX::QTY)
|
|
557
|
+
#define DEFINE_CURRENCY( NAME ) \
|
|
558
|
+
DEFINE_FIELD_CLASS(NAME, Currency, FIX::CURRENCY)
|
|
559
|
+
#define DEFINE_MULTIPLEVALUESTRING( NAME ) \
|
|
560
|
+
DEFINE_FIELD_CLASS(NAME, MultipleValueString, FIX::MULTIPLEVALUESTRING)
|
|
561
|
+
#define DEFINE_MULTIPLESTRINGVALUE( NAME ) \
|
|
562
|
+
DEFINE_FIELD_CLASS(NAME, MultipleStringValue, FIX::MULTIPLESTRINGVALUE)
|
|
563
|
+
#define DEFINE_MULTIPLECHARVALUE( NAME ) \
|
|
564
|
+
DEFINE_FIELD_CLASS(NAME, MultipleCharValue, FIX::MULTIPLECHARVALUE)
|
|
565
|
+
#define DEFINE_EXCHANGE( NAME ) \
|
|
566
|
+
DEFINE_FIELD_CLASS(NAME, Exchange, FIX::EXCHANGE)
|
|
567
|
+
#define DEFINE_UTCTIMESTAMP( NAME ) \
|
|
568
|
+
DEFINE_FIELD_TIMECLASS(NAME, UtcTimeStamp, FIX::UTCTIMESTAMP)
|
|
569
|
+
#define DEFINE_BOOLEAN( NAME ) \
|
|
570
|
+
DEFINE_FIELD_CLASS(NAME, Bool, FIX::BOOLEAN)
|
|
571
|
+
#define DEFINE_LOCALMKTDATE( NAME ) \
|
|
572
|
+
DEFINE_FIELD_CLASS(NAME, String, FIX::LOCALMKTDATE)
|
|
573
|
+
#define DEFINE_DATA( NAME ) \
|
|
574
|
+
DEFINE_FIELD_CLASS(NAME, Data, FIX::DATA)
|
|
575
|
+
#define DEFINE_FLOAT( NAME ) \
|
|
576
|
+
DEFINE_FIELD_CLASS(NAME, Float, FIX::FLOAT)
|
|
577
|
+
#define DEFINE_PRICEOFFSET( NAME ) \
|
|
578
|
+
DEFINE_FIELD_CLASS(NAME, PriceOffset, FIX::PRICEOFFSET)
|
|
579
|
+
#define DEFINE_MONTHYEAR( NAME ) \
|
|
580
|
+
DEFINE_FIELD_CLASS(NAME, MonthYear, FIX::MONTHYEAR)
|
|
581
|
+
#define DEFINE_DAYOFMONTH( NAME ) \
|
|
582
|
+
DEFINE_FIELD_CLASS(NAME, DayOfMonth, FIX::DAYOFMONTH)
|
|
583
|
+
#define DEFINE_UTCDATE( NAME ) \
|
|
584
|
+
DEFINE_FIELD_CLASS(NAME, UtcDate, FIX::UTCDATE)
|
|
585
|
+
#define DEFINE_UTCDATEONLY( NAME ) \
|
|
586
|
+
DEFINE_FIELD_CLASS(NAME, UtcDateOnly, FIX::UTCDATEONLY)
|
|
587
|
+
#define DEFINE_UTCTIMEONLY( NAME ) \
|
|
588
|
+
DEFINE_FIELD_CLASS(NAME, UtcTimeOnly, FIX::UTCTIMEONLY)
|
|
589
|
+
#define DEFINE_NUMINGROUP( NAME ) \
|
|
590
|
+
DEFINE_FIELD_CLASS(NAME, NumInGroup, FIX::NUMINGROUP)
|
|
591
|
+
#define DEFINE_SEQNUM( NAME ) \
|
|
592
|
+
DEFINE_FIELD_CLASS(NAME, SeqNum, FIX::SEQNUM)
|
|
593
|
+
#define DEFINE_LENGTH( NAME ) \
|
|
594
|
+
DEFINE_FIELD_CLASS(NAME, Length, FIX::LENGTH)
|
|
595
|
+
#define DEFINE_PERCENTAGE( NAME ) \
|
|
596
|
+
DEFINE_FIELD_CLASS(NAME, Percentage, FIX::PERCENTAGE)
|
|
597
|
+
#define DEFINE_COUNTRY( NAME ) \
|
|
598
|
+
DEFINE_FIELD_CLASS(NAME, Country, FIX::COUNTRY)
|
|
599
|
+
#define DEFINE_TZTIMEONLY( NAME ) \
|
|
600
|
+
DEFINE_FIELD_CLASS(NAME, String, FIX::TZTIMEONLY)
|
|
601
|
+
#define DEFINE_TZTIMESTAMP( NAME ) \
|
|
602
|
+
DEFINE_FIELD_CLASS(NAME, String, FIX::TZTIMESTAMP)
|
|
603
|
+
#define DEFINE_XMLDATA( NAME ) \
|
|
604
|
+
DEFINE_FIELD_CLASS(NAME, String, FIX::XMLDATA)
|
|
605
|
+
#define DEFINE_LANGUAGE( NAME ) \
|
|
606
|
+
DEFINE_FIELD_CLASS(NAME, String, FIX::LANGUAGE)
|
|
607
|
+
|
|
608
|
+
#define USER_DEFINE_STRING( NAME, NUM ) \
|
|
609
|
+
DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::STRING, NUM)
|
|
610
|
+
#define USER_DEFINE_CHAR( NAME, NUM ) \
|
|
611
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Char, FIX::CHAR, NUM)
|
|
612
|
+
#define USER_DEFINE_PRICE( NAME, NUM ) \
|
|
613
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Price, FIX::PRICE, NUM)
|
|
614
|
+
#define USER_DEFINE_INT( NAME, NUM ) \
|
|
615
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Int, FIX::INT, NUM)
|
|
616
|
+
#define USER_DEFINE_AMT( NAME, NUM ) \
|
|
617
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Amt, FIX::AMT, NUM)
|
|
618
|
+
#define USER_DEFINE_QTY( NAME, NUM ) \
|
|
619
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Qty, FIX::QTY, NUM)
|
|
620
|
+
#define USER_DEFINE_CURRENCY( NAME, NUM ) \
|
|
621
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Currency, FIX::CURRENCY, NUM)
|
|
622
|
+
#define USER_DEFINE_MULTIPLEVALUESTRING( NAME, NUM ) \
|
|
623
|
+
DEFINE_FIELD_CLASS_NUM(NAME, MultipleValueString, FIX::MULTIPLEVALUESTRING, NUM)
|
|
624
|
+
#define USER_DEFINE_MULTIPLESTRINGVALUE( NAME, NUM ) \
|
|
625
|
+
DEFINE_FIELD_CLASS_NUM(NAME, MultipleStringValue, FIX::MULTIPLESTRINGVALUE, NUM)
|
|
626
|
+
#define USER_DEFINE_MULTIPLECHARVALUE( NAME, NUM ) \
|
|
627
|
+
DEFINE_FIELD_CLASS_NUM(NAME, MultipleCharValue, FIX::MULTIPLECHARVALUE, NUM)
|
|
628
|
+
#define USER_DEFINE_EXCHANGE( NAME, NUM ) \
|
|
629
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Exchange, FIX::EXCHANGE, NUM)
|
|
630
|
+
#define USER_DEFINE_UTCTIMESTAMP( NAME, NUM ) \
|
|
631
|
+
DEFINE_FIELD_TIMECLASS_NUM(NAME, UtcTimeStamp, FIX::UTCTIMESTAMP, NUM)
|
|
632
|
+
#define USER_DEFINE_BOOLEAN( NAME, NUM ) \
|
|
633
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Bool, FIX::BOOLEAN, NUM)
|
|
634
|
+
#define USER_DEFINE_LOCALMKTDATE( NAME, NUM ) \
|
|
635
|
+
DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::STRING, NUM)
|
|
636
|
+
#define USER_DEFINE_DATA( NAME, NUM ) \
|
|
637
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Data, FIX::DATA, NUM)
|
|
638
|
+
#define USER_DEFINE_FLOAT( NAME, NUM ) \
|
|
639
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Float, FIX::FLOAT, NUM)
|
|
640
|
+
#define USER_DEFINE_PRICEOFFSET( NAME, NUM ) \
|
|
641
|
+
DEFINE_FIELD_CLASS_NUM(NAME, PriceOffset, FIX::PRICEOFFSET, NUM)
|
|
642
|
+
#define USER_DEFINE_MONTHYEAR( NAME, NUM ) \
|
|
643
|
+
DEFINE_FIELD_CLASS_NUM(NAME, MonthYear, FIX::MONTHYEAR, NUM)
|
|
644
|
+
#define USER_DEFINE_DAYOFMONTH( NAME, NUM ) \
|
|
645
|
+
DEFINE_FIELD_CLASS_NUM(NAME, DayOfMonth, FIX::DAYOFMONTH, NUM)
|
|
646
|
+
#define USER_DEFINE_UTCDATE( NAME, NUM ) \
|
|
647
|
+
DEFINE_FIELD_CLASS_NUM(NAME, UtcDate, FIX::UTCDATE, NUM)
|
|
648
|
+
#define USER_DEFINE_UTCDATEONLY( NAME, NUM ) \
|
|
649
|
+
DEFINE_FIELD_CLASS_NUM(NAME, UtcDateOnly, FIX::UTCDATEONLY, NUM)
|
|
650
|
+
#define USER_DEFINE_UTCTIMEONLY( NAME, NUM ) \
|
|
651
|
+
DEFINE_FIELD_CLASS_NUM(NAME, UtcTimeOnly, FIX::UTCTIMEONLY, NUM)
|
|
652
|
+
#define USER_DEFINE_NUMINGROUP( NAME, NUM ) \
|
|
653
|
+
DEFINE_FIELD_CLASS_NUM(NAME, NumInGroup, FIX::NUMINGROUP, NUM)
|
|
654
|
+
#define USER_DEFINE_SEQNUM( NAME, NUM ) \
|
|
655
|
+
DEFINE_FIELD_CLASS_NUM(NAME, SeqNum, FIX::SEQNUM, NUM)
|
|
656
|
+
#define USER_DEFINE_LENGTH( NAME, NUM ) \
|
|
657
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Length, FIX::LENGTH, NUM)
|
|
658
|
+
#define USER_DEFINE_PERCENTAGE( NAME, NUM ) \
|
|
659
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Percentage, FIX::PERCENTAGE, NUM)
|
|
660
|
+
#define USER_DEFINE_COUNTRY( NAME, NUM ) \
|
|
661
|
+
DEFINE_FIELD_CLASS_NUM(NAME, Country, FIX::COUNTRY, NUM)
|
|
662
|
+
#define USER_DEFINE_TZTIMEONLY( NAME, NUM ) \
|
|
663
|
+
DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::TZTIMEONLY, NUM)
|
|
664
|
+
#define USER_DEFINE_TZTIMESTAMP( NAME, NUM ) \
|
|
665
|
+
DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::TZTIMESTAMP, NUM)
|
|
666
|
+
#define USER_DEFINE_XMLDATA( NAME, NUM ) \
|
|
667
|
+
DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::XMLDATA, NUM)
|
|
668
|
+
#define USER_DEFINE_LANGUAGE( NAME, NUM ) \
|
|
669
|
+
DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::LANGUAGE, NUM)
|
|
670
|
+
|
|
671
|
+
#endif
|
|
672
|
+
|