Field.h
Go to the documentation of this file.
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 #if defined(__SUNPRO_CC)
37 #include <algorithm>
38 #endif
39 
40 namespace FIX
41 {
49 class FieldBase
50 {
51 
53  class field_metrics
54  {
55  public:
56 
57  field_metrics( const size_t length, const int checksum )
58  : m_length( length )
59  , m_checksum( checksum )
60  {}
61 
62  size_t getLength() const
63  { return m_length; }
64 
65  int getCheckSum() const
66  { return m_checksum; }
67 
68  bool isValid() const
69  { return m_length > 0; }
70 
71  private:
72 
73  size_t m_length;
74  int m_checksum;
75  };
76 
77  friend class Message;
78 
80  FieldBase( int tag,
81  std::string::const_iterator valueStart,
82  std::string::const_iterator valueEnd,
83  std::string::const_iterator tagStart,
84  std::string::const_iterator tagEnd )
85  : m_tag( tag )
86  , m_string( valueStart, valueEnd )
87  , m_metrics( calculateMetrics( tagStart, tagEnd ) )
88  {}
89 
90 public:
91  FieldBase( int tag, const std::string& string )
92  : m_tag( tag ), m_string(string), m_metrics( no_metrics() )
93  {}
94 
95  virtual ~FieldBase() {}
96 
97  FieldBase( const FieldBase& rhs )
98  : m_tag( rhs.getTag() )
99  , m_string( rhs.m_string )
100  , m_metrics( rhs.m_metrics )
101  {
102 
103  }
104 
105  FieldBase& operator=( const FieldBase& rhs)
106  {
107  m_tag = rhs.getTag();
108  m_string = rhs.m_string;
109  m_metrics = rhs.m_metrics;
110  m_data.clear();
111 
112  return *this;
113  }
114 
115  void swap( FieldBase& rhs )
116  {
117  std::swap( m_tag, rhs.m_tag );
118  std::swap( m_metrics, rhs.m_metrics );
119  m_string.swap( rhs.m_string );
120  m_data.swap( rhs.m_data );
121  }
122 
123  void setTag( int tag )
124  {
125  m_tag = tag;
126  m_metrics = no_metrics();
127  m_data.clear();
128  }
129 
131  void setField( int field )
132  {
133  setTag( field );
134  }
135 
136  void setString( const std::string& string )
137  {
138  m_string = string;
140  m_data.clear();
141  }
142 
144  int getTag() const
145  { return m_tag; }
146 
148  int getField() const
149  { return getTag(); }
150 
152  const std::string& getString() const
153  { return m_string; }
154 
156  const std::string& getFixString() const
157  {
158  if( m_data.empty() )
159  encodeTo( m_data );
160 
161  return m_data;
162  }
163 
165  size_t getLength() const
166  {
167  calculate();
168  return m_metrics.getLength();
169  }
170 
172  int getTotal() const
173  {
174  calculate();
175  return m_metrics.getCheckSum();
176  }
177 
179  bool operator < ( const FieldBase& field ) const
180  { return m_tag < field.m_tag; }
181 
182 private:
183 
184  void calculate() const
185  {
186  if( m_metrics.isValid() ) return;
187 
189  }
190 
192  void encodeTo( std::string& result ) const
193  {
194  size_t tagLength = FIX::number_of_symbols_in( m_tag );
195  size_t totalLength = tagLength + m_string.length() + 2;
196 
197  result.resize( totalLength );
198 
199  char * buf = (char*)result.c_str();
200  FIX::integer_to_string( buf, tagLength, m_tag );
201 
202  buf[tagLength] = '=';
203  memcpy( buf + tagLength + 1, m_string.data(), m_string.length() );
204  buf[totalLength - 1] = '\001';
205  }
206 
207  static field_metrics no_metrics()
208  {
209  return field_metrics( 0, 0 );
210  }
211 
214  std::string::const_iterator const start,
215  std::string::const_iterator const end )
216  {
217  int checksum = 0;
218  for ( std::string::const_iterator str = start; str != end; ++str )
219  checksum += (unsigned char)( *str );
220 
221 #if defined(__SUNPRO_CC)
222  std::ptrdiff_t d;
223  std::distance(start, end, d);
224  return field_metrics( d, checksum );
225 #else
226  return field_metrics( std::distance( start, end ), checksum );
227 #endif
228  }
229 
230  static field_metrics calculateMetrics( const std::string& field )
231  {
232  return calculateMetrics( field.begin(), field.end() );
233  }
234 
235  int m_tag;
236  std::string m_string;
237  mutable std::string m_data;
238  mutable field_metrics m_metrics;
239 };
242 inline std::ostream& operator <<
243 ( std::ostream& stream, const FieldBase& field )
244 {
245  stream << field.getString();
246  return stream;
247 }
248 
249 inline void swap( FieldBase& lhs, FieldBase& rhs )
250 {
251  lhs.swap( rhs );
252 }
253 
258 class StringField : public FieldBase
259 {
260 public:
261  explicit StringField( int field, const std::string& data )
262 : FieldBase( field, data ) {}
263  StringField( int field )
264 : FieldBase( field, "" ) {}
265 
266  void setValue( const std::string& value )
267  { setString( value ); }
268  const std::string& getValue() const
269  { return getString(); }
270  operator const std::string&() const
271  { return getString(); }
272 
273  bool operator<( const StringField& rhs ) const
274  { return getString() < rhs.getString(); }
275  bool operator>( const StringField& rhs ) const
276  { return getString() > rhs.getString(); }
277  bool operator==( const StringField& rhs ) const
278  { return getString() == rhs.getString(); }
279  bool operator!=( const StringField& rhs ) const
280  { return getString() != rhs.getString(); }
281  bool operator<=( const StringField& rhs ) const
282  { return getString() <= rhs.getString(); }
283  bool operator>=( const StringField& rhs ) const
284  { return getString() >= rhs.getString(); }
285  friend bool operator<( const StringField&, const char* );
286  friend bool operator<( const char*, const StringField& );
287  friend bool operator>( const StringField&, const char* );
288  friend bool operator>( const char*, const StringField& );
289  friend bool operator==( const StringField&, const char* );
290  friend bool operator==( const char*, const StringField& );
291  friend bool operator!=( const StringField&, const char* );
292  friend bool operator!=( const char*, const StringField& );
293  friend bool operator<=( const StringField&, const char* );
294  friend bool operator<=( const char*, const StringField& );
295  friend bool operator>=( const StringField&, const char* );
296  friend bool operator>=( const char*, const StringField& );
297 
298  friend bool operator<( const StringField&, const std::string& );
299  friend bool operator<( const std::string&, const StringField& );
300  friend bool operator>( const StringField&, const std::string& );
301  friend bool operator>( const std::string&, const StringField& );
302  friend bool operator==( const StringField&, const std::string& );
303  friend bool operator==( const std::string&, const StringField& );
304  friend bool operator!=( const StringField&, const std::string& );
305  friend bool operator!=( const std::string&, const StringField& );
306  friend bool operator<=( const StringField&, const std::string& );
307  friend bool operator<=( const std::string&, const StringField& );
308  friend bool operator>=( const StringField&, const std::string& );
309  friend bool operator>=( const std::string&, const StringField& );
310 };
311 
312 inline bool operator<( const StringField& lhs, const char* rhs )
313  { return lhs.getValue() < rhs; }
314 inline bool operator<( const char* lhs, const StringField& rhs )
315  { return lhs < rhs.getValue(); }
316 inline bool operator>( const StringField& lhs, const char* rhs )
317  { return lhs.getValue() > rhs; }
318 inline bool operator>( const char* lhs, const StringField& rhs )
319  { return lhs > rhs.getValue(); }
320 inline bool operator==( const StringField& lhs, const char* rhs )
321  { return lhs.getValue() == rhs; }
322 inline bool operator==( const char* lhs, const StringField& rhs )
323  { return lhs == rhs.getValue(); }
324 inline bool operator!=( const StringField& lhs, const char* rhs )
325  { return lhs.getValue() != rhs; }
326 inline bool operator!=( const char* lhs, const StringField& rhs )
327  { return lhs != rhs.getValue(); }
328 inline bool operator<=( const StringField& lhs, const char* rhs )
329  { return lhs.getValue() <= rhs; }
330 inline bool operator<=( const char* lhs, const StringField& rhs )
331  { return lhs <= rhs.getValue(); }
332 inline bool operator>=( const StringField& lhs, const char* rhs )
333  { return lhs.getValue() >= rhs; }
334 inline bool operator>=( const char* lhs, const StringField& rhs )
335  { return lhs >= rhs.getValue(); }
336 
337 inline bool operator<( const StringField& lhs, const std::string& rhs )
338  { return lhs.getValue() < rhs; }
339 inline bool operator<( const std::string& lhs, const StringField& rhs )
340  { return lhs < rhs.getValue(); }
341 inline bool operator>( const StringField& lhs, const std::string& rhs )
342  { return lhs.getValue() > rhs; }
343 inline bool operator>( const std::string& lhs, const StringField& rhs )
344  { return lhs > rhs.getValue(); }
345 inline bool operator==( const StringField& lhs, const std::string& rhs )
346  { return lhs.getValue() == rhs; }
347 inline bool operator==( const std::string& lhs, const StringField& rhs )
348  { return lhs == rhs.getValue(); }
349 inline bool operator!=( const StringField& lhs, const std::string& rhs )
350  { return lhs.getValue() != rhs; }
351 inline bool operator!=( const std::string& lhs, const StringField& rhs )
352  { return lhs != rhs.getValue(); }
353 inline bool operator<=( const StringField& lhs, const std::string& rhs )
354  { return lhs.getValue() <= rhs; }
355 inline bool operator<=( const std::string& lhs, const StringField& rhs )
356  { return lhs <= rhs.getValue(); }
357 inline bool operator>=( const StringField& lhs, const std::string& rhs )
358  { return lhs.getValue() >= rhs; }
359 inline bool operator>=( const std::string& lhs, const StringField& rhs )
360  { return lhs >= rhs.getValue(); }
361 
363 class CharField : public FieldBase
364 {
365 public:
366  explicit CharField( int field, char data )
367 : FieldBase( field, CharConvertor::convert( data ) ) {}
368  CharField( int field )
369 : FieldBase( field, "" ) {}
370 
371  void setValue( char value )
373  char getValue() const throw ( IncorrectDataFormat )
374  { try
375  { return CharConvertor::convert( getString() ); }
377  { throw IncorrectDataFormat( getTag(), getString() ); } }
378  operator char() const
379  { return getValue(); }
380 };
381 
383 class DoubleField : public FieldBase
384 {
385 public:
386  explicit DoubleField( int field, double data, int padding = 0 )
387 : FieldBase( field, DoubleConvertor::convert( data, padding ) ) {}
388  DoubleField( int field )
389 : FieldBase( field, "" ) {}
390 
391  void setValue( double value, int padding = 0 )
392  { setString( DoubleConvertor::convert( value, padding ) ); }
393  double getValue() const throw ( IncorrectDataFormat )
394  { try
396  catch( FieldConvertError& )
397  { throw IncorrectDataFormat( getTag(), getString() ); } }
398  operator double() const
399  { return getValue(); }
400 };
401 
403 class IntField : public FieldBase
404 {
405 public:
406  explicit IntField( int field, int data )
407 : FieldBase( field, IntConvertor::convert( data ) ) {}
408  IntField( int field )
409 : FieldBase( field, "" ) {}
410 
411  void setValue( int value )
412  { setString( IntConvertor::convert( value ) ); }
413  int getValue() const throw ( IncorrectDataFormat )
414  { try
416  catch( FieldConvertError& )
417  { throw IncorrectDataFormat( getTag(), getString() ); } }
418  operator const int() const
419  { return getValue(); }
420 };
421 
423 class BoolField : public FieldBase
424 {
425 public:
426  explicit BoolField( int field, bool data )
427 : FieldBase( field, BoolConvertor::convert( data ) ) {}
428  BoolField( int field )
429 : FieldBase( field, "" ) {}
430 
431  void setValue( bool value )
432  { setString( BoolConvertor::convert( value ) ); }
433  bool getValue() const throw ( IncorrectDataFormat )
434  { try
436  catch( FieldConvertError& )
437  { throw IncorrectDataFormat( getTag(), getString() ); } }
438  operator bool() const
439  { return getValue(); }
440 };
441 
444 {
445 public:
446  explicit UtcTimeStampField( int field, const UtcTimeStamp& data, int precision = 0 )
447 : FieldBase( field, UtcTimeStampConvertor::convert( data, precision ) ) {}
448  UtcTimeStampField( int field, int precision = 0 )
449 : FieldBase( field, UtcTimeStampConvertor::convert( UtcTimeStamp(), precision ) ) {}
450 
451  void setValue( const UtcTimeStamp& value )
453  UtcTimeStamp getValue() const throw ( IncorrectDataFormat )
454  { try
456  catch( FieldConvertError& )
457  { throw IncorrectDataFormat( getTag(), getString() ); } }
458  operator UtcTimeStamp() const
459  { return getValue(); }
460 
461  bool operator<( const UtcTimeStampField& rhs ) const
462  { return getValue() < rhs.getValue(); }
463  bool operator==( const UtcTimeStampField& rhs ) const
464  { return getValue() == rhs.getValue(); }
465  bool operator!=( const UtcTimeStampField& rhs ) const
466  { return getValue() != rhs.getValue(); }
467 };
468 
470 class UtcDateField : public FieldBase
471 {
472 public:
473  explicit UtcDateField( int field, const UtcDate& data )
474 : FieldBase( field, UtcDateConvertor::convert( data ) ) {}
475  UtcDateField( int field )
476 : FieldBase( field, UtcDateConvertor::convert( UtcDate() ) ) {}
477 
478  void setValue( const UtcDate& value )
479  { setString( UtcDateConvertor::convert( value ) ); }
481  { try
483  catch( FieldConvertError& )
484  { throw IncorrectDataFormat( getTag(), getString() ); } }
485  operator UtcDate() const
486  { return getValue(); }
487 
488  bool operator<( const UtcDateField& rhs ) const
489  { return getValue() < rhs.getValue(); }
490  bool operator==( const UtcDateField& rhs ) const
491  { return getValue() == rhs.getValue(); }
492  bool operator!=( const UtcDateField& rhs ) const
493  { return getValue() != rhs.getValue(); }
494 };
495 
498 {
499 public:
500  explicit UtcTimeOnlyField( int field, const UtcTimeOnly& data, int precision = 0 )
501 : FieldBase( field, UtcTimeOnlyConvertor::convert( data, precision ) ) {}
502  UtcTimeOnlyField( int field, int precision = 0 )
503 : FieldBase( field, UtcTimeOnlyConvertor::convert( UtcTimeOnly(), precision ) ) {}
504 
505  void setValue( const UtcTimeOnly& value )
508  { try
510  catch( FieldConvertError& )
511  { throw IncorrectDataFormat( getTag(), getString() ); } }
512  operator UtcTimeOnly() const
513  { return getValue(); }
514 
515  bool operator<( const UtcTimeOnlyField& rhs ) const
516  { return getValue() < rhs.getValue(); }
517  bool operator==( const UtcTimeOnlyField& rhs ) const
518  { return getValue() == rhs.getValue(); }
519  bool operator!=( const UtcTimeOnlyField& rhs ) const
520  { return getValue() != rhs.getValue(); }
521 };
522 
524 class CheckSumField : public FieldBase
525 {
526 public:
527  explicit CheckSumField( int field, int data )
528 : FieldBase( field, CheckSumConvertor::convert( data ) ) {}
529  CheckSumField( int field )
530 : FieldBase( field, "" ) {}
531 
532  void setValue( int value )
533  { setString( CheckSumConvertor::convert( value ) ); }
534  int getValue() const throw ( IncorrectDataFormat )
535  { try
537  catch( FieldConvertError& )
538  { throw IncorrectDataFormat( getTag(), getString() ); } }
539  operator const int() const
540  { return getValue(); }
541 };
542 
543 typedef DoubleField PriceField;
545 typedef DoubleField QtyField;
550 typedef StringField ExchangeField;
552 typedef StringField DataField;
553 typedef DoubleField FloatField;
555 typedef StringField MonthField;
559 typedef IntField LengthField;
566 }
567 
568 #define DEFINE_FIELD_CLASS_NUM( NAME, TOK, TYPE, NUM ) \
569 class NAME : public TOK##Field { public: \
570 NAME() : TOK##Field(NUM) {} \
571 NAME(const TYPE& value) : TOK##Field(NUM, value) {} \
572 }
573 
574 #define DEFINE_FIELD_CLASS( NAME, TOK, TYPE ) \
575 DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
576 
577 #define DEFINE_DEPRECATED_FIELD_CLASS( NAME, TOK, TYPE ) \
578 DEFINE_FIELD_CLASS_NUM(NAME, TOK, TYPE, DEPRECATED_FIELD::NAME)
579 
580 #define DEFINE_FIELD_TIMECLASS_NUM( NAME, TOK, TYPE, NUM ) \
581 class NAME : public TOK##Field { public: \
582 NAME() : TOK##Field(NUM, false) {} \
583 NAME(int precision) : TOK##Field(NUM, precision) {} \
584 NAME(const TYPE& value) : TOK##Field(NUM, value) {} \
585 NAME(const TYPE& value, int precision) : TOK##Field(NUM, value, precision) {} \
586 }
587 
588 #define DEFINE_FIELD_TIMECLASS( NAME, TOK, TYPE ) \
589 DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, FIELD::NAME)
590 
591 #define DEFINE_DEPRECATED_FIELD_TIMECLASS( NAME, TOK, TYPE ) \
592 DEFINE_FIELD_TIMECLASS_NUM(NAME, TOK, TYPE, DEPRECATED_FIELD::NAME)
593 
594 #define DEFINE_CHECKSUM( NAME ) \
595  DEFINE_FIELD_CLASS(NAME, CheckSum, FIX::INT)
596 #define DEFINE_STRING( NAME ) \
597  DEFINE_FIELD_CLASS(NAME, String, FIX::STRING)
598 #define DEFINE_CHAR( NAME ) \
599  DEFINE_FIELD_CLASS(NAME, Char, FIX::CHAR)
600 #define DEFINE_PRICE( NAME ) \
601  DEFINE_FIELD_CLASS(NAME, Price, FIX::PRICE)
602 #define DEFINE_INT( NAME ) \
603  DEFINE_FIELD_CLASS(NAME, Int, FIX::INT)
604 #define DEFINE_AMT( NAME ) \
605  DEFINE_FIELD_CLASS(NAME, Amt, FIX::AMT)
606 #define DEFINE_QTY( NAME ) \
607  DEFINE_FIELD_CLASS(NAME, Qty, FIX::QTY)
608 #define DEFINE_CURRENCY( NAME ) \
609  DEFINE_FIELD_CLASS(NAME, Currency, FIX::CURRENCY)
610 #define DEFINE_MULTIPLEVALUESTRING( NAME ) \
611  DEFINE_FIELD_CLASS(NAME, MultipleValueString, FIX::MULTIPLEVALUESTRING)
612 #define DEFINE_MULTIPLESTRINGVALUE( NAME ) \
613  DEFINE_FIELD_CLASS(NAME, MultipleStringValue, FIX::MULTIPLESTRINGVALUE)
614 #define DEFINE_MULTIPLECHARVALUE( NAME ) \
615  DEFINE_FIELD_CLASS(NAME, MultipleCharValue, FIX::MULTIPLECHARVALUE)
616 #define DEFINE_EXCHANGE( NAME ) \
617  DEFINE_FIELD_CLASS(NAME, Exchange, FIX::EXCHANGE)
618 #define DEFINE_UTCTIMESTAMP( NAME ) \
619  DEFINE_FIELD_TIMECLASS(NAME, UtcTimeStamp, FIX::UTCTIMESTAMP)
620 #define DEFINE_BOOLEAN( NAME ) \
621  DEFINE_FIELD_CLASS(NAME, Bool, FIX::BOOLEAN)
622 #define DEFINE_LOCALMKTDATE( NAME ) \
623  DEFINE_FIELD_CLASS(NAME, String, FIX::LOCALMKTDATE)
624 #define DEFINE_DATA( NAME ) \
625  DEFINE_FIELD_CLASS(NAME, Data, FIX::DATA)
626 #define DEFINE_FLOAT( NAME ) \
627  DEFINE_FIELD_CLASS(NAME, Float, FIX::FLOAT)
628 #define DEFINE_PRICEOFFSET( NAME ) \
629  DEFINE_FIELD_CLASS(NAME, PriceOffset, FIX::PRICEOFFSET)
630 #define DEFINE_MONTHYEAR( NAME ) \
631  DEFINE_FIELD_CLASS(NAME, MonthYear, FIX::MONTHYEAR)
632 #define DEFINE_DAYOFMONTH( NAME ) \
633  DEFINE_FIELD_CLASS(NAME, DayOfMonth, FIX::DAYOFMONTH)
634 #define DEFINE_UTCDATE( NAME ) \
635  DEFINE_FIELD_CLASS(NAME, UtcDate, FIX::UTCDATE)
636 #define DEFINE_UTCDATEONLY( NAME ) \
637  DEFINE_FIELD_CLASS(NAME, UtcDateOnly, FIX::UTCDATEONLY)
638 #define DEFINE_UTCTIMEONLY( NAME ) \
639  DEFINE_FIELD_CLASS(NAME, UtcTimeOnly, FIX::UTCTIMEONLY)
640 #define DEFINE_NUMINGROUP( NAME ) \
641  DEFINE_FIELD_CLASS(NAME, NumInGroup, FIX::NUMINGROUP)
642 #define DEFINE_SEQNUM( NAME ) \
643  DEFINE_FIELD_CLASS(NAME, SeqNum, FIX::SEQNUM)
644 #define DEFINE_LENGTH( NAME ) \
645  DEFINE_FIELD_CLASS(NAME, Length, FIX::LENGTH)
646 #define DEFINE_PERCENTAGE( NAME ) \
647  DEFINE_FIELD_CLASS(NAME, Percentage, FIX::PERCENTAGE)
648 #define DEFINE_COUNTRY( NAME ) \
649  DEFINE_FIELD_CLASS(NAME, Country, FIX::COUNTRY)
650 #define DEFINE_TZTIMEONLY( NAME ) \
651  DEFINE_FIELD_CLASS(NAME, String, FIX::TZTIMEONLY)
652 #define DEFINE_TZTIMESTAMP( NAME ) \
653  DEFINE_FIELD_CLASS(NAME, String, FIX::TZTIMESTAMP)
654 #define DEFINE_XMLDATA( NAME ) \
655  DEFINE_FIELD_CLASS(NAME, String, FIX::XMLDATA)
656 #define DEFINE_LANGUAGE( NAME ) \
657  DEFINE_FIELD_CLASS(NAME, String, FIX::LANGUAGE)
658 
659 #define USER_DEFINE_STRING( NAME, NUM ) \
660  DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::STRING, NUM)
661 #define USER_DEFINE_CHAR( NAME, NUM ) \
662  DEFINE_FIELD_CLASS_NUM(NAME, Char, FIX::CHAR, NUM)
663 #define USER_DEFINE_PRICE( NAME, NUM ) \
664  DEFINE_FIELD_CLASS_NUM(NAME, Price, FIX::PRICE, NUM)
665 #define USER_DEFINE_INT( NAME, NUM ) \
666  DEFINE_FIELD_CLASS_NUM(NAME, Int, FIX::INT, NUM)
667 #define USER_DEFINE_AMT( NAME, NUM ) \
668  DEFINE_FIELD_CLASS_NUM(NAME, Amt, FIX::AMT, NUM)
669 #define USER_DEFINE_QTY( NAME, NUM ) \
670  DEFINE_FIELD_CLASS_NUM(NAME, Qty, FIX::QTY, NUM)
671 #define USER_DEFINE_CURRENCY( NAME, NUM ) \
672  DEFINE_FIELD_CLASS_NUM(NAME, Currency, FIX::CURRENCY, NUM)
673 #define USER_DEFINE_MULTIPLEVALUESTRING( NAME, NUM ) \
674  DEFINE_FIELD_CLASS_NUM(NAME, MultipleValueString, FIX::MULTIPLEVALUESTRING, NUM)
675 #define USER_DEFINE_MULTIPLESTRINGVALUE( NAME, NUM ) \
676  DEFINE_FIELD_CLASS_NUM(NAME, MultipleStringValue, FIX::MULTIPLESTRINGVALUE, NUM)
677 #define USER_DEFINE_MULTIPLECHARVALUE( NAME, NUM ) \
678  DEFINE_FIELD_CLASS_NUM(NAME, MultipleCharValue, FIX::MULTIPLECHARVALUE, NUM)
679 #define USER_DEFINE_EXCHANGE( NAME, NUM ) \
680  DEFINE_FIELD_CLASS_NUM(NAME, Exchange, FIX::EXCHANGE, NUM)
681 #define USER_DEFINE_UTCTIMESTAMP( NAME, NUM ) \
682  DEFINE_FIELD_TIMECLASS_NUM(NAME, UtcTimeStamp, FIX::UTCTIMESTAMP, NUM)
683 #define USER_DEFINE_BOOLEAN( NAME, NUM ) \
684  DEFINE_FIELD_CLASS_NUM(NAME, Bool, FIX::BOOLEAN, NUM)
685 #define USER_DEFINE_LOCALMKTDATE( NAME, NUM ) \
686  DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::STRING, NUM)
687 #define USER_DEFINE_DATA( NAME, NUM ) \
688  DEFINE_FIELD_CLASS_NUM(NAME, Data, FIX::DATA, NUM)
689 #define USER_DEFINE_FLOAT( NAME, NUM ) \
690  DEFINE_FIELD_CLASS_NUM(NAME, Float, FIX::FLOAT, NUM)
691 #define USER_DEFINE_PRICEOFFSET( NAME, NUM ) \
692  DEFINE_FIELD_CLASS_NUM(NAME, PriceOffset, FIX::PRICEOFFSET, NUM)
693 #define USER_DEFINE_MONTHYEAR( NAME, NUM ) \
694  DEFINE_FIELD_CLASS_NUM(NAME, MonthYear, FIX::MONTHYEAR, NUM)
695 #define USER_DEFINE_DAYOFMONTH( NAME, NUM ) \
696  DEFINE_FIELD_CLASS_NUM(NAME, DayOfMonth, FIX::DAYOFMONTH, NUM)
697 #define USER_DEFINE_UTCDATE( NAME, NUM ) \
698  DEFINE_FIELD_CLASS_NUM(NAME, UtcDate, FIX::UTCDATE, NUM)
699 #define USER_DEFINE_UTCDATEONLY( NAME, NUM ) \
700  DEFINE_FIELD_CLASS_NUM(NAME, UtcDateOnly, FIX::UTCDATEONLY, NUM)
701 #define USER_DEFINE_UTCTIMEONLY( NAME, NUM ) \
702  DEFINE_FIELD_CLASS_NUM(NAME, UtcTimeOnly, FIX::UTCTIMEONLY, NUM)
703 #define USER_DEFINE_NUMINGROUP( NAME, NUM ) \
704  DEFINE_FIELD_CLASS_NUM(NAME, NumInGroup, FIX::NUMINGROUP, NUM)
705 #define USER_DEFINE_SEQNUM( NAME, NUM ) \
706  DEFINE_FIELD_CLASS_NUM(NAME, SeqNum, FIX::SEQNUM, NUM)
707 #define USER_DEFINE_LENGTH( NAME, NUM ) \
708  DEFINE_FIELD_CLASS_NUM(NAME, Length, FIX::LENGTH, NUM)
709 #define USER_DEFINE_PERCENTAGE( NAME, NUM ) \
710  DEFINE_FIELD_CLASS_NUM(NAME, Percentage, FIX::PERCENTAGE, NUM)
711 #define USER_DEFINE_COUNTRY( NAME, NUM ) \
712  DEFINE_FIELD_CLASS_NUM(NAME, Country, FIX::COUNTRY, NUM)
713 #define USER_DEFINE_TZTIMEONLY( NAME, NUM ) \
714  DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::TZTIMEONLY, NUM)
715 #define USER_DEFINE_TZTIMESTAMP( NAME, NUM ) \
716  DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::TZTIMESTAMP, NUM)
717 #define USER_DEFINE_XMLDATA( NAME, NUM ) \
718  DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::XMLDATA, NUM)
719 #define USER_DEFINE_LANGUAGE( NAME, NUM ) \
720  DEFINE_FIELD_CLASS_NUM(NAME, String, FIX::LANGUAGE, NUM)
721 
722 #endif
723 
FIX::FieldBase::m_data
std::string m_data
Definition: Field.h:271
FIX::StringField::operator!=
bool operator!=(const StringField &rhs) const
Definition: Field.h:296
FIX::MonthYearField
StringField MonthYearField
Definition: Field.h:573
FIX::ExchangeField
StringField ExchangeField
Definition: Field.h:567
FIX::UtcTimeOnlyConvertor
Converts a UtcTimeOnly to/from a string.
Definition: FieldConvertors.h:563
FIX::FieldBase::field_metrics
Class used to store field metrics like total length and checksum.
Definition: Field.h:87
FIX::DoubleField::setValue
void setValue(double value, int padding=0)
Definition: Field.h:408
FIX::MonthField
StringField MonthField
Definition: Field.h:572
FIX::TYPE::UtcDate
@ UtcDate
Definition: FieldTypes.h:948
FIX::BoolField::getValue
bool getValue() const
Definition: Field.h:450
FIX::UtcDateField::setValue
void setValue(const UtcDate &value)
Definition: Field.h:495
FIX::UtcTimeOnlyField::UtcTimeOnlyField
UtcTimeOnlyField(int field, const UtcTimeOnly &data, int precision=0)
Definition: Field.h:517
FIX::FieldBase::field_metrics::field_metrics
field_metrics(const size_t length, const int checksum)
Definition: Field.h:108
FIX::UtcTimeStamp
Date and Time represented in UTC.
Definition: FieldTypes.h:599
FIX::CharConvertor::convert
static std::string convert(char value)
Definition: FieldConvertors.h:391
FIX::number_of_symbols_in
int number_of_symbols_in(const signed_int value)
Definition: FieldConvertors.h:68
FIX::swap
void swap(FieldBase &lhs, FieldBase &rhs)
Definition: Field.h:266
FIX::UtcTimeOnlyField::setValue
void setValue(const UtcTimeOnly &value)
Definition: Field.h:522
FIX::UtcTimeOnlyField::operator<
bool operator<(const UtcTimeOnlyField &rhs) const
Definition: Field.h:532
FIX::FieldBase::operator<
bool operator<(const FieldBase &field) const
Compares fields based on their tag numbers.
Definition: Field.h:213
FIX::BoolConvertor
Converts boolean to/from a string.
Definition: FieldConvertors.h:416
FIX::FieldBase::m_string
std::string m_string
Definition: Field.h:270
FIX::UtcDateField
Field that contains a UTC date value.
Definition: Field.h:487
FIX::BoolField::BoolField
BoolField(int field, bool data)
Definition: Field.h:443
FIX::FieldBase::no_metrics
static field_metrics no_metrics()
Definition: Field.h:241
FIX::FloatField
DoubleField FloatField
Definition: Field.h:570
FIX::operator<
bool operator<(const DatabaseConnectionID &lhs, const DatabaseConnectionID &rhs)
Definition: DatabaseConnectionID.h:83
FIX::UtcTimeStampConvertor
Converts a UtcTimeStamp to/from a string.
Definition: FieldConvertors.h:449
FIX::StringField::operator>
bool operator>(const StringField &rhs) const
Definition: Field.h:292
FIX::integer_to_string
char * integer_to_string(char *buf, const size_t len, signed_int t)
Definition: FieldConvertors.h:116
FIX::QtyField
DoubleField QtyField
Definition: Field.h:562
FIX::operator>=
bool operator>=(const StringField &lhs, const char *rhs)
Definition: Field.h:349
FIX::UtcTimeOnlyField
Field that contains a UTC time value.
Definition: Field.h:514
FIX::UtcTimeStampField::setValue
void setValue(const UtcTimeStamp &value)
Definition: Field.h:468
FIX::PriceField
DoubleField PriceField
Definition: Field.h:560
swap
void swap(T &lhs, T &rhs)
Definition: pugixml.cpp:5991
FIX::UtcDateField::operator==
bool operator==(const UtcDateField &rhs) const
Definition: Field.h:507
FIX::IntField
Field that contains an integer value.
Definition: Field.h:420
FIX::UtcTimeStampField::getValue
UtcTimeStamp getValue() const
Definition: Field.h:470
FIX::UtcDateField::UtcDateField
UtcDateField(int field, const UtcDate &data)
Definition: Field.h:490
FIX::CharField::CharField
CharField(int field, char data)
Definition: Field.h:383
FIX::StringField::getValue
const std::string & getValue() const
Definition: Field.h:285
FIX::UtcDateField::operator!=
bool operator!=(const UtcDateField &rhs) const
Definition: Field.h:509
FIX::BoolField
Field that contains a boolean value.
Definition: Field.h:440
FIX::UtcTimeStampField::operator==
bool operator==(const UtcTimeStampField &rhs) const
Definition: Field.h:480
FIX::FieldBase::encodeTo
void encodeTo(std::string &result) const
Serializes string representation of the Field to input string.
Definition: Field.h:226
FIX::UtcDateConvertor::convert
static std::string convert(const UtcDate &value)
Definition: FieldConvertors.h:652
FIX::FieldBase::field_metrics::isValid
bool isValid() const
Definition: Field.h:119
FIX::operator<=
bool operator<=(const StringField &lhs, const char *rhs)
Definition: Field.h:345
FIX::FieldConvertError
Unable to convert field into its native format.
Definition: Exceptions.h:83
FIX::FieldBase::getField
int getField() const
Definition: Field.h:182
FIX::PercentageField
DoubleField PercentageField
Definition: Field.h:579
FIX::UtcTimeStampField
Field that contains a UTC time stamp value.
Definition: Field.h:460
FIX::TYPE::UtcTimeStamp
@ UtcTimeStamp
Definition: FieldTypes.h:940
FIX::StringField::setValue
void setValue(const std::string &value)
Definition: Field.h:283
FIX::FieldBase::getLength
size_t getLength() const
Get the length of the fields string representation.
Definition: Field.h:199
FIX::CharField::setValue
void setValue(char value)
Definition: Field.h:388
FIX::NumInGroupField
IntField NumInGroupField
Definition: Field.h:577
FIX::StringField
MSC doesn't support partial template specialization so we have this.
Definition: Field.h:275
FIX::UtcDateField::operator<
bool operator<(const UtcDateField &rhs) const
Definition: Field.h:505
FIX::DataField
StringField DataField
Definition: Field.h:569
FIX::FieldBase::setTag
void setTag(int tag)
Definition: Field.h:157
FIX::CountryField
StringField CountryField
Definition: Field.h:580
FIX::IntConvertor::convert
static std::string convert(signed_int value)
Definition: FieldConvertors.h:170
FIX::CharConvertor
Converts character to/from a string.
Definition: FieldConvertors.h:389
FIX::AmtField
DoubleField AmtField
Definition: Field.h:561
FIX::FieldBase::swap
void swap(FieldBase &rhs)
Definition: Field.h:149
FIX::IntField::setValue
void setValue(int value)
Definition: Field.h:428
FIX::UtcTimeOnlyField::operator!=
bool operator!=(const UtcTimeOnlyField &rhs) const
Definition: Field.h:536
FIX::LocalMktDateField
StringField LocalMktDateField
Definition: Field.h:568
FIX::FieldBase::Message
friend class Message
Definition: Field.h:111
FIX::TzTimeOnlyField
StringField TzTimeOnlyField
Definition: Field.h:581
FIX::StringField::operator==
bool operator==(const StringField &rhs) const
Definition: Field.h:294
FIX::CheckSumField::setValue
void setValue(int value)
Definition: Field.h:549
FieldConvertors.h
FIX::FieldBase::getTag
int getTag() const
Get the fields integer tag.
Definition: Field.h:178
FIX::operator==
bool operator==(const DatabaseConnectionID &lhs, const DatabaseConnectionID &rhs)
Definition: DatabaseConnectionID.h:108
FIX::FieldBase::operator=
FieldBase & operator=(const FieldBase &rhs)
Definition: Field.h:139
FIX::MultipleStringValueField
StringField MultipleStringValueField
Definition: Field.h:565
FIX::FieldBase::getTotal
int getTotal() const
Get the total value the fields characters added together.
Definition: Field.h:206
FieldNumbers.h
FIX::FieldBase::~FieldBase
virtual ~FieldBase()
Definition: Field.h:129
FIX::FieldBase::m_tag
int m_tag
Definition: Field.h:269
FIX::CheckSumField::CheckSumField
CheckSumField(int field, int data)
Definition: Field.h:544
FIX::FieldBase::field_metrics::m_length
size_t m_length
Definition: Field.h:124
FIX::TYPE::UtcTimeOnly
@ UtcTimeOnly
Definition: FieldTypes.h:950
FIX::FieldBase::setField
void setField(int field)
Definition: Field.h:165
FIX::CheckSumField
Field that contains a checksum value.
Definition: Field.h:541
FIX::UtcTimeStampField::operator<
bool operator<(const UtcTimeStampField &rhs) const
Definition: Field.h:478
FIX::MultipleCharValueField
StringField MultipleCharValueField
Definition: Field.h:566
FIX::UtcTimeStampConvertor::convert
static std::string convert(const UtcTimeStamp &value, int precision=0)
Definition: FieldConvertors.h:451
FIX::UtcDateField::getValue
UtcDate getValue() const
Definition: Field.h:497
FIX::DoubleConvertor
Converts double to/from a string.
Definition: FieldConvertors.h:256
FIX::UtcTimeStampField::operator!=
bool operator!=(const UtcTimeStampField &rhs) const
Definition: Field.h:482
FIX::StringField::operator<
bool operator<(const StringField &rhs) const
Definition: Field.h:290
FIX::FieldBase::setString
void setString(const std::string &string)
Definition: Field.h:170
FIX::UtcDateOnlyField
UtcDateField UtcDateOnlyField
Definition: Field.h:575
FIX::FieldBase::calculateMetrics
static field_metrics calculateMetrics(std::string::const_iterator const start, std::string::const_iterator const end)
Calculate metrics for any input string.
Definition: Field.h:247
FIX::LengthField
IntField LengthField
Definition: Field.h:576
FIX::BoolConvertor::convert
static std::string convert(bool value)
Definition: FieldConvertors.h:418
FIX::CheckSumConvertor::convert
static std::string convert(int value)
Definition: FieldConvertors.h:231
FIX::SeqNumField
IntField SeqNumField
Definition: Field.h:578
FIX::FieldBase::m_metrics
field_metrics m_metrics
Definition: Field.h:272
FIX
Definition: Acceptor.cpp:34
FIX::FieldBase::field_metrics::getLength
size_t getLength() const
Definition: Field.h:113
FIX::PriceOffsetField
DoubleField PriceOffsetField
Definition: Field.h:571
FIX::TzTimeStampField
StringField TzTimeStampField
Definition: Field.h:582
FIX::StringField::operator<=
bool operator<=(const StringField &rhs) const
Definition: Field.h:298
FIX::CheckSumField::getValue
int getValue() const
Definition: Field.h:551
FIX::MultipleValueStringField
StringField MultipleValueStringField
Definition: Field.h:564
FIX::CurrencyField
StringField CurrencyField
Definition: Field.h:563
FIX::operator>
bool operator>(const StringField &lhs, const char *rhs)
Definition: Field.h:333
FIX::FieldBase::calculate
void calculate() const
Definition: Field.h:218
FIX::IntConvertor
Converts integer to/from a string.
Definition: FieldConvertors.h:168
FIX::FieldBase::FieldBase
FieldBase(int tag, std::string::const_iterator valueStart, std::string::const_iterator valueEnd, std::string::const_iterator tagStart, std::string::const_iterator tagEnd)
Constructor which also calculates field metrics.
Definition: Field.h:114
FIX::IntField::IntField
IntField(int field, int data)
Definition: Field.h:423
FIX::DayOfMonthField
StringField DayOfMonthField
Definition: Field.h:574
FIX::UtcTimeOnlyField::getValue
UtcTimeOnly getValue() const
Definition: Field.h:524
FIX::CharField::getValue
char getValue() const
Definition: Field.h:390
FIX::UtcDate
Date only represented in UTC.
Definition: FieldTypes.h:817
FIX::FieldBase::field_metrics::getCheckSum
int getCheckSum() const
Definition: Field.h:116
FIX::BoolField::setValue
void setValue(bool value)
Definition: Field.h:448
FIX::FieldBase
Base representation of all Field classes.
Definition: Field.h:66
FieldTypes.h
FIX::operator!=
bool operator!=(const DatabaseConnectionID &lhs, const DatabaseConnectionID &rhs)
Definition: DatabaseConnectionID.h:116
FIX::FieldBase::field_metrics::m_checksum
int m_checksum
Definition: Field.h:125
FIX::DoubleConvertor::convert
static std::string convert(double value, int padding=0)
Definition: FieldConvertors.h:272
FIX::IncorrectDataFormat
Field has a badly formatted value.
Definition: Exceptions.h:163
FIX::DoubleField::DoubleField
DoubleField(int field, double data, int padding=0)
Definition: Field.h:403
FIX::UtcTimeOnlyField::operator==
bool operator==(const UtcTimeOnlyField &rhs) const
Definition: Field.h:534
FIX::UtcTimeOnly
Time only represented in UTC.
Definition: FieldTypes.h:701
FIX::StringField::operator>=
bool operator>=(const StringField &rhs) const
Definition: Field.h:300
FIX::IntField::getValue
int getValue() const
Definition: Field.h:430
Utility.h
FIX::DoubleField
Field that contains a double value.
Definition: Field.h:400
FIX::UtcTimeOnlyConvertor::convert
static std::string convert(const UtcTimeOnly &value, int precision=0)
Definition: FieldConvertors.h:565
FIX::DoubleField::getValue
double getValue() const
Definition: Field.h:410
FIX::FieldBase::getFixString
const std::string & getFixString() const
Get the string representation of the Field (i.e.) 55=MSFT[SOH].
Definition: Field.h:190
FIX::UtcDateConvertor
Converts a UtcDate to/from a string.
Definition: FieldConvertors.h:650
FIX::UtcTimeStampField::UtcTimeStampField
UtcTimeStampField(int field, const UtcTimeStamp &data, int precision=0)
Definition: Field.h:463
FIX::FieldBase::getString
const std::string & getString() const
Get the string representation of the fields value.
Definition: Field.h:186
FIX::StringField::StringField
StringField(int field, const std::string &data)
Definition: Field.h:278

Generated on Wed Apr 29 2020 19:41:30 for QuickFIX by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2001