quickfix_ruby_ud 2.0.7-x86_64-linux
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 +257 -0
- data/ext/quickfix/Acceptor.h +127 -0
- data/ext/quickfix/Allocator.h +9 -0
- data/ext/quickfix/Application.h +137 -0
- data/ext/quickfix/DOMDocument.h +70 -0
- data/ext/quickfix/DataDictionary.cpp +679 -0
- data/ext/quickfix/DataDictionary.h +607 -0
- data/ext/quickfix/DataDictionaryProvider.cpp +66 -0
- data/ext/quickfix/DataDictionaryProvider.h +67 -0
- data/ext/quickfix/DatabaseConnectionID.h +98 -0
- data/ext/quickfix/DatabaseConnectionPool.h +84 -0
- data/ext/quickfix/Dictionary.cpp +157 -0
- data/ext/quickfix/Dictionary.h +89 -0
- data/ext/quickfix/Event.h +89 -0
- data/ext/quickfix/Except.h +39 -0
- data/ext/quickfix/Exceptions.h +257 -0
- data/ext/quickfix/Field.h +654 -0
- data/ext/quickfix/FieldConvertors.cpp +86 -0
- data/ext/quickfix/FieldConvertors.h +800 -0
- data/ext/quickfix/FieldMap.cpp +254 -0
- data/ext/quickfix/FieldMap.h +327 -0
- data/ext/quickfix/FieldNumbers.h +44 -0
- data/ext/quickfix/FieldTypes.cpp +62 -0
- data/ext/quickfix/FieldTypes.h +817 -0
- data/ext/quickfix/Fields.h +30 -0
- data/ext/quickfix/FileLog.cpp +176 -0
- data/ext/quickfix/FileLog.h +110 -0
- data/ext/quickfix/FileStore.cpp +369 -0
- data/ext/quickfix/FileStore.h +131 -0
- data/ext/quickfix/FixCommonFields.h +13 -0
- data/ext/quickfix/FixFieldNumbers.h +6132 -0
- data/ext/quickfix/FixFields.h +6133 -0
- data/ext/quickfix/FixValues.h +5790 -0
- data/ext/quickfix/Group.cpp +44 -0
- data/ext/quickfix/Group.h +78 -0
- data/ext/quickfix/HostDetailsProvider.cpp +79 -0
- data/ext/quickfix/HostDetailsProvider.h +44 -0
- data/ext/quickfix/HtmlBuilder.h +178 -0
- data/ext/quickfix/HttpConnection.cpp +914 -0
- data/ext/quickfix/HttpConnection.h +74 -0
- data/ext/quickfix/HttpMessage.cpp +229 -0
- data/ext/quickfix/HttpMessage.h +112 -0
- data/ext/quickfix/HttpParser.cpp +49 -0
- data/ext/quickfix/HttpParser.h +49 -0
- data/ext/quickfix/HttpServer.cpp +152 -0
- data/ext/quickfix/HttpServer.h +76 -0
- data/ext/quickfix/Initiator.cpp +310 -0
- data/ext/quickfix/Initiator.h +151 -0
- data/ext/quickfix/Log.cpp +71 -0
- data/ext/quickfix/Log.h +254 -0
- data/ext/quickfix/Message.cpp +617 -0
- data/ext/quickfix/Message.h +419 -0
- data/ext/quickfix/MessageCracker.h +171 -0
- data/ext/quickfix/MessageSorters.cpp +101 -0
- data/ext/quickfix/MessageSorters.h +185 -0
- data/ext/quickfix/MessageStore.cpp +182 -0
- data/ext/quickfix/MessageStore.h +164 -0
- data/ext/quickfix/Mutex.h +120 -0
- data/ext/quickfix/MySQLConnection.h +187 -0
- data/ext/quickfix/MySQLLog.cpp +262 -0
- data/ext/quickfix/MySQLLog.h +158 -0
- data/ext/quickfix/MySQLStore.cpp +323 -0
- data/ext/quickfix/MySQLStore.h +161 -0
- data/ext/quickfix/MySQLStubs.h +203 -0
- data/ext/quickfix/NullStore.cpp +40 -0
- data/ext/quickfix/NullStore.h +89 -0
- data/ext/quickfix/OdbcConnection.h +241 -0
- data/ext/quickfix/OdbcLog.cpp +230 -0
- data/ext/quickfix/OdbcLog.h +109 -0
- data/ext/quickfix/OdbcStore.cpp +313 -0
- data/ext/quickfix/OdbcStore.h +124 -0
- data/ext/quickfix/PUGIXML_DOMDocument.cpp +112 -0
- data/ext/quickfix/PUGIXML_DOMDocument.h +81 -0
- data/ext/quickfix/Parser.cpp +111 -0
- data/ext/quickfix/Parser.h +50 -0
- data/ext/quickfix/PostgreSQLConnection.h +163 -0
- data/ext/quickfix/PostgreSQLLog.cpp +263 -0
- data/ext/quickfix/PostgreSQLLog.h +157 -0
- data/ext/quickfix/PostgreSQLStore.cpp +327 -0
- data/ext/quickfix/PostgreSQLStore.h +160 -0
- data/ext/quickfix/PostgreSQLStubs.h +203 -0
- data/ext/quickfix/Queue.h +66 -0
- data/ext/quickfix/QuickfixRuby.cpp +131900 -0
- data/ext/quickfix/QuickfixRuby.h +56 -0
- data/ext/quickfix/Responder.h +41 -0
- data/ext/quickfix/SSLSocketAcceptor.cpp +409 -0
- data/ext/quickfix/SSLSocketAcceptor.h +186 -0
- data/ext/quickfix/SSLSocketConnection.cpp +434 -0
- data/ext/quickfix/SSLSocketConnection.h +221 -0
- data/ext/quickfix/SSLSocketInitiator.cpp +558 -0
- data/ext/quickfix/SSLSocketInitiator.h +203 -0
- data/ext/quickfix/SSLStubs.h +129 -0
- data/ext/quickfix/Session.cpp +1437 -0
- data/ext/quickfix/Session.h +343 -0
- data/ext/quickfix/SessionFactory.cpp +314 -0
- data/ext/quickfix/SessionFactory.h +84 -0
- data/ext/quickfix/SessionID.h +136 -0
- data/ext/quickfix/SessionSettings.cpp +165 -0
- data/ext/quickfix/SessionSettings.h +283 -0
- data/ext/quickfix/SessionState.h +260 -0
- data/ext/quickfix/Settings.cpp +160 -0
- data/ext/quickfix/Settings.h +56 -0
- data/ext/quickfix/SharedArray.h +274 -0
- data/ext/quickfix/SocketAcceptor.cpp +216 -0
- data/ext/quickfix/SocketAcceptor.h +77 -0
- data/ext/quickfix/SocketConnection.cpp +256 -0
- data/ext/quickfix/SocketConnection.h +102 -0
- data/ext/quickfix/SocketConnector.cpp +112 -0
- data/ext/quickfix/SocketConnector.h +76 -0
- data/ext/quickfix/SocketInitiator.cpp +241 -0
- data/ext/quickfix/SocketInitiator.h +76 -0
- data/ext/quickfix/SocketMonitor.h +26 -0
- data/ext/quickfix/SocketMonitor_UNIX.cpp +238 -0
- data/ext/quickfix/SocketMonitor_UNIX.h +101 -0
- data/ext/quickfix/SocketMonitor_WIN32.cpp +248 -0
- data/ext/quickfix/SocketMonitor_WIN32.h +99 -0
- data/ext/quickfix/SocketServer.cpp +163 -0
- data/ext/quickfix/SocketServer.h +100 -0
- data/ext/quickfix/ThreadedSSLSocketAcceptor.cpp +436 -0
- data/ext/quickfix/ThreadedSSLSocketAcceptor.h +209 -0
- data/ext/quickfix/ThreadedSSLSocketConnection.cpp +364 -0
- data/ext/quickfix/ThreadedSSLSocketConnection.h +191 -0
- data/ext/quickfix/ThreadedSSLSocketInitiator.cpp +434 -0
- data/ext/quickfix/ThreadedSSLSocketInitiator.h +193 -0
- data/ext/quickfix/ThreadedSocketAcceptor.cpp +242 -0
- data/ext/quickfix/ThreadedSocketAcceptor.h +95 -0
- data/ext/quickfix/ThreadedSocketConnection.cpp +227 -0
- data/ext/quickfix/ThreadedSocketConnection.h +89 -0
- data/ext/quickfix/ThreadedSocketInitiator.cpp +238 -0
- data/ext/quickfix/ThreadedSocketInitiator.h +78 -0
- data/ext/quickfix/TimeRange.cpp +227 -0
- data/ext/quickfix/TimeRange.h +215 -0
- data/ext/quickfix/Utility.cpp +639 -0
- data/ext/quickfix/Utility.h +255 -0
- data/ext/quickfix/UtilitySSL.cpp +1612 -0
- data/ext/quickfix/UtilitySSL.h +274 -0
- data/ext/quickfix/Values.h +63 -0
- data/ext/quickfix/config-all.h +10 -0
- data/ext/quickfix/config.h +10 -0
- data/ext/quickfix/config_unix.h +178 -0
- data/ext/quickfix/config_windows.h +0 -0
- data/ext/quickfix/dirent_windows.h +838 -0
- data/ext/quickfix/double-conversion/bignum-dtoa.cc +641 -0
- data/ext/quickfix/double-conversion/bignum-dtoa.h +84 -0
- data/ext/quickfix/double-conversion/bignum.cc +766 -0
- data/ext/quickfix/double-conversion/bignum.h +144 -0
- data/ext/quickfix/double-conversion/cached-powers.cc +176 -0
- data/ext/quickfix/double-conversion/cached-powers.h +64 -0
- data/ext/quickfix/double-conversion/diy-fp.cc +57 -0
- data/ext/quickfix/double-conversion/diy-fp.h +118 -0
- data/ext/quickfix/double-conversion/double-conversion.cc +994 -0
- data/ext/quickfix/double-conversion/double-conversion.h +543 -0
- data/ext/quickfix/double-conversion/fast-dtoa.cc +665 -0
- data/ext/quickfix/double-conversion/fast-dtoa.h +88 -0
- data/ext/quickfix/double-conversion/fixed-dtoa.cc +404 -0
- data/ext/quickfix/double-conversion/fixed-dtoa.h +56 -0
- data/ext/quickfix/double-conversion/ieee.h +402 -0
- data/ext/quickfix/double-conversion/strtod.cc +557 -0
- data/ext/quickfix/double-conversion/strtod.h +45 -0
- data/ext/quickfix/double-conversion/utils.h +374 -0
- data/ext/quickfix/extconf.rb +76 -0
- data/ext/quickfix/index.h +37 -0
- data/ext/quickfix/pugiconfig.hpp +77 -0
- data/ext/quickfix/pugixml.cpp +13237 -0
- data/ext/quickfix/pugixml.hpp +1516 -0
- data/ext/quickfix/scope_guard.hpp +215 -0
- data/ext/quickfix/stdint_msvc.h +254 -0
- data/ext/quickfix/strptime.h +7 -0
- data/lib/2.4/quickfix.so +0 -0
- data/lib/2.5/quickfix.so +0 -0
- data/lib/2.6/quickfix.so +0 -0
- data/lib/2.7/quickfix.so +0 -0
- data/lib/3.0/quickfix.so +0 -0
- data/lib/3.1/quickfix.so +0 -0
- data/lib/3.2/quickfix.so +0 -0
- data/lib/3.3/quickfix.so +0 -0
- data/lib/3.4/quickfix.so +0 -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 +14040 -0
- data/lib/quickfix50.rb +20051 -0
- data/lib/quickfix50sp1.rb +23596 -0
- data/lib/quickfix50sp2.rb +412444 -0
- data/lib/quickfix_fields.rb +79393 -0
- data/lib/quickfix_ruby.rb +82 -0
- data/lib/quickfixt11.rb +65 -0
- data/spec/FIX40.xml +862 -0
- data/spec/FIX41.xml +1282 -0
- data/spec/FIX42.xml +2743 -0
- data/spec/FIX43.xml +4230 -0
- data/spec/FIX44.xml +6600 -0
- data/spec/FIX50.xml +8142 -0
- data/spec/FIX50SP1.xml +9506 -0
- data/spec/FIX50SP2.xml +26069 -0
- data/spec/FIXT11.xml +252 -0
- data/test/DataDictionaryTestCase.rb +268 -0
- data/test/DictionaryTestCase.rb +112 -0
- data/test/FieldBaseTestCase.rb +24 -0
- data/test/MessageStoreTestCase.rb +19 -0
- data/test/MessageTestCase.rb +368 -0
- data/test/SessionSettingsTestCase.rb +41 -0
- metadata +247 -0
@@ -0,0 +1,654 @@
|
|
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 "FieldConvertors.h"
|
30
|
+
#include "FieldNumbers.h"
|
31
|
+
#include "FieldTypes.h"
|
32
|
+
#include "Utility.h"
|
33
|
+
#include <numeric>
|
34
|
+
#include <sstream>
|
35
|
+
|
36
|
+
#if defined(__SUNPRO_CC)
|
37
|
+
#include <algorithm>
|
38
|
+
#endif
|
39
|
+
|
40
|
+
namespace FIX {
|
41
|
+
/**
|
42
|
+
* Base representation of all Field classes.
|
43
|
+
*
|
44
|
+
* This base class is the lowest common denominator of all fields. It
|
45
|
+
* keeps all fields in its most generic string representation with its
|
46
|
+
* integer tag.
|
47
|
+
*/
|
48
|
+
class FieldBase {
|
49
|
+
|
50
|
+
/// Class used to store field metrics like total length and checksum
|
51
|
+
class field_metrics {
|
52
|
+
public:
|
53
|
+
field_metrics(const int length, const int checksum)
|
54
|
+
: m_length(length),
|
55
|
+
m_checksum(checksum) {}
|
56
|
+
|
57
|
+
int getLength() const { return m_length; }
|
58
|
+
|
59
|
+
int getCheckSum() const { return m_checksum; }
|
60
|
+
|
61
|
+
bool isValid() const { return m_length > 0; }
|
62
|
+
|
63
|
+
private:
|
64
|
+
int m_length;
|
65
|
+
int m_checksum;
|
66
|
+
};
|
67
|
+
|
68
|
+
friend class Message;
|
69
|
+
|
70
|
+
/// Constructor which also calculates field metrics
|
71
|
+
FieldBase(
|
72
|
+
int tag,
|
73
|
+
std::string::const_iterator valueStart,
|
74
|
+
std::string::const_iterator valueEnd,
|
75
|
+
std::string::const_iterator tagStart,
|
76
|
+
std::string::const_iterator tagEnd)
|
77
|
+
: m_tag(tag),
|
78
|
+
m_string(valueStart, valueEnd),
|
79
|
+
m_metrics(calculateMetrics(tagStart, tagEnd)) {}
|
80
|
+
|
81
|
+
public:
|
82
|
+
FieldBase(int tag, const std::string &string)
|
83
|
+
: m_tag(tag),
|
84
|
+
m_string(string),
|
85
|
+
m_metrics(no_metrics()) {}
|
86
|
+
|
87
|
+
virtual ~FieldBase() {}
|
88
|
+
|
89
|
+
FieldBase(const FieldBase &rhs)
|
90
|
+
: m_tag(rhs.getTag()),
|
91
|
+
m_string(rhs.m_string),
|
92
|
+
m_metrics(rhs.m_metrics) {}
|
93
|
+
|
94
|
+
FieldBase &operator=(const FieldBase &rhs) {
|
95
|
+
m_tag = rhs.getTag();
|
96
|
+
m_string = rhs.m_string;
|
97
|
+
m_metrics = rhs.m_metrics;
|
98
|
+
m_data.clear();
|
99
|
+
|
100
|
+
return *this;
|
101
|
+
}
|
102
|
+
|
103
|
+
void swap(FieldBase &rhs) {
|
104
|
+
std::swap(m_tag, rhs.m_tag);
|
105
|
+
std::swap(m_metrics, rhs.m_metrics);
|
106
|
+
m_string.swap(rhs.m_string);
|
107
|
+
m_data.swap(rhs.m_data);
|
108
|
+
}
|
109
|
+
|
110
|
+
void setTag(int tag) {
|
111
|
+
m_tag = tag;
|
112
|
+
m_metrics = no_metrics();
|
113
|
+
m_data.clear();
|
114
|
+
}
|
115
|
+
|
116
|
+
[[deprecated("Use setTag")]]
|
117
|
+
void setField(int field) {
|
118
|
+
setTag(field);
|
119
|
+
}
|
120
|
+
|
121
|
+
void setString(const std::string &string) {
|
122
|
+
m_string = string;
|
123
|
+
m_metrics = no_metrics();
|
124
|
+
m_data.clear();
|
125
|
+
}
|
126
|
+
|
127
|
+
/// Get the fields integer tag.
|
128
|
+
int getTag() const { return m_tag; }
|
129
|
+
|
130
|
+
[[deprecated("Use getTag")]]
|
131
|
+
int getField() const {
|
132
|
+
return getTag();
|
133
|
+
}
|
134
|
+
|
135
|
+
/// Get the string representation of the fields value.
|
136
|
+
const std::string &getString() const { return m_string; }
|
137
|
+
|
138
|
+
/// Get the string representation of the Field (i.e.) 55=MSFT[SOH]
|
139
|
+
const std::string &getFixString() const {
|
140
|
+
if (m_data.empty()) {
|
141
|
+
encodeTo(m_data);
|
142
|
+
}
|
143
|
+
|
144
|
+
return m_data;
|
145
|
+
}
|
146
|
+
|
147
|
+
/// Get the length of the fields string representation
|
148
|
+
int getLength() const {
|
149
|
+
calculate();
|
150
|
+
return m_metrics.getLength();
|
151
|
+
}
|
152
|
+
|
153
|
+
/// Get the total value the fields characters added together
|
154
|
+
int getTotal() const {
|
155
|
+
calculate();
|
156
|
+
return m_metrics.getCheckSum();
|
157
|
+
}
|
158
|
+
|
159
|
+
/// Compares fields based on their tag numbers
|
160
|
+
bool operator<(const FieldBase &field) const { return m_tag < field.m_tag; }
|
161
|
+
|
162
|
+
private:
|
163
|
+
void calculate() const {
|
164
|
+
if (m_metrics.isValid()) {
|
165
|
+
return;
|
166
|
+
}
|
167
|
+
|
168
|
+
m_metrics = calculateMetrics(getFixString());
|
169
|
+
}
|
170
|
+
|
171
|
+
/// Serializes string representation of the Field to input string
|
172
|
+
void encodeTo(std::string &result) const {
|
173
|
+
size_t tagLength = FIX::number_of_symbols_in(m_tag);
|
174
|
+
size_t totalLength = tagLength + m_string.length() + 2;
|
175
|
+
|
176
|
+
result.resize(totalLength);
|
177
|
+
|
178
|
+
char *buf = (char *)result.c_str();
|
179
|
+
FIX::integer_to_string(buf, tagLength, m_tag);
|
180
|
+
|
181
|
+
buf[tagLength] = '=';
|
182
|
+
memcpy(buf + tagLength + 1, m_string.data(), m_string.length());
|
183
|
+
buf[totalLength - 1] = '\001';
|
184
|
+
}
|
185
|
+
|
186
|
+
static field_metrics no_metrics() { return field_metrics(0, 0); }
|
187
|
+
|
188
|
+
/// Calculate metrics for any input string
|
189
|
+
static field_metrics calculateMetrics(
|
190
|
+
std::string::const_iterator const start,
|
191
|
+
std::string::const_iterator const end) {
|
192
|
+
int checksum = 0;
|
193
|
+
for (std::string::const_iterator str = start; str != end; ++str) {
|
194
|
+
checksum += (unsigned char)(*str);
|
195
|
+
}
|
196
|
+
|
197
|
+
#if defined(__SUNPRO_CC)
|
198
|
+
std::ptrdiff_t d;
|
199
|
+
std::distance(start, end, d);
|
200
|
+
return field_metrics(d, checksum);
|
201
|
+
#else
|
202
|
+
return field_metrics(static_cast<int>(std::distance(start, end)), checksum);
|
203
|
+
#endif
|
204
|
+
}
|
205
|
+
|
206
|
+
static field_metrics calculateMetrics(const std::string &field) {
|
207
|
+
return calculateMetrics(field.begin(), field.end());
|
208
|
+
}
|
209
|
+
|
210
|
+
int m_tag;
|
211
|
+
std::string m_string;
|
212
|
+
mutable std::string m_data;
|
213
|
+
mutable field_metrics m_metrics;
|
214
|
+
};
|
215
|
+
/*! @} */
|
216
|
+
|
217
|
+
inline std::ostream &operator<<(std::ostream &stream, const FieldBase &field) {
|
218
|
+
stream << field.getString();
|
219
|
+
return stream;
|
220
|
+
}
|
221
|
+
|
222
|
+
inline void swap(FieldBase &lhs, FieldBase &rhs) { lhs.swap(rhs); }
|
223
|
+
|
224
|
+
/**
|
225
|
+
* MSC doesn't support partial template specialization so we have this.
|
226
|
+
* this is here to provide equality checking against native char arrays.
|
227
|
+
*/
|
228
|
+
class StringField : public FieldBase {
|
229
|
+
public:
|
230
|
+
explicit StringField(int field, const std::string &data)
|
231
|
+
: FieldBase(field, data) {}
|
232
|
+
StringField(int field)
|
233
|
+
: FieldBase(field, "") {}
|
234
|
+
|
235
|
+
void setValue(const std::string &value) { setString(value); }
|
236
|
+
const std::string &getValue() const { return getString(); }
|
237
|
+
operator const std::string &() const { return getString(); }
|
238
|
+
|
239
|
+
bool operator<(const StringField &rhs) const { return getString() < rhs.getString(); }
|
240
|
+
bool operator>(const StringField &rhs) const { return getString() > rhs.getString(); }
|
241
|
+
bool operator==(const StringField &rhs) const { return getString() == rhs.getString(); }
|
242
|
+
bool operator!=(const StringField &rhs) const { return getString() != rhs.getString(); }
|
243
|
+
bool operator<=(const StringField &rhs) const { return getString() <= rhs.getString(); }
|
244
|
+
bool operator>=(const StringField &rhs) const { return getString() >= rhs.getString(); }
|
245
|
+
friend bool operator<(const StringField &, const char *);
|
246
|
+
friend bool operator<(const char *, const StringField &);
|
247
|
+
friend bool operator>(const StringField &, const char *);
|
248
|
+
friend bool operator>(const char *, const StringField &);
|
249
|
+
friend bool operator==(const StringField &, const char *);
|
250
|
+
friend bool operator==(const char *, const StringField &);
|
251
|
+
friend bool operator!=(const StringField &, const char *);
|
252
|
+
friend bool operator!=(const char *, const StringField &);
|
253
|
+
friend bool operator<=(const StringField &, const char *);
|
254
|
+
friend bool operator<=(const char *, const StringField &);
|
255
|
+
friend bool operator>=(const StringField &, const char *);
|
256
|
+
friend bool operator>=(const char *, const StringField &);
|
257
|
+
|
258
|
+
friend bool operator<(const StringField &, const std::string &);
|
259
|
+
friend bool operator<(const std::string &, const StringField &);
|
260
|
+
friend bool operator>(const StringField &, const std::string &);
|
261
|
+
friend bool operator>(const std::string &, const StringField &);
|
262
|
+
friend bool operator==(const StringField &, const std::string &);
|
263
|
+
friend bool operator==(const std::string &, const StringField &);
|
264
|
+
friend bool operator!=(const StringField &, const std::string &);
|
265
|
+
friend bool operator!=(const std::string &, const StringField &);
|
266
|
+
friend bool operator<=(const StringField &, const std::string &);
|
267
|
+
friend bool operator<=(const std::string &, const StringField &);
|
268
|
+
friend bool operator>=(const StringField &, const std::string &);
|
269
|
+
friend bool operator>=(const std::string &, const StringField &);
|
270
|
+
};
|
271
|
+
|
272
|
+
inline bool operator<(const StringField &lhs, const char *rhs) { return lhs.getValue() < rhs; }
|
273
|
+
inline bool operator<(const char *lhs, const StringField &rhs) { return lhs < rhs.getValue(); }
|
274
|
+
inline bool operator>(const StringField &lhs, const char *rhs) { return lhs.getValue() > rhs; }
|
275
|
+
inline bool operator>(const char *lhs, const StringField &rhs) { return lhs > rhs.getValue(); }
|
276
|
+
inline bool operator==(const StringField &lhs, const char *rhs) { return lhs.getValue() == rhs; }
|
277
|
+
inline bool operator==(const char *lhs, const StringField &rhs) { return lhs == rhs.getValue(); }
|
278
|
+
inline bool operator!=(const StringField &lhs, const char *rhs) { return lhs.getValue() != rhs; }
|
279
|
+
inline bool operator!=(const char *lhs, const StringField &rhs) { return lhs != rhs.getValue(); }
|
280
|
+
inline bool operator<=(const StringField &lhs, const char *rhs) { return lhs.getValue() <= rhs; }
|
281
|
+
inline bool operator<=(const char *lhs, const StringField &rhs) { return lhs <= rhs.getValue(); }
|
282
|
+
inline bool operator>=(const StringField &lhs, const char *rhs) { return lhs.getValue() >= rhs; }
|
283
|
+
inline bool operator>=(const char *lhs, const StringField &rhs) { return lhs >= rhs.getValue(); }
|
284
|
+
|
285
|
+
inline bool operator<(const StringField &lhs, const std::string &rhs) { return lhs.getValue() < rhs; }
|
286
|
+
inline bool operator<(const std::string &lhs, const StringField &rhs) { return lhs < rhs.getValue(); }
|
287
|
+
inline bool operator>(const StringField &lhs, const std::string &rhs) { return lhs.getValue() > rhs; }
|
288
|
+
inline bool operator>(const std::string &lhs, const StringField &rhs) { return lhs > rhs.getValue(); }
|
289
|
+
inline bool operator==(const StringField &lhs, const std::string &rhs) { return lhs.getValue() == rhs; }
|
290
|
+
inline bool operator==(const std::string &lhs, const StringField &rhs) { return lhs == rhs.getValue(); }
|
291
|
+
inline bool operator!=(const StringField &lhs, const std::string &rhs) { return lhs.getValue() != rhs; }
|
292
|
+
inline bool operator!=(const std::string &lhs, const StringField &rhs) { return lhs != rhs.getValue(); }
|
293
|
+
inline bool operator<=(const StringField &lhs, const std::string &rhs) { return lhs.getValue() <= rhs; }
|
294
|
+
inline bool operator<=(const std::string &lhs, const StringField &rhs) { return lhs <= rhs.getValue(); }
|
295
|
+
inline bool operator>=(const StringField &lhs, const std::string &rhs) { return lhs.getValue() >= rhs; }
|
296
|
+
inline bool operator>=(const std::string &lhs, const StringField &rhs) { return lhs >= rhs.getValue(); }
|
297
|
+
|
298
|
+
/// Field that contains a character value
|
299
|
+
class CharField : public FieldBase {
|
300
|
+
public:
|
301
|
+
explicit CharField(int field, char data)
|
302
|
+
: FieldBase(field, CharConvertor::convert(data)) {}
|
303
|
+
CharField(int field)
|
304
|
+
: FieldBase(field, "") {}
|
305
|
+
|
306
|
+
void setValue(char value) { setString(CharConvertor::convert(value)); }
|
307
|
+
char getValue() const EXCEPT(IncorrectDataFormat) {
|
308
|
+
try {
|
309
|
+
return CharConvertor::convert(getString());
|
310
|
+
} catch (FieldConvertError &) {
|
311
|
+
throw IncorrectDataFormat(getTag(), getString());
|
312
|
+
}
|
313
|
+
}
|
314
|
+
operator char() const { return getValue(); }
|
315
|
+
};
|
316
|
+
|
317
|
+
/// Field that contains a double value
|
318
|
+
class DoubleField : public FieldBase {
|
319
|
+
public:
|
320
|
+
explicit DoubleField(int field, double data, int padding = 0)
|
321
|
+
: FieldBase(field, DoubleConvertor::convert(data, padding)) {}
|
322
|
+
DoubleField(int field)
|
323
|
+
: FieldBase(field, "") {}
|
324
|
+
|
325
|
+
void setValue(double value, int padding = 0) { setString(DoubleConvertor::convert(value, padding)); }
|
326
|
+
double getValue() const EXCEPT(IncorrectDataFormat) {
|
327
|
+
try {
|
328
|
+
return DoubleConvertor::convert(getString());
|
329
|
+
} catch (FieldConvertError &) {
|
330
|
+
throw IncorrectDataFormat(getTag(), getString());
|
331
|
+
}
|
332
|
+
}
|
333
|
+
operator double() const { return getValue(); }
|
334
|
+
};
|
335
|
+
|
336
|
+
/// Field that contains an integer value
|
337
|
+
class IntField : public FieldBase {
|
338
|
+
public:
|
339
|
+
explicit IntField(int field, int data)
|
340
|
+
: FieldBase(field, IntConvertor::convert(data)) {}
|
341
|
+
IntField(int field)
|
342
|
+
: FieldBase(field, "") {}
|
343
|
+
|
344
|
+
void setValue(int value) { setString(IntConvertor::convert(value)); }
|
345
|
+
int getValue() const EXCEPT(IncorrectDataFormat) {
|
346
|
+
try {
|
347
|
+
return IntConvertor::convert(getString());
|
348
|
+
} catch (FieldConvertError &) {
|
349
|
+
throw IncorrectDataFormat(getTag(), getString());
|
350
|
+
}
|
351
|
+
}
|
352
|
+
operator int() const { return getValue(); }
|
353
|
+
};
|
354
|
+
|
355
|
+
// A generic template-based int field type would be more elegant; a specific field
|
356
|
+
// specialization could be declared for any required intN_t but this does not go
|
357
|
+
// well with SWIG (it looks breaking the inheritance chain on a template).
|
358
|
+
//
|
359
|
+
/// Field that contains a 64-bit integer value
|
360
|
+
class Int64Field : public FieldBase {
|
361
|
+
public:
|
362
|
+
explicit Int64Field(int field, int64_t data)
|
363
|
+
: FieldBase(field, Int64Convertor::convert(data)) {}
|
364
|
+
Int64Field(int field)
|
365
|
+
: FieldBase(field, "") {}
|
366
|
+
|
367
|
+
void setValue(int64_t value) { setString(Int64Convertor::convert(value)); }
|
368
|
+
int64_t getValue() const EXCEPT(IncorrectDataFormat) {
|
369
|
+
try {
|
370
|
+
return Int64Convertor::convert(getString());
|
371
|
+
} catch (FieldConvertError &) {
|
372
|
+
throw IncorrectDataFormat(getTag(), getString());
|
373
|
+
}
|
374
|
+
}
|
375
|
+
operator int64_t() const { return getValue(); }
|
376
|
+
};
|
377
|
+
|
378
|
+
/// Field that contains a 64-bit integer value
|
379
|
+
class UInt64Field : public FieldBase {
|
380
|
+
public:
|
381
|
+
explicit UInt64Field(int field, uint64_t data)
|
382
|
+
: FieldBase(field, UInt64Convertor::convert(data)) {}
|
383
|
+
UInt64Field(int field)
|
384
|
+
: FieldBase(field, "") {}
|
385
|
+
|
386
|
+
void setValue(uint64_t value) { setString(UInt64Convertor::convert(value)); }
|
387
|
+
uint64_t getValue() const EXCEPT(IncorrectDataFormat) {
|
388
|
+
try {
|
389
|
+
return UInt64Convertor::convert(getString());
|
390
|
+
} catch (FieldConvertError &) {
|
391
|
+
throw IncorrectDataFormat(getTag(), getString());
|
392
|
+
}
|
393
|
+
}
|
394
|
+
operator uint64_t() const { return getValue(); }
|
395
|
+
};
|
396
|
+
|
397
|
+
/// Field that contains a boolean value
|
398
|
+
class BoolField : public FieldBase {
|
399
|
+
public:
|
400
|
+
explicit BoolField(int field, bool data)
|
401
|
+
: FieldBase(field, BoolConvertor::convert(data)) {}
|
402
|
+
BoolField(int field)
|
403
|
+
: FieldBase(field, "") {}
|
404
|
+
|
405
|
+
void setValue(bool value) { setString(BoolConvertor::convert(value)); }
|
406
|
+
bool getValue() const EXCEPT(IncorrectDataFormat) {
|
407
|
+
try {
|
408
|
+
return BoolConvertor::convert(getString());
|
409
|
+
} catch (FieldConvertError &) {
|
410
|
+
throw IncorrectDataFormat(getTag(), getString());
|
411
|
+
}
|
412
|
+
}
|
413
|
+
operator bool() const { return getValue(); }
|
414
|
+
};
|
415
|
+
|
416
|
+
/// Field that contains a UTC time stamp value
|
417
|
+
class UtcTimeStampField : public FieldBase {
|
418
|
+
public:
|
419
|
+
explicit UtcTimeStampField(int field, const UtcTimeStamp &data, int precision = 0)
|
420
|
+
: FieldBase(field, UtcTimeStampConvertor::convert(data, precision)) {}
|
421
|
+
UtcTimeStampField(int field, int precision = 0)
|
422
|
+
: FieldBase(field, UtcTimeStampConvertor::convert(UtcTimeStamp::now(), precision)) {}
|
423
|
+
|
424
|
+
void setValue(const UtcTimeStamp &value) { setString(UtcTimeStampConvertor::convert(value)); }
|
425
|
+
UtcTimeStamp getValue() const EXCEPT(IncorrectDataFormat) {
|
426
|
+
try {
|
427
|
+
return UtcTimeStampConvertor::convert(getString());
|
428
|
+
} catch (FieldConvertError &) {
|
429
|
+
throw IncorrectDataFormat(getTag(), getString());
|
430
|
+
}
|
431
|
+
}
|
432
|
+
operator UtcTimeStamp() const { return getValue(); }
|
433
|
+
|
434
|
+
bool operator<(const UtcTimeStampField &rhs) const { return getValue() < rhs.getValue(); }
|
435
|
+
bool operator==(const UtcTimeStampField &rhs) const { return getValue() == rhs.getValue(); }
|
436
|
+
bool operator!=(const UtcTimeStampField &rhs) const { return getValue() != rhs.getValue(); }
|
437
|
+
};
|
438
|
+
|
439
|
+
/// Field that contains a UTC date value
|
440
|
+
class UtcDateField : public FieldBase {
|
441
|
+
public:
|
442
|
+
explicit UtcDateField(int field, const UtcDate &data)
|
443
|
+
: FieldBase(field, UtcDateConvertor::convert(data)) {}
|
444
|
+
UtcDateField(int field)
|
445
|
+
: FieldBase(field, UtcDateConvertor::convert(UtcDate())) {}
|
446
|
+
|
447
|
+
void setValue(const UtcDate &value) { setString(UtcDateConvertor::convert(value)); }
|
448
|
+
UtcDate getValue() const EXCEPT(IncorrectDataFormat) {
|
449
|
+
try {
|
450
|
+
return UtcDateConvertor::convert(getString());
|
451
|
+
} catch (FieldConvertError &) {
|
452
|
+
throw IncorrectDataFormat(getTag(), getString());
|
453
|
+
}
|
454
|
+
}
|
455
|
+
operator UtcDate() const { return getValue(); }
|
456
|
+
|
457
|
+
bool operator<(const UtcDateField &rhs) const { return getValue() < rhs.getValue(); }
|
458
|
+
bool operator==(const UtcDateField &rhs) const { return getValue() == rhs.getValue(); }
|
459
|
+
bool operator!=(const UtcDateField &rhs) const { return getValue() != rhs.getValue(); }
|
460
|
+
};
|
461
|
+
|
462
|
+
/// Field that contains a UTC time value
|
463
|
+
class UtcTimeOnlyField : public FieldBase {
|
464
|
+
public:
|
465
|
+
explicit UtcTimeOnlyField(int field, const UtcTimeOnly &data, int precision = 0)
|
466
|
+
: FieldBase(field, UtcTimeOnlyConvertor::convert(data, precision)) {}
|
467
|
+
UtcTimeOnlyField(int field, int precision = 0)
|
468
|
+
: FieldBase(field, UtcTimeOnlyConvertor::convert(UtcTimeOnly(), precision)) {}
|
469
|
+
|
470
|
+
void setValue(const UtcTimeOnly &value) { setString(UtcTimeOnlyConvertor::convert(value)); }
|
471
|
+
UtcTimeOnly getValue() const EXCEPT(IncorrectDataFormat) {
|
472
|
+
try {
|
473
|
+
return UtcTimeOnlyConvertor::convert(getString());
|
474
|
+
} catch (FieldConvertError &) {
|
475
|
+
throw IncorrectDataFormat(getTag(), getString());
|
476
|
+
}
|
477
|
+
}
|
478
|
+
operator UtcTimeOnly() const { return getValue(); }
|
479
|
+
|
480
|
+
bool operator<(const UtcTimeOnlyField &rhs) const { return getValue() < rhs.getValue(); }
|
481
|
+
bool operator==(const UtcTimeOnlyField &rhs) const { return getValue() == rhs.getValue(); }
|
482
|
+
bool operator!=(const UtcTimeOnlyField &rhs) const { return getValue() != rhs.getValue(); }
|
483
|
+
};
|
484
|
+
|
485
|
+
/// Field that contains a checksum value
|
486
|
+
class CheckSumField : public FieldBase {
|
487
|
+
public:
|
488
|
+
explicit CheckSumField(int field, int data)
|
489
|
+
: FieldBase(field, CheckSumConvertor::convert(data)) {}
|
490
|
+
CheckSumField(int field)
|
491
|
+
: FieldBase(field, "") {}
|
492
|
+
|
493
|
+
void setValue(int value) { setString(CheckSumConvertor::convert(value)); }
|
494
|
+
int getValue() const EXCEPT(IncorrectDataFormat) {
|
495
|
+
try {
|
496
|
+
return CheckSumConvertor::convert(getString());
|
497
|
+
} catch (FieldConvertError &) {
|
498
|
+
throw IncorrectDataFormat(getTag(), getString());
|
499
|
+
}
|
500
|
+
}
|
501
|
+
operator int() const { return getValue(); }
|
502
|
+
};
|
503
|
+
|
504
|
+
typedef DoubleField PriceField;
|
505
|
+
typedef DoubleField AmtField;
|
506
|
+
typedef DoubleField QtyField;
|
507
|
+
typedef StringField CurrencyField;
|
508
|
+
typedef StringField MultipleValueStringField;
|
509
|
+
typedef StringField MultipleStringValueField;
|
510
|
+
typedef StringField MultipleCharValueField;
|
511
|
+
typedef StringField ExchangeField;
|
512
|
+
typedef StringField LocalMktDateField;
|
513
|
+
typedef StringField DataField;
|
514
|
+
typedef DoubleField FloatField;
|
515
|
+
typedef DoubleField PriceOffsetField;
|
516
|
+
typedef StringField MonthField;
|
517
|
+
typedef StringField MonthYearField;
|
518
|
+
typedef StringField DayOfMonthField;
|
519
|
+
typedef UtcDateField UtcDateOnlyField;
|
520
|
+
typedef IntField LengthField;
|
521
|
+
typedef IntField NumInGroupField;
|
522
|
+
typedef UInt64Field SeqNumField;
|
523
|
+
typedef IntField TagNumField;
|
524
|
+
typedef DoubleField PercentageField;
|
525
|
+
typedef StringField CountryField;
|
526
|
+
typedef StringField TzTimeOnlyField;
|
527
|
+
typedef StringField TzTimeStampField;
|
528
|
+
} // namespace FIX
|
529
|
+
|
530
|
+
#define DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, NUM) \
|
531
|
+
class NAME : public TOK##Field { \
|
532
|
+
public: \
|
533
|
+
static constexpr int tag = NUM; \
|
534
|
+
NAME() \
|
535
|
+
: TOK##Field(NUM) {} \
|
536
|
+
NAME(const TYPE &value) \
|
537
|
+
: TOK##Field(NUM, value) {} \
|
538
|
+
}
|
539
|
+
|
540
|
+
#define DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, TOK, TYPE, NUM) \
|
541
|
+
class NAME : public TOK##Field { \
|
542
|
+
public: \
|
543
|
+
static constexpr int tag = NUM; \
|
544
|
+
NAME() \
|
545
|
+
: TOK##Field(NUM) {} \
|
546
|
+
NAME(TYPE value) \
|
547
|
+
: TOK##Field(NUM, value) {} \
|
548
|
+
}
|
549
|
+
|
550
|
+
#define DEFINE_FIELD_CLASS(NAME, TOK, TYPE) DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
|
551
|
+
|
552
|
+
#define DEFINE_TRIVIAL_FIELD_CLASS(NAME, TOK, TYPE) DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
|
553
|
+
|
554
|
+
#define DEFINE_DEPRECATED_FIELD_CLASS(NAME, TOK, TYPE) DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, DEPRECATED_FIELD::NAME)
|
555
|
+
|
556
|
+
#define DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, NUM) \
|
557
|
+
class NAME : public TOK##Field { \
|
558
|
+
public: \
|
559
|
+
static constexpr int tag = NUM; \
|
560
|
+
static NAME now() { return NAME(TYPE::now()); } \
|
561
|
+
static NAME now(int precision) { return NAME(TYPE::now(), precision); } \
|
562
|
+
NAME() \
|
563
|
+
: TOK##Field(NUM, TYPE::now(), false) {} \
|
564
|
+
NAME(int precision) \
|
565
|
+
: TOK##Field(NUM, TYPE::now(), precision) {} \
|
566
|
+
NAME(const TYPE &value) \
|
567
|
+
: TOK##Field(NUM, value) {} \
|
568
|
+
NAME(const TYPE &value, int precision) \
|
569
|
+
: TOK##Field(NUM, value, precision) {} \
|
570
|
+
}
|
571
|
+
|
572
|
+
#define DEFINE_FIELD_TIMECLASS(NAME, TOK, TYPE) DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
|
573
|
+
|
574
|
+
#define DEFINE_DEPRECATED_FIELD_TIMECLASS(NAME, TOK, TYPE) \
|
575
|
+
DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, DEPRECATED_FIELD::NAME)
|
576
|
+
|
577
|
+
#define DEFINE_CHECKSUM(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, CheckSum, FIX::INT)
|
578
|
+
#define DEFINE_STRING(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::STRING)
|
579
|
+
#define DEFINE_CHAR(NAME) DEFINE_FIELD_CLASS(NAME, Char, FIX::CHAR)
|
580
|
+
#define DEFINE_PRICE(NAME) DEFINE_FIELD_CLASS(NAME, Price, FIX::PRICE)
|
581
|
+
#define DEFINE_INT(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, Int, FIX::INT)
|
582
|
+
#define DEFINE_INT64(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, Int64, FIX::INT64)
|
583
|
+
#define DEFINE_AMT(NAME) DEFINE_FIELD_CLASS(NAME, Amt, FIX::AMT)
|
584
|
+
#define DEFINE_QTY(NAME) DEFINE_FIELD_CLASS(NAME, Qty, FIX::QTY)
|
585
|
+
#define DEFINE_CURRENCY(NAME) DEFINE_FIELD_CLASS(NAME, Currency, FIX::CURRENCY)
|
586
|
+
#define DEFINE_MULTIPLEVALUESTRING(NAME) DEFINE_FIELD_CLASS(NAME, MultipleValueString, FIX::MULTIPLEVALUESTRING)
|
587
|
+
#define DEFINE_MULTIPLESTRINGVALUE(NAME) DEFINE_FIELD_CLASS(NAME, MultipleStringValue, FIX::MULTIPLESTRINGVALUE)
|
588
|
+
#define DEFINE_MULTIPLECHARVALUE(NAME) DEFINE_FIELD_CLASS(NAME, MultipleCharValue, FIX::MULTIPLECHARVALUE)
|
589
|
+
#define DEFINE_EXCHANGE(NAME) DEFINE_FIELD_CLASS(NAME, Exchange, FIX::EXCHANGE)
|
590
|
+
#define DEFINE_UTCTIMESTAMP(NAME) DEFINE_FIELD_TIMECLASS(NAME, UtcTimeStamp, FIX::UTCTIMESTAMP)
|
591
|
+
#define DEFINE_BOOLEAN(NAME) DEFINE_FIELD_CLASS(NAME, Bool, FIX::BOOLEAN)
|
592
|
+
#define DEFINE_LOCALMKTTIME(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::LOCALMKTTIME)
|
593
|
+
#define DEFINE_LOCALMKTDATE(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::LOCALMKTDATE)
|
594
|
+
#define DEFINE_DATA(NAME) DEFINE_FIELD_CLASS(NAME, Data, FIX::DATA)
|
595
|
+
#define DEFINE_FLOAT(NAME) DEFINE_FIELD_CLASS(NAME, Float, FIX::FLOAT)
|
596
|
+
#define DEFINE_PRICEOFFSET(NAME) DEFINE_FIELD_CLASS(NAME, PriceOffset, FIX::PRICEOFFSET)
|
597
|
+
#define DEFINE_MONTHYEAR(NAME) DEFINE_FIELD_CLASS(NAME, MonthYear, FIX::MONTHYEAR)
|
598
|
+
#define DEFINE_DAYOFMONTH(NAME) DEFINE_FIELD_CLASS(NAME, DayOfMonth, FIX::DAYOFMONTH)
|
599
|
+
#define DEFINE_UTCDATE(NAME) DEFINE_FIELD_CLASS(NAME, UtcDate, FIX::UTCDATE)
|
600
|
+
#define DEFINE_UTCDATEONLY(NAME) DEFINE_FIELD_CLASS(NAME, UtcDateOnly, FIX::UTCDATEONLY)
|
601
|
+
#define DEFINE_UTCTIMEONLY(NAME) DEFINE_FIELD_CLASS(NAME, UtcTimeOnly, FIX::UTCTIMEONLY)
|
602
|
+
#define DEFINE_NUMINGROUP(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, NumInGroup, FIX::NUMINGROUP)
|
603
|
+
#define DEFINE_SEQNUM(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, SeqNum, FIX::SEQNUM)
|
604
|
+
#define DEFINE_TAGNUM(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, TagNum, FIX::TAGNUM)
|
605
|
+
#define DEFINE_LENGTH(NAME) DEFINE_TRIVIAL_FIELD_CLASS(NAME, Length, FIX::LENGTH)
|
606
|
+
#define DEFINE_PERCENTAGE(NAME) DEFINE_FIELD_CLASS(NAME, Percentage, FIX::PERCENTAGE)
|
607
|
+
#define DEFINE_COUNTRY(NAME) DEFINE_FIELD_CLASS(NAME, Country, FIX::COUNTRY)
|
608
|
+
#define DEFINE_TZTIMEONLY(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::TZTIMEONLY)
|
609
|
+
#define DEFINE_TZTIMESTAMP(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::TZTIMESTAMP)
|
610
|
+
#define DEFINE_XMLDATA(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::XMLDATA)
|
611
|
+
#define DEFINE_LANGUAGE(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::LANGUAGE)
|
612
|
+
#define DEFINE_XID(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::XID)
|
613
|
+
#define DEFINE_XIDREF(NAME) DEFINE_FIELD_CLASS(NAME, String, FIX::XIDREF)
|
614
|
+
|
615
|
+
#define USER_DEFINE_STRING(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::STRING, NUM)
|
616
|
+
#define USER_DEFINE_CHAR(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Char, FIX::CHAR, NUM)
|
617
|
+
#define USER_DEFINE_PRICE(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Price, FIX::PRICE, NUM)
|
618
|
+
#define USER_DEFINE_INT(NAME, NUM) DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, Int, FIX::INT, NUM)
|
619
|
+
#define USER_DEFINE_AMT(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Amt, FIX::AMT, NUM)
|
620
|
+
#define USER_DEFINE_QTY(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Qty, FIX::QTY, NUM)
|
621
|
+
#define USER_DEFINE_CURRENCY(NAME, NUM) 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) DEFINE_FIELD_CLASS_NUM(NAME, Exchange, FIX::EXCHANGE, NUM)
|
629
|
+
#define USER_DEFINE_UTCTIMESTAMP(NAME, NUM) DEFINE_FIELD_TIMECLASS_NUM(NAME, UtcTimeStamp, FIX::UTCTIMESTAMP, NUM)
|
630
|
+
#define USER_DEFINE_BOOLEAN(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Bool, FIX::BOOLEAN, NUM)
|
631
|
+
#define USER_DEFINE_LOCALMKTTIME(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::LOCALMKTTIME, NUM)
|
632
|
+
#define USER_DEFINE_LOCALMKTDATE(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::STRING, NUM)
|
633
|
+
#define USER_DEFINE_DATA(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Data, FIX::DATA, NUM)
|
634
|
+
#define USER_DEFINE_FLOAT(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Float, FIX::FLOAT, NUM)
|
635
|
+
#define USER_DEFINE_PRICEOFFSET(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, PriceOffset, FIX::PRICEOFFSET, NUM)
|
636
|
+
#define USER_DEFINE_MONTHYEAR(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, MonthYear, FIX::MONTHYEAR, NUM)
|
637
|
+
#define USER_DEFINE_DAYOFMONTH(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, DayOfMonth, FIX::DAYOFMONTH, NUM)
|
638
|
+
#define USER_DEFINE_UTCDATE(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, UtcDate, FIX::UTCDATE, NUM)
|
639
|
+
#define USER_DEFINE_UTCDATEONLY(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, UtcDateOnly, FIX::UTCDATEONLY, NUM)
|
640
|
+
#define USER_DEFINE_UTCTIMEONLY(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, UtcTimeOnly, FIX::UTCTIMEONLY, NUM)
|
641
|
+
#define USER_DEFINE_NUMINGROUP(NAME, NUM) DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, NumInGroup, FIX::NUMINGROUP, NUM)
|
642
|
+
#define USER_DEFINE_SEQNUM(NAME, NUM) DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, SeqNum, FIX::SEQNUM, NUM)
|
643
|
+
#define USER_DEFINE_TAGNUM(NAME, NUM) DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, TagNum, FIX::TAGNUM, NUM)
|
644
|
+
#define USER_DEFINE_LENGTH(NAME, NUM) DEFINE_TRIVIAL_FIELD_CLASS_NUM(NAME, Length, FIX::LENGTH, NUM)
|
645
|
+
#define USER_DEFINE_PERCENTAGE(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Percentage, FIX::PERCENTAGE, NUM)
|
646
|
+
#define USER_DEFINE_COUNTRY(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, Country, FIX::COUNTRY, NUM)
|
647
|
+
#define USER_DEFINE_TZTIMEONLY(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::TZTIMEONLY, NUM)
|
648
|
+
#define USER_DEFINE_TZTIMESTAMP(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::TZTIMESTAMP, NUM)
|
649
|
+
#define USER_DEFINE_XMLDATA(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::XMLDATA, NUM)
|
650
|
+
#define USER_DEFINE_LANGUAGE(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::LANGUAGE, NUM)
|
651
|
+
#define USER_DEFINE_XID(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::XID, NUM)
|
652
|
+
#define USER_DEFINE_XIDREF(NAME, NUM) DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::XIDREF, NUM)
|
653
|
+
|
654
|
+
#endif
|