Index  Source Files  Annotated Class List  Alphabetical Class List  Class Hierarchy  Graphical Class Hierarchy   
 

FIX::DataDictionary Class Reference

Represents a data dictionary for a version of FIX. More...

#include <DataDictionary.h>

List of all members.

Public Member Functions

 DataDictionary ()
 DataDictionary (const DataDictionary &copy)
 DataDictionary (std::istream &stream) throw ( ConfigError )
 DataDictionary (const std::string &url) throw ( ConfigError )
virtual ~DataDictionary ()
void readFromURL (const std::string &url) throw ( ConfigError )
void readFromDocument (DOMDocumentPtr pDoc) throw ( ConfigError )
void readFromStream (std::istream &stream) throw ( ConfigError )
int * getOrderedFields () const
void setVersion (const std::string &beginString)
std::string getVersion () const
void addField (int field)
void addFieldName (int field, const std::string &name)
bool getFieldName (int field, std::string &name) const
bool getFieldTag (std::string name, int &field) const
void addValueName (int field, const std::string &value, const std::string &name)
bool getValueName (int field, const std::string &value, std::string &name) const
bool isField (int field) const
void addMsgType (const std::string &msgType)
bool isMsgType (const std::string &msgType) const
void addMsgField (const std::string &msgType, int field)
bool isMsgField (const std::string &msgType, int field) const
void addHeaderField (int field, bool required)
bool isHeaderField (int field) const
void addTrailerField (int field, bool required)
bool isTrailerField (int field) const
void addFieldType (int field, TYPE::Type type)
bool getFieldType (int field, TYPE::Type &type) const
void addRequiredField (const std::string &msgType, int field)
bool isRequiredField (const std::string &msgType, int field) const
void addFieldValue (int field, const std::string &value)
bool hasFieldValue (int field) const
bool isFieldValue (int field, const std::string &value) const
void addGroup (const std::string &msg, int field, int delim, const DataDictionary &dataDictionary)
bool isGroup (const std::string &msg, int field) const
bool getGroup (const std::string &msg, int field, int &delim, const DataDictionary *&pDataDictionary) const
bool isDataField (int field) const
bool isMultipleValueStringField (int field) const
void checkFieldsOutOfOrder (bool value)
void checkFieldsHaveValues (bool value)
void checkUserDefinedFields (bool value)
void validate (const Message &message) throw ( std::exception )
 Validate a message.

DataDictionaryoperator= (const DataDictionary &rhs)

Private Types

typedef std::set< int > MsgFields
typedef std::map< std::string,
MsgFields
MsgTypeToField
typedef std::set< std::string > MsgTypes
typedef std::set< int > Fields
typedef std::map< int, bool > NonBodyFields
typedef std::vector< int > OrderedFields
typedef int * OrderedFieldsArray
typedef std::map< int, TYPE::TypeFieldTypes
typedef std::set< std::string > Values
typedef std::map< int, ValuesFieldToValue
typedef std::map< int, std::string > FieldToName
typedef std::map< std::string,
int > 
NameToField
typedef std::map< std::pair<
int, std::string >, std::string > 
ValueToName
typedef std::map< std::pair<
std::string, int >, std::pair<
int, DataDictionary * > > 
FieldToGroup

Private Member Functions

void iterate (const FieldMap &map, const MsgType &msgType)
 Iterate through fields while applying checks.

void checkMsgType (const MsgType &msgType) const
 Check if message type is defined in spec.

bool shouldCheckTag (const FieldBase &field) const
 If we need to check for the tag in the dictionary.

void checkValidTagNumber (const FieldBase &field) const throw ( InvalidTagNumber )
 Check if field tag number is defined in spec.

void checkValidFormat (const FieldBase &field) const throw ( IncorrectDataFormat )
void checkValue (const FieldBase &field) const throw ( IncorrectTagValue )
void checkHasValue (const FieldBase &field) const throw ( NoTagValue )
 Check if a field has a value.

void checkIsInMessage (const FieldBase &field, const MsgType &msgType) const throw ( TagNotDefinedForMessage )
 Check if a field is in this message type.

void checkGroupCount (const FieldBase &field, const FieldMap &fieldMap, const MsgType &msgType) const throw ( RepeatingGroupCountMismatch )
 Check if group count matches number of groups in.

void checkHasRequired (const FieldMap &header, const FieldMap &body, const FieldMap &trailer, const MsgType &msgType) const throw ( RequiredTagMissing )
 Check if a message has all required fields.

void readMSXMLDOM (const std::string &)
 Read XML file using MSXML.

void readMSXML (const std::string &)
void readLibXml (const std::string &)
 Read XML file using libXML.

int lookupXMLFieldNumber (DOMDocument *, DOMNode *) const
int lookupXMLFieldNumber (DOMDocument *, const std::string &name) const
int addXMLComponentFields (DOMDocument *, DOMNode *, const std::string &msgtype, DataDictionary &, bool)
void addXMLGroup (DOMDocument *, DOMNode *, const std::string &msgtype, DataDictionary &, bool)
TYPE::Type XMLTypeToType (const std::string &xmlType) const

Private Attributes

bool m_hasVersion
bool m_checkFieldsOutOfOrder
bool m_checkFieldsHaveValues
bool m_checkUserDefinedFields
BeginString m_beginString
MsgTypeToField m_messageFields
MsgTypeToField m_requiredFields
MsgTypes m_messages
Fields m_fields
OrderedFields m_orderedFields
OrderedFieldsArray m_orderedFieldsArray
NonBodyFields m_headerFields
NonBodyFields m_trailerFields
FieldTypes m_fieldTypes
FieldToValue m_fieldValues
FieldToName m_fieldNames
NameToField m_names
ValueToName m_valueNames
FieldToGroup m_groups


Detailed Description

Represents a data dictionary for a version of FIX.

Generally loaded from an XML document. The DataDictionary is also responsible for validation beyond the basic structure of a message.

Definition at line 49 of file DataDictionary.h.


Member Typedef Documentation

typedef std::set< int > FIX::DataDictionary::Fields [private]
 

Definition at line 54 of file DataDictionary.h.

typedef std::map< std::pair < std::string, int > , std::pair < int, DataDictionary* > > FIX::DataDictionary::FieldToGroup [private]
 

Definition at line 66 of file DataDictionary.h.

typedef std::map< int, std::string > FIX::DataDictionary::FieldToName [private]
 

Definition at line 61 of file DataDictionary.h.

typedef std::map< int, Values > FIX::DataDictionary::FieldToValue [private]
 

Definition at line 60 of file DataDictionary.h.

typedef std::map< int, TYPE::Type > FIX::DataDictionary::FieldTypes [private]
 

Definition at line 58 of file DataDictionary.h.

typedef std::set< int > FIX::DataDictionary::MsgFields [private]
 

Definition at line 51 of file DataDictionary.h.

Referenced by checkHasRequired().

typedef std::set< std::string > FIX::DataDictionary::MsgTypes [private]
 

Definition at line 53 of file DataDictionary.h.

typedef std::map< std::string, MsgFields > FIX::DataDictionary::MsgTypeToField [private]
 

Definition at line 52 of file DataDictionary.h.

typedef std::map< std::string, int > FIX::DataDictionary::NameToField [private]
 

Definition at line 62 of file DataDictionary.h.

typedef std::map< int, bool > FIX::DataDictionary::NonBodyFields [private]
 

Definition at line 55 of file DataDictionary.h.

typedef std::vector< int > FIX::DataDictionary::OrderedFields [private]
 

Definition at line 56 of file DataDictionary.h.

typedef int* FIX::DataDictionary::OrderedFieldsArray [private]
 

Definition at line 57 of file DataDictionary.h.

typedef std::set< std::string > FIX::DataDictionary::Values [private]
 

Definition at line 59 of file DataDictionary.h.

typedef std::map< std::pair < int, std::string > , std::string > FIX::DataDictionary::ValueToName [private]
 

Definition at line 64 of file DataDictionary.h.


Constructor & Destructor Documentation

FIX::DataDictionary::DataDictionary  ) 
 

Definition at line 48 of file DataDictionary.cpp.

00049 : m_hasVersion( false ), m_checkFieldsOutOfOrder( true ),
00050   m_checkFieldsHaveValues( true ), m_checkUserDefinedFields( true ),
00051   m_orderedFieldsArray(0) {}

FIX::DataDictionary::DataDictionary const DataDictionary copy  ) 
 

Definition at line 71 of file DataDictionary.cpp.

00072 {
00073   *this = copy;
00074 }

FIX::DataDictionary::DataDictionary std::istream &  stream  )  throw ( ConfigError )
 

Definition at line 53 of file DataDictionary.cpp.

00055 : m_hasVersion( false ), m_checkFieldsOutOfOrder( true ),
00056   m_checkFieldsHaveValues( true ), m_checkUserDefinedFields( true ),
00057   m_orderedFieldsArray(0)
00058 {
00059   readFromStream( stream );
00060 }

FIX::DataDictionary::DataDictionary const std::string &  url  )  throw ( ConfigError )
 

Definition at line 62 of file DataDictionary.cpp.

00064 : m_hasVersion( false ), m_checkFieldsOutOfOrder( true ),
00065   m_checkFieldsHaveValues( true ), m_checkUserDefinedFields( true ),
00066   m_orderedFieldsArray(0)
00067 {
00068   readFromURL( url );
00069 }

FIX::DataDictionary::~DataDictionary  )  [virtual]
 

Definition at line 76 of file DataDictionary.cpp.

References m_groups, and m_orderedFieldsArray.

00077 {
00078   FieldToGroup::iterator i;
00079   for ( i = m_groups.begin(); i != m_groups.end(); ++i )
00080     delete i->second.second;
00081   if( m_orderedFieldsArray )
00082     delete [] m_orderedFieldsArray;
00083 }


Member Function Documentation

void FIX::DataDictionary::addField int  field  )  [inline]
 

Definition at line 92 of file DataDictionary.h.

References m_fields, and m_orderedFields.

Referenced by addXMLComponentFields(), and addXMLGroup().

00093   {
00094     m_fields.insert( field );
00095     m_orderedFields.push_back( field );
00096   }

void FIX::DataDictionary::addFieldName int  field,
const std::string &  name
[inline]
 

Definition at line 98 of file DataDictionary.h.

References m_fieldNames, and m_names.

00099   {
00100     if( m_names.insert( std::make_pair(name, field) ).second == false )
00101       throw ConfigError( "Field named " + name + " defined multiple times" );
00102     m_fieldNames[field] = name;
00103   }

void FIX::DataDictionary::addFieldType int  field,
TYPE::Type  type
[inline]
 

Definition at line 181 of file DataDictionary.h.

References m_fieldTypes.

00182   {
00183     m_fieldTypes[ field ] = type;
00184   }

void FIX::DataDictionary::addFieldValue int  field,
const std::string &  value
[inline]
 

Definition at line 206 of file DataDictionary.h.

References m_fieldValues.

00207   {
00208     m_fieldValues[ field ].insert( value );
00209   }

void FIX::DataDictionary::addGroup const std::string &  msg,
int  field,
int  delim,
const DataDictionary dataDictionary
[inline]
 

Definition at line 240 of file DataDictionary.h.

References getVersion(), m_groups, and setVersion().

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

00242   {
00243     DataDictionary * pDD = new DataDictionary;
00244     *pDD = dataDictionary;
00245     pDD->setVersion( getVersion() );
00246     m_groups[ std::make_pair( msg, field ) ] = std::make_pair( delim, pDD );
00247   }

void FIX::DataDictionary::addHeaderField int  field,
bool  required
[inline]
 

Definition at line 161 of file DataDictionary.h.

References m_headerFields.

00162   {
00163     m_headerFields[ field ] = required;
00164   }

void FIX::DataDictionary::addMsgField const std::string &  msgType,
int  field
[inline]
 

Definition at line 149 of file DataDictionary.h.

References m_messageFields.

Referenced by addXMLComponentFields().

00150   {
00151     m_messageFields[ msgType ].insert( field );
00152   }

void FIX::DataDictionary::addMsgType const std::string &  msgType  )  [inline]
 

Definition at line 139 of file DataDictionary.h.

References m_messages.

00140   {
00141     m_messages.insert( msgType );
00142   }

void FIX::DataDictionary::addRequiredField const std::string &  msgType,
int  field
[inline]
 

Definition at line 194 of file DataDictionary.h.

References m_requiredFields.

Referenced by addXMLComponentFields(), and addXMLGroup().

00195   {
00196     m_requiredFields[ msgType ].insert( field );
00197   }

void FIX::DataDictionary::addTrailerField int  field,
bool  required
[inline]
 

Definition at line 171 of file DataDictionary.h.

References m_trailerFields.

00172   {
00173     m_trailerFields[ field ] = required;
00174   }

void FIX::DataDictionary::addValueName int  field,
const std::string &  value,
const std::string &  name
[inline]
 

Definition at line 121 of file DataDictionary.h.

References m_valueNames.

00122   {
00123     m_valueNames[std::make_pair(field, value)] = name;
00124   }

int FIX::DataDictionary::addXMLComponentFields DOMDocument ,
DOMNode ,
const std::string &  msgtype,
DataDictionary ,
bool 
[private]
 

Definition at line 469 of file DataDictionary.cpp.

References addField(), addMsgField(), addRequiredField(), addXMLGroup(), FIX::DOMAttributesPtr, FIX::DOMNodePtr, FIX::DOMNode::getAttributes(), FIX::DOMDocument::getNode(), lookupXMLFieldNumber(), QF_STACK_POP, QF_STACK_PUSH, and RESET_AUTO_PTR.

Referenced by addXMLGroup().

00473 { QF_STACK_PUSH(DataDictionary::addXMLComponentFields)
00474 
00475   int firstField = 0;
00476 
00477   DOMAttributesPtr attrs = pNode->getAttributes();
00478   std::string name;
00479   if(!attrs->get("name", name))
00480     throw ConfigError("No name given to component");
00481 
00482   DOMNodePtr pComponentNode =
00483     pDoc->getNode("/fix/components/component[@name='" + name + "']");
00484   if(pComponentNode.get() == 0)
00485     throw ConfigError("Component not found");
00486 
00487   DOMNodePtr pComponentFieldNode = pComponentNode->getFirstChildNode();
00488   while(pComponentFieldNode.get())
00489   {
00490     if(pComponentFieldNode->getName() == "field"
00491        || pComponentFieldNode->getName() == "group")
00492     {
00493       DOMAttributesPtr attrs = pComponentFieldNode->getAttributes();
00494       std::string name;
00495       if(!attrs->get("name", name))
00496         throw ConfigError("No name given to field");
00497       int field = lookupXMLFieldNumber(pDoc, name);
00498       if( firstField == 0 ) firstField = field;
00499 
00500       std::string required;
00501       if(attrs->get("required", required)
00502          && (required == "Y" || required =="y")
00503          && componentRequired)
00504       {
00505         addRequiredField(msgtype, field);
00506       }
00507 
00508       DD.addField(field);
00509       DD.addMsgField(msgtype, field);
00510     }
00511     if(pComponentFieldNode->getName() == "group")
00512     {
00513       DOMAttributesPtr attrs = pComponentFieldNode->getAttributes();
00514       std::string required;
00515       attrs->get("required", required);
00516       bool isRequired = (required == "Y" || required == "y");
00517       addXMLGroup(pDoc, pComponentFieldNode.get(), msgtype, DD, isRequired);
00518     }
00519     RESET_AUTO_PTR(pComponentFieldNode,
00520       pComponentFieldNode->getNextSiblingNode());
00521   }
00522   return firstField;
00523 
00524   QF_STACK_POP
00525 }

void FIX::DataDictionary::addXMLGroup DOMDocument ,
DOMNode ,
const std::string &  msgtype,
DataDictionary ,
bool 
[private]
 

Definition at line 527 of file DataDictionary.cpp.

References addField(), addGroup(), addRequiredField(), addXMLComponentFields(), FIX::DOMAttributesPtr, FIX::DOMNodePtr, FIX::DOMNode::getAttributes(), FIX::DOMNode::getFirstChildNode(), lookupXMLFieldNumber(), QF_STACK_POP, QF_STACK_PUSH, and RESET_AUTO_PTR.

Referenced by addXMLComponentFields().

00530 { QF_STACK_PUSH(DataDictionary::addXMLGroup)
00531 
00532   DOMAttributesPtr attrs = pNode->getAttributes();
00533   std::string name;
00534   if(!attrs->get("name", name))
00535     throw ConfigError("No name given to group");
00536   int group = lookupXMLFieldNumber( pDoc, name );
00537   int delim = 0;
00538   int field = 0;
00539   DataDictionary groupDD;
00540   DOMNodePtr node = pNode->getFirstChildNode();
00541   while(node.get())
00542   {
00543     if( node->getName() == "field" )
00544     {
00545       field = lookupXMLFieldNumber( pDoc, node.get() );
00546       groupDD.addField( field );
00547 
00548       DOMAttributesPtr attrs = node->getAttributes();
00549       std::string required;
00550       if( attrs->get("required", required)
00551          && ( required == "Y" || required =="y" )
00552          && groupRequired )
00553       {
00554         groupDD.addRequiredField(msgtype, field);
00555       }
00556     }
00557     else if( node->getName() == "component" )
00558     {
00559       field = addXMLComponentFields( pDoc, node.get(), msgtype, groupDD, false );
00560     }
00561     else if( node->getName() == "group" )
00562     {
00563       field = lookupXMLFieldNumber( pDoc, node.get() );
00564       groupDD.addField( field );
00565       DOMAttributesPtr attrs = node->getAttributes();
00566       std::string required;
00567       if( attrs->get("required", required )
00568          && ( required == "Y" || required =="y" )
00569          && groupRequired)
00570       {
00571         groupDD.addRequiredField(msgtype, field);
00572       }
00573             bool isRequired = false;
00574             if( attrs->get("required", required) )
00575                   isRequired = (required == "Y" || required == "y");
00576       addXMLGroup( pDoc, node.get(), msgtype, groupDD, isRequired );
00577     }
00578     if( delim == 0 ) delim = field;
00579     RESET_AUTO_PTR(node, node->getNextSiblingNode());
00580   }
00581 
00582   if( delim ) DD.addGroup( msgtype, group, delim, groupDD );
00583 
00584   QF_STACK_POP
00585 }

void FIX::DataDictionary::checkFieldsHaveValues bool  value  )  [inline]
 

Definition at line 280 of file DataDictionary.h.

References m_checkFieldsHaveValues.

Referenced by FIX::SessionFactory::create().

00281   { m_checkFieldsHaveValues = value; }

void FIX::DataDictionary::checkFieldsOutOfOrder bool  value  )  [inline]
 

Definition at line 278 of file DataDictionary.h.

References m_checkFieldsOutOfOrder.

Referenced by FIX::SessionFactory::create().

00279   { m_checkFieldsOutOfOrder = value; }

void FIX::DataDictionary::checkGroupCount const FieldBase field,
const FieldMap fieldMap,
const MsgType &  msgType
const throw ( RepeatingGroupCountMismatch ) [inline, private]
 

Check if group count matches number of groups in.

Definition at line 410 of file DataDictionary.h.

References isGroup().

Referenced by iterate().

00412   {
00413     int fieldNum = field.getField();
00414     if( isGroup(msgType, fieldNum) )
00415     {
00416       if( fieldMap.groupCount(fieldNum)
00417         != IntConvertor::convert(field.getString()) )
00418       throw RepeatingGroupCountMismatch(fieldNum);
00419     }
00420   }

void FIX::DataDictionary::checkHasRequired const FieldMap header,
const FieldMap body,
const FieldMap trailer,
const MsgType &  msgType
const throw ( RequiredTagMissing ) [inline, private]
 

Check if a message has all required fields.

Definition at line 424 of file DataDictionary.h.

References FIX::FieldMap::g_iterator, getGroup(), m_headerFields, m_requiredFields, m_trailerFields, and MsgFields.

00427   {
00428     NonBodyFields::const_iterator iNBF;
00429     for( iNBF = m_headerFields.begin(); iNBF != m_headerFields.end(); ++iNBF )
00430     {
00431       if( iNBF->second == true && !header.isSetField(iNBF->first) )
00432         throw RequiredTagMissing( iNBF->first );
00433     }
00434 
00435     for( iNBF = m_trailerFields.begin(); iNBF != m_trailerFields.end(); ++iNBF )
00436     {
00437       if( iNBF->second == true && !trailer.isSetField(iNBF->first) )
00438         throw RequiredTagMissing( iNBF->first );
00439     }
00440 
00441     MsgTypeToField::const_iterator iM
00442       = m_requiredFields.find( msgType.getValue() );
00443     if ( iM == m_requiredFields.end() ) return ;
00444 
00445     const MsgFields& fields = iM->second;
00446     MsgFields::const_iterator iF;
00447     for( iF = fields.begin(); iF != fields.end(); ++iF )
00448     {
00449       if( !body.isSetField(*iF) )
00450         throw RequiredTagMissing( *iF );
00451     }
00452 
00453     FieldMap::g_iterator groups;
00454     for( groups = body.g_begin(); groups != body.g_end(); ++groups )
00455     {
00456       int delim;
00457       const DataDictionary* DD = 0;
00458       int field = groups->first;
00459       if( getGroup( msgType.getValue(), field, delim, DD ) )
00460       {
00461         std::vector<FieldMap*>::const_iterator group;
00462         for( group = groups->second.begin(); group != groups->second.end(); ++group )
00463           DD->checkHasRequired( **group, **group, **group, msgType );
00464       }
00465     }
00466   }

void FIX::DataDictionary::checkHasValue const FieldBase field  )  const throw ( NoTagValue ) [inline, private]
 

Check if a field has a value.

Definition at line 392 of file DataDictionary.h.

References m_checkFieldsHaveValues.

Referenced by iterate().

00394   {
00395     if ( m_checkFieldsHaveValues && !field.getString().length() )
00396       throw NoTagValue( field.getField() );
00397   }

void FIX::DataDictionary::checkIsInMessage const FieldBase field,
const MsgType &  msgType
const throw ( TagNotDefinedForMessage ) [inline, private]
 

Check if a field is in this message type.

Definition at line 401 of file DataDictionary.h.

References isMsgField().

Referenced by iterate().

00403   {
00404     if ( !isMsgField( msgType, field.getField() ) )
00405       throw TagNotDefinedForMessage( field.getField() );
00406   }

void FIX::DataDictionary::checkMsgType const MsgType &  msgType  )  const [inline, private]
 

Check if message type is defined in spec.

Definition at line 294 of file DataDictionary.h.

References isMsgType().

00295   {
00296     if ( !isMsgType( msgType.getValue() ) )
00297       throw InvalidMessageType();
00298   }

void FIX::DataDictionary::checkUserDefinedFields bool  value  )  [inline]
 

Definition at line 282 of file DataDictionary.h.

References m_checkUserDefinedFields.

Referenced by FIX::SessionFactory::create().

00283   { m_checkUserDefinedFields = value; }

void FIX::DataDictionary::checkValidFormat const FieldBase field  )  const throw ( IncorrectDataFormat ) [inline, private]
 

Definition at line 317 of file DataDictionary.h.

References getFieldType().

Referenced by iterate().

00319   {
00320     try
00321     {
00322       TYPE::Type type = TYPE::Unknown;
00323       getFieldType( field.getField(), type );
00324       switch ( type )
00325       {
00326       case TYPE::String:
00327         STRING_CONVERTOR::convert( field.getString() ); break;
00328       case TYPE::Char:
00329         CHAR_CONVERTOR::convert( field.getString() ); break;
00330       case TYPE::Price:
00331         PRICE_CONVERTOR::convert( field.getString() ); break;
00332       case TYPE::Int:
00333         INT_CONVERTOR::convert( field.getString() ); break;
00334       case TYPE::Amt:
00335         AMT_CONVERTOR::convert( field.getString() ); break;
00336       case TYPE::Qty:
00337         QTY_CONVERTOR::convert( field.getString() ); break;
00338       case TYPE::Currency:
00339         CURRENCY_CONVERTOR::convert( field.getString() ); break;
00340       case TYPE::MultipleValueString:
00341         MULTIPLEVALUESTRING_CONVERTOR::convert( field.getString() ); break;
00342       case TYPE::Exchange:
00343         EXCHANGE_CONVERTOR::convert( field.getString() ); break;
00344       case TYPE::UtcTimeStamp:
00345         UTCTIMESTAMP_CONVERTOR::convert( field.getString() ); break;
00346       case TYPE::Boolean:
00347         BOOLEAN_CONVERTOR::convert( field.getString() ); break;
00348       case TYPE::LocalMktDate:
00349         LOCALMKTDATE_CONVERTOR::convert( field.getString() ); break;
00350       case TYPE::Data:
00351         DATA_CONVERTOR::convert( field.getString() ); break;
00352       case TYPE::Float:
00353         FLOAT_CONVERTOR::convert( field.getString() ); break;
00354       case TYPE::PriceOffset:
00355         PRICEOFFSET_CONVERTOR::convert( field.getString() ); break;
00356       case TYPE::MonthYear:
00357         MONTHYEAR_CONVERTOR::convert( field.getString() ); break;
00358       case TYPE::DayOfMonth:
00359         DAYOFMONTH_CONVERTOR::convert( field.getString() ); break;
00360       case TYPE::UtcDate:
00361         UTCDATE_CONVERTOR::convert( field.getString() ); break;
00362       case TYPE::UtcTimeOnly:
00363         UTCTIMEONLY_CONVERTOR::convert( field.getString() ); break;
00364       case TYPE::NumInGroup:
00365         NUMINGROUP_CONVERTOR::convert( field.getString() ); break;
00366       case TYPE::Percentage:
00367         PERCENTAGE_CONVERTOR::convert( field.getString() ); break;
00368       case TYPE::SeqNum:
00369         SEQNUM_CONVERTOR::convert( field.getString() ); break;
00370       case TYPE::Length:
00371         LENGTH_CONVERTOR::convert( field.getString() ); break;
00372       case TYPE::Country:
00373         COUNTRY_CONVERTOR::convert( field.getString() ); break;
00374       case TYPE::Unknown: break;
00375       }
00376     }
00377     catch ( FieldConvertError& )
00378     { throw IncorrectDataFormat( field.getField() ); }
00379   }

void FIX::DataDictionary::checkValidTagNumber const FieldBase field  )  const throw ( InvalidTagNumber ) [inline, private]
 

Check if field tag number is defined in spec.

Definition at line 310 of file DataDictionary.h.

References m_fields.

Referenced by iterate().

00312   {
00313     if( m_fields.find( field.getField() ) == m_fields.end() )
00314       throw InvalidTagNumber( field.getField() );
00315   }

void FIX::DataDictionary::checkValue const FieldBase field  )  const throw ( IncorrectTagValue ) [inline, private]
 

Definition at line 381 of file DataDictionary.h.

References hasFieldValue(), and isFieldValue().

Referenced by iterate().

00383   {
00384     if ( !hasFieldValue( field.getField() ) ) return ;
00385 
00386     const std::string& value = field.getString();
00387     if ( !isFieldValue( field.getField(), value ) )
00388       throw IncorrectTagValue( field.getField() );
00389   }

bool FIX::DataDictionary::getFieldName int  field,
std::string &  name
const [inline]
 

Definition at line 105 of file DataDictionary.h.

References m_fieldNames.

00106   {
00107     FieldToName::const_iterator i = m_fieldNames.find( field );
00108     if(i == m_fieldNames.end()) return false;
00109     name = i->second;
00110     return true;
00111   }

bool FIX::DataDictionary::getFieldTag std::string  name,
int &  field
const [inline]
 

Definition at line 113 of file DataDictionary.h.

References m_names.

00114   {
00115     NameToField::const_iterator i = m_names.find( name );
00116     if(i == m_names.end()) return false;
00117     field = i->second;
00118     return true;
00119   }

bool FIX::DataDictionary::getFieldType int  field,
TYPE::Type type
const [inline]
 

Definition at line 186 of file DataDictionary.h.

References m_fieldTypes.

Referenced by checkValidFormat().

00187   {
00188     FieldTypes::const_iterator i = m_fieldTypes.find( field );
00189     if ( i == m_fieldTypes.end() ) return false;
00190     type = i->second;
00191     return true;
00192   }

bool FIX::DataDictionary::getGroup const std::string &  msg,
int  field,
int &  delim,
const DataDictionary *&  pDataDictionary
const [inline]
 

Definition at line 254 of file DataDictionary.h.

References m_groups.

Referenced by checkHasRequired(), and FIX::Message::setGroup().

00256   {
00257     FieldToGroup::const_iterator i =
00258       m_groups.find( std::make_pair( msg, field ) );
00259     if ( i == m_groups.end() ) return false;
00260     std::pair < int, DataDictionary* > pair = i->second;
00261     delim = pair.first;
00262     pDataDictionary = pair.second;
00263     return true;
00264   }

int * FIX::DataDictionary::getOrderedFields  )  const
 

Definition at line 430 of file DataDictionary.cpp.

References m_orderedFields, m_orderedFieldsArray, QF_STACK_POP, and QF_STACK_PUSH.

Referenced by FIX::Message::setGroup().

00431 { QF_STACK_PUSH(DataDictionary::getOrderedFields)
00432 
00433   if( m_orderedFieldsArray ) return m_orderedFieldsArray;
00434   m_orderedFieldsArray = new int[m_orderedFields.size() + 1];
00435 
00436   int* i = m_orderedFieldsArray;
00437   OrderedFields::const_iterator iter;
00438   for( iter = m_orderedFields.begin(); iter != m_orderedFields.end(); *(i++) = *(iter++) ) {}
00439   *i = 0;
00440   return m_orderedFieldsArray;
00441 
00442   QF_STACK_POP
00443 }

bool FIX::DataDictionary::getValueName int  field,
const std::string &  value,
std::string &  name
const [inline]
 

Definition at line 126 of file DataDictionary.h.

References m_valueNames.

00127   {
00128     ValueToName::const_iterator i = m_valueNames.find( std::make_pair(field, value) );
00129     if(i == m_valueNames.end()) return false;
00130     name = i->second;
00131     return true;
00132   }

std::string FIX::DataDictionary::getVersion  )  const [inline]
 

Definition at line 87 of file DataDictionary.h.

References m_beginString.

Referenced by addGroup().

00088   {
00089     return m_beginString;
00090   }

bool FIX::DataDictionary::hasFieldValue int  field  )  const [inline]
 

Definition at line 211 of file DataDictionary.h.

References m_fieldValues.

Referenced by checkValue().

00212   {
00213     FieldToValue::const_iterator i = m_fieldValues.find( field );
00214     return i != m_fieldValues.end();
00215   }

bool FIX::DataDictionary::isDataField int  field  )  const [inline]
 

Definition at line 266 of file DataDictionary.h.

References m_fieldTypes.

00267   {
00268     FieldTypes::const_iterator i = m_fieldTypes.find( field );
00269     return i != m_fieldTypes.end() && i->second == TYPE::Data;
00270   }

bool FIX::DataDictionary::isField int  field  )  const [inline]
 

Definition at line 134 of file DataDictionary.h.

References m_fields.

Referenced by FIX::Message::setGroup().

00135   {
00136     return m_fields.find( field ) != m_fields.end();
00137   }

bool FIX::DataDictionary::isFieldValue int  field,
const std::string &  value
const [inline]
 

Definition at line 217 of file DataDictionary.h.

References isMultipleValueStringField(), and m_fieldValues.

Referenced by checkValue().

00218   {
00219     FieldToValue::const_iterator i = m_fieldValues.find( field );
00220     if ( i == m_fieldValues.end() )
00221