FIX::DataDictionary Class Reference

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

`#include <DataDictionary.h>`

Collaboration diagram for FIX::DataDictionary:
[legend]

## Classes

struct | MessageFieldsOrderHolder

## Public Member Functions

| DataDictionary ()
| DataDictionary (const DataDictionary &copy)
| DataDictionary (std::istream &stream, bool preserveMsgFldsOrder=false) throw ( ConfigError )
| DataDictionary (const std::string &url, bool preserveMsgFldsOrder=false) throw ( ConfigError )
virtual | ~DataDictionary ()
void | readFromURL (const std::string &url) throw ( ConfigError )
void | readFromDocument (const DOMDocumentPtr &pDoc) throw ( ConfigError )
void | readFromStream (std::istream &stream) throw ( ConfigError )
message_order const & | getOrderedFields () const
message_order const & | getHeaderOrderedFields () const throw ( ConfigError )
message_order const & | getTrailerOrderedFields () const throw ( ConfigError )
message_order const & | getMessageOrderedFields (const std::string &msgType) const throw ( ConfigError )
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 (const 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, FIX::TYPE::Type type)
bool | getFieldType (int field, FIX::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 | isMultipleValueField (int field) const
void | checkFieldsOutOfOrder (bool value)
void | checkFieldsHaveValues (bool value)
void | checkUserDefinedFields (bool value)
void | allowUnknownMsgFields (bool value)
void | preserveMessageFieldsOrder (bool value)
bool | isMessageFieldsOrderPreserved () const
void | validate (const Message &message) const throw ( FIX::Exception )
void | validate (const Message &message, bool bodyOnly) const throw ( FIX::Exception )
DataDictionary & | operator= (const DataDictionary &rhs)

## Static Public Member Functions

static void | validate (const Message &message, const DataDictionary *const pSessionDD, const DataDictionary *const pAppID) throw ( FIX::Exception )
| Validate a message.

## 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 std::map< std::string, MessageFieldsOrderHolder > | MsgTypeToOrderedFields
typedef message_order | OrderedFieldsArray
typedef std::map< int, TYPE::Type > | FieldTypes
typedef std::set< std::string > | Values
typedef std::map< int, Values > | FieldToValue
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::string, std::pair< int, DataDictionary * > > | FieldPresenceMap
typedef std::map< int, FieldPresenceMap > | FieldToGroup

## Private Member Functions

void | iterate (const FieldMap &map, const MsgType &msgType) const
| 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.
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
bool | m_allowUnknownMessageFields
bool | m_storeMsgFieldsOrder
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
MsgFields | m_dataFields
OrderedFields | m_headerOrderedFields
OrderedFieldsArray | m_headerOrder
OrderedFields | m_trailerOrderedFields
OrderedFieldsArray | m_trailerOrder
MsgTypeToOrderedFields | m_messageOrderedFields

## 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

## FieldPresenceMap

typedef std::map< std::string, std::pair < int, DataDictionary* > > FIX::DataDictionary::FieldPresenceMap

private

Definition at line 109 of file DataDictionary.h.

## Fields

typedef std::set< int > FIX::DataDictionary::Fields

private

Definition at line 54 of file DataDictionary.h.

## FieldToGroup

typedef std::map< int, FieldPresenceMap > FIX::DataDictionary::FieldToGroup

private

Definition at line 110 of file DataDictionary.h.

## FieldToName

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

private

Definition at line 101 of file DataDictionary.h.

## FieldToValue

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

private

Definition at line 100 of file DataDictionary.h.

## FieldTypes

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

private

Definition at line 98 of file DataDictionary.h.

## MsgFields

typedef std::set< int > FIX::DataDictionary::MsgFields

private

Definition at line 51 of file DataDictionary.h.

## MsgTypes

typedef std::set< std::string > FIX::DataDictionary::MsgTypes

private

Definition at line 53 of file DataDictionary.h.

## MsgTypeToField

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

private

Definition at line 52 of file DataDictionary.h.

## MsgTypeToOrderedFields

typedef std::map<std::string, MessageFieldsOrderHolder > FIX::DataDictionary::MsgTypeToOrderedFields

private

Definition at line 95 of file DataDictionary.h.

## NameToField

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

private

Definition at line 102 of file DataDictionary.h.

## NonBodyFields

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

private

Definition at line 55 of file DataDictionary.h.

## OrderedFields

typedef std::vector< int > FIX::DataDictionary::OrderedFields

private

Definition at line 56 of file DataDictionary.h.

## OrderedFieldsArray

typedef message_order FIX::DataDictionary::OrderedFieldsArray

private

Definition at line 97 of file DataDictionary.h.

## Values

typedef std::set< std::string > FIX::DataDictionary::Values

private

Definition at line 99 of file DataDictionary.h.

## ValueToName

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

private

Definition at line 103 of file DataDictionary.h.

## Constructor & Destructor Documentation

## DataDictionary() [1/4]

FIX::DataDictionary::DataDictionary | ( |  | ) |

Definition at line 41 of file DataDictionary.cpp.

: m_hasVersion( false ), m_checkFieldsOutOfOrder( true ),
m_checkFieldsHaveValues( true ), m_checkUserDefinedFields( true ), m_allowUnknownMessageFields( false ), m_storeMsgFieldsOrder(false)
{}
FIX::DataDictionary::m_checkFieldsOutOfOrder
bool m_checkFieldsOutOfOrder
Definition DataDictionary.h:583
FIX::DataDictionary::m_checkUserDefinedFields
bool m_checkUserDefinedFields
Definition DataDictionary.h:585
FIX::DataDictionary::m_hasVersion
bool m_hasVersion
Definition DataDictionary.h:582
FIX::DataDictionary::m_storeMsgFieldsOrder
bool m_storeMsgFieldsOrder
Definition DataDictionary.h:587
FIX::DataDictionary::m_checkFieldsHaveValues
bool m_checkFieldsHaveValues
Definition DataDictionary.h:584
FIX::DataDictionary::m_allowUnknownMessageFields
bool m_allowUnknownMessageFields
Definition DataDictionary.h:586

Referenced by addGroup().

## DataDictionary() [2/4]

FIX::DataDictionary::DataDictionary | ( | const DataDictionary & | copy | ) |

Definition at line 62 of file DataDictionary.cpp.

{
*this = copy;
}

## DataDictionary() [3/4]

FIX::DataDictionary::DataDictionary | ( | std::istream & | stream,
|  | bool | preserveMsgFldsOrder = `false`
| ) |  |
throw | ( | ConfigError
| ) |  |

Definition at line 46 of file DataDictionary.cpp.

: m_hasVersion( false ), m_checkFieldsOutOfOrder( true ),
m_checkFieldsHaveValues( true ), m_checkUserDefinedFields( true ), m_allowUnknownMessageFields( false ), m_storeMsgFieldsOrder(preserveMsgFldsOrder)
{
readFromStream( stream );
}
FIX::DataDictionary::readFromStream
void readFromStream(std::istream &stream)
Definition DataDictionary.cpp:223

## DataDictionary() [4/4]

FIX::DataDictionary::DataDictionary | ( | const std::string & | url,
|  | bool | preserveMsgFldsOrder = `false`
| ) |  |
throw | ( | ConfigError
| ) |  |

Definition at line 54 of file DataDictionary.cpp.

: m_hasVersion( false ), m_checkFieldsOutOfOrder( true ),
m_checkFieldsHaveValues( true ), m_checkUserDefinedFields( true ), m_allowUnknownMessageFields( false ), m_storeMsgFieldsOrder(preserveMsgFldsOrder), m_orderedFieldsArray(0)
{
readFromURL( url );
}
FIX::DataDictionary::m_orderedFieldsArray
OrderedFieldsArray m_orderedFieldsArray
Definition DataDictionary.h:595
FIX::DataDictionary::readFromURL
void readFromURL(const std::string &url)
Definition DataDictionary.cpp:205

## ~DataDictionary()

FIX::DataDictionary::~DataDictionary | ( |  | ) |

virtual

Definition at line 67 of file DataDictionary.cpp.

{
FieldToGroup::iterator i;
for ( i = m_groups.begin(); i != m_groups.end(); ++i )
{
const FieldPresenceMap& presenceMap = i->second;
FieldPresenceMap::const_iterator iter = presenceMap.begin();
for ( ; iter != presenceMap.end(); ++iter )
delete iter->second.second;
}
}
FIX::DataDictionary::FieldPresenceMap
std::map< std::string, std::pair< int, DataDictionary * > > FieldPresenceMap
Definition DataDictionary.h:109
FIX::DataDictionary::m_groups
FieldToGroup m_groups
Definition DataDictionary.h:603

References m_groups.

## Member Function Documentation

## addField()

void FIX::DataDictionary::addField | ( | int | field | ) |

inline

Definition at line 139 of file DataDictionary.h.

{
m_fields.insert( field );
m_orderedFields.push_back( field );
}
FIX::DataDictionary::m_fields
Fields m_fields
Definition DataDictionary.h:593
FIX::DataDictionary::m_orderedFields
OrderedFields m_orderedFields
Definition DataDictionary.h:594

References m_fields, and m_orderedFields.

Referenced by addXMLComponentFields(), and addXMLGroup().

## addFieldName()

void FIX::DataDictionary::addFieldName | ( | int | field,
|  | const std::string & | name
| ) |  |

inline

Definition at line 145 of file DataDictionary.h.

{
if( m_names.insert( std::make_pair(name, field) ).second == false )
throw ConfigError( "Field named " + name + " defined multiple times" );
m_fieldNames[field] = name;
}
FIX::DataDictionary::m_names
NameToField m_names
Definition DataDictionary.h:601
FIX::DataDictionary::m_fieldNames
FieldToName m_fieldNames
Definition DataDictionary.h:600

References m_fieldNames, and m_names.

## addFieldType()

void FIX::DataDictionary::addFieldType | ( | int | field,
|  | FIX::TYPE::Type | type
| ) |  |

inline

Definition at line 243 of file DataDictionary.h.

{
m_fieldTypes[ field ] = type;
if( type == FIX::TYPE::Data )
m_dataFields.insert( field );
}
FIX::DataDictionary::m_fieldTypes
FieldTypes m_fieldTypes
Definition DataDictionary.h:598
FIX::DataDictionary::m_dataFields
MsgFields m_dataFields
Definition DataDictionary.h:604
FIX::TYPE::Data
@ Data
Definition FieldTypes.h:926

References FIX::TYPE::Data, m_dataFields, and m_fieldTypes.

## addFieldValue()

void FIX::DataDictionary::addFieldValue | ( | int | field,
|  | const std::string & | value
| ) |  |

inline

Definition at line 271 of file DataDictionary.h.

{
m_fieldValues[ field ].insert( value );
}
FIX::DataDictionary::m_fieldValues
FieldToValue m_fieldValues
Definition DataDictionary.h:599

References m_fieldValues.

## addGroup()

void FIX::DataDictionary::addGroup | ( | const std::string & | msg,
|  | int | field,
|  | int | delim,
|  | const DataDictionary & | dataDictionary
| ) |  |

inline

Definition at line 305 of file DataDictionary.h.

{
DataDictionary * pDD = new DataDictionary( dataDictionary );
pDD->setVersion( getVersion() );
FieldPresenceMap& presenceMap = m_groups[ field ];
presenceMap[ msg ] = std::make_pair( delim, pDD );
}
FIX::DataDictionary::DataDictionary
DataDictionary()
Definition DataDictionary.cpp:41
FIX::DataDictionary::getVersion
std::string getVersion() const
Definition DataDictionary.h:134

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

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

## addHeaderField()

void FIX::DataDictionary::addHeaderField | ( | int | field,
|  | bool | required
| ) |  |

inline

Definition at line 213 of file DataDictionary.h.

{
if (m_storeMsgFieldsOrder)
{
m_headerOrderedFields.push_back(field);
}
m_headerFields[ field ] = required;
}
FIX::DataDictionary::m_headerOrderedFields
OrderedFields m_headerOrderedFields
Definition DataDictionary.h:605
FIX::DataDictionary::m_headerFields
NonBodyFields m_headerFields
Definition DataDictionary.h:596

References m_headerFields, m_headerOrderedFields, and m_storeMsgFieldsOrder.

## addMsgField()

void FIX::DataDictionary::addMsgField | ( | const std::string & | msgType,
|  | int | field
| ) |  |

inline

Definition at line 196 of file DataDictionary.h.

{
if (m_storeMsgFieldsOrder)
{
m_messageOrderedFields[ msgType ].push_back(field);
}
m_messageFields[ msgType ].insert( field );
}
FIX::DataDictionary::m_messageFields
MsgTypeToField m_messageFields
Definition DataDictionary.h:590
FIX::DataDictionary::m_messageOrderedFields
MsgTypeToOrderedFields m_messageOrderedFields
Definition DataDictionary.h:609

References m_messageFields, m_messageOrderedFields, and m_storeMsgFieldsOrder.

Referenced by addXMLComponentFields().

## addMsgType()

void FIX::DataDictionary::addMsgType | ( | const std::string & | msgType | ) |

inline

Definition at line 186 of file DataDictionary.h.

{
m_messages.insert( msgType );
}
FIX::DataDictionary::m_messages
MsgTypes m_messages
Definition DataDictionary.h:592

References m_messages.

## addRequiredField()

void FIX::DataDictionary::addRequiredField | ( | const std::string & | msgType,
|  | int | field
| ) |  |

inline

Definition at line 259 of file DataDictionary.h.

{
m_requiredFields[ msgType ].insert( field );
}
FIX::DataDictionary::m_requiredFields
MsgTypeToField m_requiredFields
Definition DataDictionary.h:591

References m_requiredFields.

Referenced by addXMLComponentFields(), and addXMLGroup().

## addTrailerField()

void FIX::DataDictionary::addTrailerField | ( | int | field,
|  | bool | required
| ) |  |

inline

Definition at line 228 of file DataDictionary.h.

{
if (m_storeMsgFieldsOrder)
{
m_trailerOrderedFields.push_back(field);
}
m_trailerFields[ field ] = required;
}
FIX::DataDictionary::m_trailerOrderedFields
OrderedFields m_trailerOrderedFields
Definition DataDictionary.h:607
FIX::DataDictionary::m_trailerFields
NonBodyFields m_trailerFields
Definition DataDictionary.h:597

References m_storeMsgFieldsOrder, m_trailerFields, and m_trailerOrderedFields.

## addValueName()

void FIX::DataDictionary::addValueName | ( | int | field,
|  | const std::string & | value,
|  | const std::string & | name
| ) |  |

inline

Definition at line 168 of file DataDictionary.h.

{
m_valueNames[std::make_pair(field, value)] = name;
}
FIX::DataDictionary::m_valueNames
ValueToName m_valueNames
Definition DataDictionary.h:602

References m_valueNames.

## addXMLComponentFields()

int FIX::DataDictionary::addXMLComponentFields | ( | DOMDocument * | pDoc,
|  | DOMNode * | pNode,
|  | const std::string & | msgtype,
|  | DataDictionary & | DD,
|  | bool | componentRequired
| ) |  |

private

Definition at line 525 of file DataDictionary.cpp.

{
int firstField = 0;
DOMAttributesPtr attrs = pNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("No name given to component");
DOMNodePtr pComponentNode =
pDoc->getNode("/fix/components/component[@name='" + name + "']");
if(pComponentNode.get() == 0)
throw ConfigError("Component not found: " + name);
DOMNodePtr pComponentFieldNode = pComponentNode->getFirstChildNode();
while(pComponentFieldNode.get())
{
if(pComponentFieldNode->getName() == "field"
|| pComponentFieldNode->getName() == "group")
{
DOMAttributesPtr attrs = pComponentFieldNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("No name given to field");
int field = lookupXMLFieldNumber(pDoc, name);
if( firstField == 0 ) firstField = field;
std::string required;
if(attrs->get("required", required)
&& (required == "Y" || required =="y")
&& componentRequired)
{
addRequiredField(msgtype, field);
}
DD.addField(field);
DD.addMsgField(msgtype, field);
}
if(pComponentFieldNode->getName() == "component")
{
DOMAttributesPtr attrs = pComponentFieldNode->getAttributes();
std::string required;
attrs->get("required", required);
bool isRequired = (required == "Y" || required == "y");
addXMLComponentFields(pDoc, pComponentFieldNode.get(),
msgtype, DD, isRequired);
}
if(pComponentFieldNode->getName() == "group")
{
DOMAttributesPtr attrs = pComponentFieldNode->getAttributes();
std::string required;
attrs->get("required", required);
bool isRequired = (required == "Y" || required == "y");
addXMLGroup(pDoc, pComponentFieldNode.get(), msgtype, DD, isRequired);
}
RESET_AUTO_PTR(pComponentFieldNode,
pComponentFieldNode->getNextSiblingNode());
}
return firstField;
}
RESET_AUTO_PTR
#define RESET_AUTO_PTR(OLD, NEW)
Definition DataDictionary.cpp:36
FIX::DataDictionary::addRequiredField
void addRequiredField(const std::string &msgType, int field)
Definition DataDictionary.h:259
FIX::DataDictionary::addXMLComponentFields
int addXMLComponentFields(DOMDocument *, DOMNode *, const std::string &msgtype, DataDictionary &, bool)
Definition DataDictionary.cpp:525
FIX::DataDictionary::lookupXMLFieldNumber
int lookupXMLFieldNumber(DOMDocument *, DOMNode *) const
Definition DataDictionary.cpp:507
FIX::DataDictionary::addXMLGroup
void addXMLGroup(DOMDocument *, DOMNode *, const std::string &msgtype, DataDictionary &, bool)
Definition DataDictionary.cpp:589
FIX::DOMAttributesPtr
SmartPtr< DOMAttributes > DOMAttributesPtr
Definition DOMDocument.h:45
FIX::DOMNodePtr
SmartPtr< DOMNode > DOMNodePtr
Definition DOMDocument.h:59

References addField(), addMsgField(), addRequiredField(), addXMLComponentFields(), addXMLGroup(), FIX::DOMNode::getAttributes(), FIX::DOMDocument::getNode(), lookupXMLFieldNumber(), and RESET_AUTO_PTR.

Referenced by addXMLComponentFields(), and addXMLGroup().

## addXMLGroup()

void FIX::DataDictionary::addXMLGroup | ( | DOMDocument * | pDoc,
|  | DOMNode * | pNode,
|  | const std::string & | msgtype,
|  | DataDictionary & | DD,
|  | bool | groupRequired
| ) |  |

private

Definition at line 589 of file DataDictionary.cpp.

{
DOMAttributesPtr attrs = pNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("No name given to group");
int group = lookupXMLFieldNumber( pDoc, name );
int delim = 0;
int field = 0;
DataDictionary groupDD;
DOMNodePtr node = pNode->getFirstChildNode();
while(node.get())
{
if( node->getName() == "field" )
{
field = lookupXMLFieldNumber( pDoc, node.get() );
groupDD.addField( field );
DOMAttributesPtr attrs = node->getAttributes();
std::string required;
if( attrs->get("required", required)
&& ( required == "Y" || required =="y" )
&& groupRequired )
{
groupDD.addRequiredField(msgtype, field);
}
}
else if( node->getName() == "component" )
{
field = addXMLComponentFields( pDoc, node.get(), msgtype, groupDD, false );
}
else if( node->getName() == "group" )
{
field = lookupXMLFieldNumber( pDoc, node.get() );
groupDD.addField( field );
DOMAttributesPtr attrs = node->getAttributes();
std::string required;
if( attrs->get("required", required )
&& ( required == "Y" || required =="y" )
&& groupRequired)
{
groupDD.addRequiredField(msgtype, field);
}
bool isRequired = false;
if( attrs->get("required", required) )
isRequired = (required == "Y" || required == "y");
addXMLGroup( pDoc, node.get(), msgtype, groupDD, isRequired );
}
if( delim == 0 ) delim = field;
RESET_AUTO_PTR(node, node->getNextSiblingNode());
}
if( delim ) DD.addGroup( msgtype, group, delim, groupDD );
}

References addField(), addGroup(), addRequiredField(), addXMLComponentFields(), addXMLGroup(), FIX::DOMNode::getAttributes(), FIX::DOMNode::getFirstChildNode(), lookupXMLFieldNumber(), and RESET_AUTO_PTR.

Referenced by addXMLComponentFields(), and addXMLGroup().

## allowUnknownMsgFields()

void FIX::DataDictionary::allowUnknownMsgFields | ( | bool | value | ) |

inline

Definition at line 364 of file DataDictionary.h.

{ m_allowUnknownMessageFields = value; }

References m_allowUnknownMessageFields.

## checkFieldsHaveValues()

void FIX::DataDictionary::checkFieldsHaveValues | ( | bool | value | ) |

inline

Definition at line 360 of file DataDictionary.h.

{ m_checkFieldsHaveValues = value; }

References m_checkFieldsHaveValues.

## checkFieldsOutOfOrder()

void FIX::DataDictionary::checkFieldsOutOfOrder | ( | bool | value | ) |

inline

Definition at line 358 of file DataDictionary.h.

{ m_checkFieldsOutOfOrder = value; }

References m_checkFieldsOutOfOrder.

## checkGroupCount()

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 517 of file DataDictionary.h.

{
int fieldNum = field.getTag();
if( isGroup(msgType, fieldNum) )
{
if( (int)fieldMap.groupCount(fieldNum)
!= IntConvertor::convert(field.getString()) )
throw RepeatingGroupCountMismatch(fieldNum);
}
}
FIX::DataDictionary::isGroup
bool isGroup(const std::string &msg, int field) const
Definition DataDictionary.h:315
FIX::IntConvertor::convert
static std::string convert(signed_int value)
Definition FieldConvertors.h:153

References FIX::IntConvertor::convert(), and isGroup().

Referenced by iterate().

## checkHasRequired()

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 531 of file DataDictionary.h.

{
NonBodyFields::const_iterator iNBF;
for( iNBF = m_headerFields.begin(); iNBF != m_headerFields.end(); ++iNBF )
{
if( iNBF->second == true && !header.isSetField(iNBF->first) )
throw RequiredTagMissing( iNBF->first );
}
for( iNBF = m_trailerFields.begin(); iNBF != m_trailerFields.end(); ++iNBF )
{
if( iNBF->second == true && !trailer.isSetField(iNBF->first) )
throw RequiredTagMissing( iNBF->first );
}
MsgTypeToField::const_iterator iM
= m_requiredFields.find( msgType.getString() );
if ( iM == m_requiredFields.end() ) return ;
const MsgFields& fields = iM->second;
MsgFields::const_iterator iF;
for( iF = fields.begin(); iF != fields.end(); ++iF )
{
if( !body.isSetField(*iF) )
throw RequiredTagMissing( *iF );
}
FieldMap::g_const_iterator groups;
for( groups = body.g_begin(); groups != body.g_end(); ++groups )
{
int delim;
const DataDictionary* DD = 0;
int field = groups->first;
if( getGroup( msgType.getValue(), field, delim, DD ) )
{
std::vector<FieldMap*>::const_iterator group;
for( group = groups->second.begin(); group != groups->second.end(); ++group )
DD->checkHasRequired( **group, **group, **group, msgType );
}
}
}
FIX::DataDictionary::MsgFields
std::set< int > MsgFields
Definition DataDictionary.h:51
FIX::DataDictionary::getGroup
bool getGroup(const std::string &msg, int field, int &delim, const DataDictionary *&pDataDictionary) const
Definition DataDictionary.h:326
FIX::FieldMap::g_const_iterator
Groups::const_iterator g_const_iterator
Definition FieldMap.h:102

References checkHasRequired(), getGroup(), m_headerFields, m_requiredFields, and m_trailerFields.

Referenced by checkHasRequired().

## checkHasValue()

void FIX::DataDictionary::checkHasValue | ( | const FieldBase & | field | ) | const
throw | ( | NoTagValue
| ) |  |

inline private

Check if a field has a value.

Definition at line 500 of file DataDictionary.h.

{
if ( m_checkFieldsHaveValues && !field.getString().length() )
throw NoTagValue( field.getTag() );
}

References m_checkFieldsHaveValues.

Referenced by iterate().

## checkIsInMessage()

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 508 of file DataDictionary.h.

{
if ( !isMsgField( msgType, field.getTag() ) )
throw TagNotDefinedForMessage( field.getTag() );
}
FIX::DataDictionary::isMsgField
bool isMsgField(const std::string &msgType, int field) const
Definition DataDictionary.h:206

References isMsgField().

Referenced by iterate().

## checkMsgType()

void FIX::DataDictionary::checkMsgType | ( | const MsgType & | msgType | ) | const

inline private

Check if message type is defined in spec.

Definition at line 388 of file DataDictionary.h.

{
if ( !isMsgType( msgType.getValue() ) )
throw InvalidMessageType();
}
FIX::DataDictionary::isMsgType
bool isMsgType(const std::string &msgType) const
Definition DataDictionary.h:191

References isMsgType().

## checkUserDefinedFields()

void FIX::DataDictionary::checkUserDefinedFields | ( | bool | value | ) |

inline

Definition at line 362 of file DataDictionary.h.

{ m_checkUserDefinedFields = value; }

References m_checkUserDefinedFields.

## checkValidFormat()

void FIX::DataDictionary::checkValidFormat | ( | const FieldBase & | field | ) | const
throw | ( | IncorrectDataFormat
| ) |  |

inline private

Definition at line 413 of file DataDictionary.h.

{
try
{
TYPE::Type type = TYPE::Unknown;
getFieldType( field.getTag(), type );
switch ( type )
{
case TYPE::String:
STRING_CONVERTOR::convert( field.getString() ); break;
case TYPE::Char:
CHAR_CONVERTOR::convert( field.getString() ); break;
case TYPE::Price:
PRICE_CONVERTOR::convert( field.getString() ); break;
case TYPE::Int:
INT_CONVERTOR::convert( field.getString() ); break;
case TYPE::Amt:
AMT_CONVERTOR::convert( field.getString() ); break;
case TYPE::Qty:
QTY_CONVERTOR::convert( field.getString() ); break;
case TYPE::Currency:
CURRENCY_CONVERTOR::convert( field.getString() ); break;
case TYPE::MultipleValueString:
MULTIPLEVALUESTRING_CONVERTOR::convert( field.getString() ); break;
case TYPE::MultipleStringValue:
MULTIPLESTRINGVALUE_CONVERTOR::convert( field.getString() ); break;
case TYPE::MultipleCharValue:
MULTIPLECHARVALUE_CONVERTOR::convert( field.getString() ); break;
case TYPE::Exchange:
EXCHANGE_CONVERTOR::convert( field.getString() ); break;
case TYPE::UtcTimeStamp:
UTCTIMESTAMP_CONVERTOR::convert( field.getString() ); break;
case TYPE::Boolean:
BOOLEAN_CONVERTOR::convert( field.getString() ); break;
case TYPE::LocalMktDate:
LOCALMKTDATE_CONVERTOR::convert( field.getString() ); break;
case TYPE::Data:
DATA_CONVERTOR::convert( field.getString() ); break;
case TYPE::Float:
FLOAT_CONVERTOR::convert( field.getString() ); break;
case TYPE::PriceOffset:
PRICEOFFSET_CONVERTOR::convert( field.getString() ); break;
case TYPE::MonthYear:
MONTHYEAR_CONVERTOR::convert( field.getString() ); break;
case TYPE::DayOfMonth:
DAYOFMONTH_CONVERTOR::convert( field.getString() ); break;
case TYPE::UtcDate:
UTCDATE_CONVERTOR::convert( field.getString() ); break;
case TYPE::UtcTimeOnly:
UTCTIMEONLY_CONVERTOR::convert( field.getString() ); break;
case TYPE::NumInGroup:
NUMINGROUP_CONVERTOR::convert( field.getString() ); break;
case TYPE::Percentage:
PERCENTAGE_CONVERTOR::convert( field.getString() ); break;
case TYPE::SeqNum:
SEQNUM_CONVERTOR::convert( field.getString() ); break;
case TYPE::Length:
LENGTH_CONVERTOR::convert( field.getString() ); break;
case TYPE::Country:
COUNTRY_CONVERTOR::convert( field.getString() ); break;
case TYPE::TzTimeOnly:
TZTIMEONLY_CONVERTOR::convert( field.getString() ); break;
case TYPE::TzTimeStamp:
TZTIMESTAMP_CONVERTOR::convert( field.getString() ); break;
case TYPE::XmlData:
XMLDATA_CONVERTOR::convert( field.getString() ); break;
case TYPE::Language:
LANGUAGE_CONVERTOR::convert( field.getString() ); break;
case TYPE::Unknown: break;
}
}
catch ( FieldConvertError& )
{ throw IncorrectDataFormat( field.getTag(), field.getString() ); }
}
FIX::DataDictionary::getFieldType
bool getFieldType(int field, FIX::TYPE::Type &type) const
Definition DataDictionary.h:251
FIX::TYPE::Type
Type
Definition FieldTypes.h:910
FIX::TYPE::UtcTimeOnly
@ UtcTimeOnly
Definition FieldTypes.h:933
FIX::TYPE::Boolean
@ Boolean
Definition FieldTypes.h:924
FIX::TYPE::NumInGroup
@ NumInGroup
Definition FieldTypes.h:934
FIX::TYPE::Int
@ Int
Definition FieldTypes.h:915
FIX::TYPE::MultipleValueString
@ MultipleValueString
Definition FieldTypes.h:919
FIX::TYPE::DayOfMonth
@ DayOfMonth
Definition FieldTypes.h:930
FIX::TYPE::UtcDate
@ UtcDate
Definition FieldTypes.h:931
FIX::TYPE::PriceOffset
@ PriceOffset
Definition FieldTypes.h:928
FIX::TYPE::Price
@ Price
Definition FieldTypes.h:914
FIX::TYPE::TzTimeStamp
@ TzTimeStamp
Definition FieldTypes.h:940
FIX::TYPE::Exchange
@ Exchange
Definition FieldTypes.h:922
FIX::TYPE::XmlData
@ XmlData
Definition FieldTypes.h:941
FIX::TYPE::MultipleStringValue
@ MultipleStringValue
Definition FieldTypes.h:920
FIX::TYPE::TzTimeOnly
@ TzTimeOnly
Definition FieldTypes.h:939
FIX::TYPE::MultipleCharValue
@ MultipleCharValue
Definition FieldTypes.h:921
FIX::TYPE::Currency
@ Currency
Definition FieldTypes.h:918
FIX::TYPE::UtcTimeStamp
@ UtcTimeStamp
Definition FieldTypes.h:923
FIX::TYPE::MonthYear
@ MonthYear
Definition FieldTypes.h:929
FIX::TYPE::String
@ String
Definition FieldTypes.h:912
FIX::TYPE::Char
@ Char
Definition FieldTypes.h:913
FIX::TYPE::Country
@ Country
Definition FieldTypes.h:938
FIX::TYPE::Float
@ Float
Definition FieldTypes.h:927
FIX::TYPE::SeqNum
@ SeqNum
Definition FieldTypes.h:936
FIX::TYPE::Percentage
@ Percentage
Definition FieldTypes.h:935
FIX::TYPE::Qty
@ Qty
Definition FieldTypes.h:917
FIX::TYPE::Unknown
@ Unknown
Definition FieldTypes.h:911
FIX::TYPE::LocalMktDate
@ LocalMktDate
Definition FieldTypes.h:925
FIX::TYPE::Length
@ Length
Definition FieldTypes.h:937
FIX::TYPE::Language
@ Language
Definition FieldTypes.h:942
FIX::TYPE::Amt
@ Amt
Definition FieldTypes.h:916
FIX::BoolConvertor::convert
static std::string convert(bool value)
Definition FieldConvertors.h:401
FIX::CharConvertor::convert
static std::string convert(char value)
Definition FieldConvertors.h:374
FIX::DoubleConvertor::convert
static std::string convert(double value, int padding=0)
Definition FieldConvertors.h:255
FIX::EmptyConvertor::convert
static const std::string & convert(const std::string &value)
Definition FieldConvertors.h:144
FIX::UtcDateConvertor::convert
static std::string convert(const UtcDate &value)
Definition FieldConvertors.h:635
FIX::UtcTimeOnlyConvertor::convert
static std::string convert(const UtcTimeOnly &value, int precision=0)
Definition FieldConvertors.h:548
FIX::UtcTimeStampConvertor::convert
static std::string convert(const UtcTimeStamp &value, int precision=0)
Definition FieldConvertors.h:434

References FIX::TYPE::Amt, FIX::TYPE::Boolean, FIX::TYPE::Char, FIX::BoolConvertor::convert(), FIX::CharConvertor::convert(), FIX::EmptyConvertor::convert(), FIX::UtcDateConvertor::convert(), FIX::UtcTimeOnlyConvertor::convert(), FIX::UtcTimeStampConvertor::convert(), FIX::DoubleConvertor::convert(), FIX::IntConvertor::convert(), FIX::TYPE::Country, FIX::TYPE::Currency, FIX::TYPE::Data, FIX::TYPE::DayOfMonth, FIX::TYPE::Exchange, FIX::TYPE::Float, getFieldType(), FIX::TYPE::Int, FIX::TYPE::Language, FIX::TYPE::Length, FIX::TYPE::LocalMktDate, FIX::TYPE::MonthYear, FIX::TYPE::MultipleCharValue, FIX::TYPE::MultipleStringValue, FIX::TYPE::MultipleValueString, FIX::TYPE::NumInGroup, FIX::TYPE::Percentage, FIX::TYPE::Price, FIX::TYPE::PriceOffset, FIX::TYPE::Qty, FIX::TYPE::SeqNum, FIX::TYPE::String, FIX::TYPE::TzTimeOnly, FIX::TYPE::TzTimeStamp, FIX::TYPE::Unknown, FIX::TYPE::UtcDate, FIX::TYPE::UtcTimeOnly, FIX::TYPE::UtcTimeStamp, and FIX::TYPE::XmlData.

Referenced by iterate().

## checkValidTagNumber()

void FIX::DataDictionary::checkValidTagNumber | ( | const FieldBase & | field | ) | const
throw | ( | InvalidTagNumber
| ) |  |

inline private

Check if field tag number is defined in spec.

Definition at line 406 of file DataDictionary.h.

{
if( m_fields.find( field.getTag() ) == m_fields.end() )
throw InvalidTagNumber( field.getTag() );
}

References m_fields.

Referenced by iterate().

## checkValue()

void FIX::DataDictionary::checkValue | ( | const FieldBase & | field | ) | const
throw | ( | IncorrectTagValue
| ) |  |

inline private

Definition at line 489 of file DataDictionary.h.

{
if ( !hasFieldValue( field.getTag() ) ) return ;
const std::string& value = field.getString();
if ( !isFieldValue( field.getTag(), value ) )
throw IncorrectTagValue( field.getTag() );
}
FIX::DataDictionary::isFieldValue
bool isFieldValue(int field, const std::string &value) const
Definition DataDictionary.h:282
FIX::DataDictionary::hasFieldValue
bool hasFieldValue(int field) const
Definition DataDictionary.h:276

References hasFieldValue(), and isFieldValue().

Referenced by iterate().

## getFieldName()

bool FIX::DataDictionary::getFieldName | ( | int | field,
|  | std::string & | name
| ) |  | const

inline

Definition at line 152 of file DataDictionary.h.

{
FieldToName::const_iterator i = m_fieldNames.find( field );
if(i == m_fieldNames.end()) return false;
name = i->second;
return true;
}

References m_fieldNames.

## getFieldTag()

bool FIX::DataDictionary::getFieldTag | ( | const std::string & | name,
|  | int & | field
| ) |  | const

inline

Definition at line 160 of file DataDictionary.h.

{
NameToField::const_iterator i = m_names.find( name );
if(i == m_names.end()) return false;
field = i->second;
return true;
}

References m_names.

## getFieldType()

bool FIX::DataDictionary::getFieldType | ( | int | field,
|  | FIX::TYPE::Type & | type
| ) |  | const

inline

Definition at line 251 of file DataDictionary.h.

{
FieldTypes::const_iterator i = m_fieldTypes.find( field );
if ( i == m_fieldTypes.end() ) return false;
type = i->second;
return true;
}

References m_fieldTypes.

Referenced by checkValidFormat().

## getGroup()

bool FIX::DataDictionary::getGroup | ( | const std::string & | msg,
|  | int | field,
|  | int & | delim,
|  | const DataDictionary *& | pDataDictionary
| ) |  | const

inline

Definition at line 326 of file DataDictionary.h.

{
FieldToGroup::const_iterator i = m_groups.find( field );
if ( i == m_groups.end() ) return false;
const FieldPresenceMap& presenceMap = i->second;
FieldPresenceMap::const_iterator iter = presenceMap.find( msg );
if( iter == presenceMap.end() ) return false;
std::pair < int, DataDictionary* > pair = iter->second;
delim = pair.first;
pDataDictionary = pair.second;
return true;
}

References m_groups.

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

## getHeaderOrderedFields()

message_order const & FIX::DataDictionary::getHeaderOrderedFields | ( |  | ) | const
throw | ( | ConfigError
| ) |  |

Definition at line 458 of file DataDictionary.cpp.

{
if( m_headerOrder ) return m_headerOrder;
if (m_headerOrderedFields.size() == 0)
throw ConfigError("<Header> does not have a stored message order");
int * tmp = new int[m_headerOrderedFields.size() + 1];
int * i = tmp;
OrderedFields::const_iterator iter;
for( iter = m_headerOrderedFields.begin(); iter != m_headerOrderedFields.end(); *(i++) = *(iter++) ) {}
*i = 0;
m_headerOrder = message_order(tmp);
delete [] tmp;
return m_headerOrder;
}
FIX::DataDictionary::m_headerOrder
OrderedFieldsArray m_headerOrder
Definition DataDictionary.h:606

References m_headerOrder, and m_headerOrderedFields.

## getMessageOrderedFields()

const message_order & FIX::DataDictionary::getMessageOrderedFields | ( | const std::string & | msgType | ) | const
throw | ( | ConfigError
| ) |  |

Definition at line 498 of file DataDictionary.cpp.

{
MsgTypeToOrderedFields::const_iterator iter = m_messageOrderedFields.find(msgType);
if (iter == m_messageOrderedFields.end())
throw ConfigError("<Message> " + msgType + " does not have a stored message order");
return iter->second.getMessageOrder();
}

## getOrderedFields()

message_order const & FIX::DataDictionary::getOrderedFields | ( |  | ) | const

Definition at line 441 of file DataDictionary.cpp.

{
if( m_orderedFieldsArray ) return m_orderedFieldsArray;
int * tmp = new int[m_orderedFields.size() + 1];
int * i = tmp;
OrderedFields::const_iterator iter;
for( iter = m_orderedFields.begin(); iter != m_orderedFields.end(); *(i++) = *(iter++) ) {}
*i = 0;
m_orderedFieldsArray = message_order(tmp);
delete [] tmp;
return m_orderedFieldsArray;
}

References m_orderedFields, and m_orderedFieldsArray.

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

## getTrailerOrderedFields()

message_order const & FIX::DataDictionary::getTrailerOrderedFields | ( |  | ) | const
throw | ( | ConfigError
| ) |  |

Definition at line 478 of file DataDictionary.cpp.

{
if( m_trailerOrder ) return m_trailerOrder;
if (m_trailerOrderedFields.size() == 0)
throw ConfigError("<Trailer> does not have a stored message order");
int * tmp = new int[m_trailerOrderedFields.size() + 1];
int * i = tmp;
OrderedFields::const_iterator iter;
for( iter = m_trailerOrderedFields.begin(); iter != m_trailerOrderedFields.end(); *(i++) = *(iter++) ) {}
*i = 0;
m_trailerOrder = message_order(tmp);
delete [] tmp;
return m_trailerOrder;
}
FIX::DataDictionary::m_trailerOrder
OrderedFieldsArray m_trailerOrder
Definition DataDictionary.h:608

References m_trailerOrder, and m_trailerOrderedFields.

## getValueName()

bool FIX::DataDictionary::getValueName | ( | int | field,
|  | const std::string & | value,
|  | std::string & | name
| ) |  | const

inline

Definition at line 173 of file DataDictionary.h.

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

References m_valueNames.

## getVersion()

std::string FIX::DataDictionary::getVersion | ( |  | ) | const

inline

Definition at line 134 of file DataDictionary.h.

{
return m_beginString.getString();
}
FIX::DataDictionary::m_beginString
BeginString m_beginString
Definition DataDictionary.h:589

References m_beginString.

Referenced by addGroup().

## hasFieldValue()

bool FIX::DataDictionary::hasFieldValue | ( | int | field | ) | const

inline

Definition at line 276 of file DataDictionary.h.

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

References m_fieldValues.

Referenced by checkValue().

## isDataField()

bool FIX::DataDictionary::isDataField | ( | int | field | ) | const

inline

Definition at line 343 of file DataDictionary.h.

{
MsgFields::const_iterator iter = m_dataFields.find( field );
return iter != m_dataFields.end();
}

References m_dataFields.

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

## isField()

bool FIX::DataDictionary::isField | ( | int | field | ) | const

inline

Definition at line 181 of file DataDictionary.h.

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

References m_fields.

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

## isFieldValue()

bool FIX::DataDictionary::isFieldValue | ( | int | field,
|  | const std::string & | value
| ) |  | const

inline

Definition at line 282 of file DataDictionary.h.

{
FieldToValue::const_iterator i = m_fieldValues.find( field );
if ( i == m_fieldValues.end() )
return false;
if( !isMultipleValueField( field ) )
return i->second.find( value ) != i->second.end();
// MultipleValue
std::string::size_type startPos = 0;
std::string::size_type endPos = 0;
do
{
endPos = value.find_first_of(' ', startPos);
std::string singleValue =
value.substr( startPos, endPos - startPos );
if( i->second.find( singleValue ) == i->second.end() )
return false;
startPos = endPos + 1;
} while( endPos != std::string::npos );
return true;
}
FIX::DataDictionary::isMultipleValueField
bool isMultipleValueField(int field) const
Definition DataDictionary.h:349

References isMultipleValueField(), and m_fieldValues.

Referenced by checkValue().

## isGroup()

bool FIX::DataDictionary::isGroup | ( | const std::string & | msg,
|  | int | field
| ) |  | const

inline

Definition at line 315 of file DataDictionary.h.

{
FieldToGroup::const_iterator i = m_groups.find( field );
if ( i == m_groups.end() ) return false;
const FieldPresenceMap& presenceMap = i->second;
FieldPresenceMap::const_iterator iter = presenceMap.find( msg );
return ( iter != presenceMap.end() );
}

References m_groups.

Referenced by checkGroupCount().

## isHeaderField()

bool FIX::DataDictionary::isHeaderField | ( | int | field | ) | const

inline

Definition at line 223 of file DataDictionary.h.

{
return m_headerFields.find( field ) != m_headerFields.end();
}

References m_headerFields.

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

## isMessageFieldsOrderPreserved()

bool FIX::DataDictionary::isMessageFieldsOrderPreserved | ( |  | ) | const

inline

Definition at line 368 of file DataDictionary.h.

{ return m_storeMsgFieldsOrder; }

References m_storeMsgFieldsOrder.

## isMsgField()

bool FIX::DataDictionary::isMsgField | ( | const std::string & | msgType,
|  | int | field
| ) |  | const

inline

Definition at line 206 of file DataDictionary.h.

{
MsgTypeToField::const_iterator i = m_messageFields.find( msgType );
if ( i == m_messageFields.end() ) return false;
return i->second.find( field ) != i->second.end();
}

References m_messageFields.

Referenced by checkIsInMessage().

## isMsgType()

bool FIX::DataDictionary::isMsgType | ( | const std::string & | msgType | ) | const

inline

Definition at line 191 of file DataDictionary.h.

{
return m_messages.find( msgType ) != m_messages.end();
}

References m_messages.

Referenced by checkMsgType().

## isMultipleValueField()

bool FIX::DataDictionary::isMultipleValueField | ( | int | field | ) | const

inline

Definition at line 349 of file DataDictionary.h.

{
FieldTypes::const_iterator i = m_fieldTypes.find( field );
return i != m_fieldTypes.end()
&& (i->second == TYPE::MultipleValueString
|| i->second == TYPE::MultipleCharValue
|| i->second == TYPE::MultipleStringValue );
}

References m_fieldTypes, FIX::TYPE::MultipleCharValue, FIX::TYPE::MultipleStringValue, and FIX::TYPE::MultipleValueString.

Referenced by isFieldValue().

## isRequiredField()

bool FIX::DataDictionary::isRequiredField | ( | const std::string & | msgType,
|  | int | field
| ) |  | const

inline

Definition at line 264 of file DataDictionary.h.

{
MsgTypeToField::const_iterator i = m_requiredFields.find( msgType );
if ( i == m_requiredFields.end() ) return false;
return i->second.find( field ) != i->second.end();
}

References m_requiredFields.

## isTrailerField()

bool FIX::DataDictionary::isTrailerField | ( | int | field | ) | const

inline

Definition at line 238 of file DataDictionary.h.

{
return m_trailerFields.find( field ) != m_trailerFields.end();
}

References m_trailerFields.

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

## iterate()

void FIX::DataDictionary::iterate | ( | const FieldMap & | map,
|  | const MsgType & | msgType
| ) |  | const

private

Iterate through fields while applying checks.

Definition at line 173 of file DataDictionary.cpp.

{
int lastField = 0;
FieldMap::const_iterator i;
for ( i = map.begin(); i != map.end(); ++i )
{
const FieldBase& field = (*i);
if( i != map.begin() && (field.getTag() == lastField) )
throw RepeatedTag( lastField );
checkHasValue( field );
if ( m_hasVersion )
{
checkValidFormat( field );
checkValue( field );
}
if ( m_beginString.getValue().length() && shouldCheckTag(field) )
{
checkValidTagNumber( field );
if ( !Message::isHeaderField( field, this )
&& !Message::isTrailerField( field, this ) )
{
checkIsInMessage( field, msgType );
checkGroupCount( field, map, msgType );
}
}
lastField = field.getTag();
}
}
FIX::DataDictionary::checkValue
void checkValue(const FieldBase &field) const
Definition DataDictionary.h:489
FIX::DataDictionary::shouldCheckTag
bool shouldCheckTag(const FieldBase &field) const
If we need to check for the tag in the dictionary.
Definition DataDictionary.h:395
FIX::DataDictionary::checkGroupCount
void checkGroupCount(const FieldBase &field, const FieldMap &fieldMap, const MsgType &msgType) const
Check if group count matches number of groups in.
Definition DataDictionary.h:518
FIX::DataDictionary::checkIsInMessage
void checkIsInMessage(const FieldBase &field, const MsgType &msgType) const
Check if a field is in this message type.
Definition DataDictionary.h:509
FIX::DataDictionary::checkValidTagNumber
void checkValidTagNumber(const FieldBase &field) const
Check if field tag number is defined in spec.
Definition DataDictionary.h:406
FIX::DataDictionary::checkHasValue
void checkHasValue(const FieldBase &field) const
Check if a field has a value.
Definition DataDictionary.h:500
FIX::DataDictionary::checkValidFormat
void checkValidFormat(const FieldBase &field) const
Definition DataDictionary.h:413
FIX::FieldMap::const_iterator
Fields::const_iterator const_iterator
Definition FieldMap.h:100
FIX::Message::isHeaderField
static bool isHeaderField(int field)
Definition Message.cpp:497
FIX::Message::isTrailerField
static bool isTrailerField(int field)
Definition Message.cpp:550

References FIX::FieldMap::begin(), checkGroupCount(), checkHasValue(), checkIsInMessage(), checkValidFormat(), checkValidTagNumber(), checkValue(), FIX::FieldMap::end(), FIX::FieldBase::getTag(), FIX::Message::isHeaderField(), FIX::Message::isTrailerField(), m_beginString, m_hasVersion, and shouldCheckTag().

## lookupXMLFieldNumber() [1/2]

int FIX::DataDictionary::lookupXMLFieldNumber | ( | DOMDocument * | pDoc,
|  | const std::string & | name
| ) |  | const

private

Definition at line 516 of file DataDictionary.cpp.

{
NameToField::const_iterator i = m_names.find(name);
if( i == m_names.end() )
throw ConfigError("Field " + name + " not defined in fields section");
return i->second;
}

References m_names.

## lookupXMLFieldNumber() [2/2]

int FIX::DataDictionary::lookupXMLFieldNumber | ( | DOMDocument * | pDoc,
|  | DOMNode * | pNode
| ) |  | const

private

Definition at line 507 of file DataDictionary.cpp.

{
DOMAttributesPtr attrs = pNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("No name given to field");
return lookupXMLFieldNumber( pDoc, name );
}

References FIX::DOMNode::getAttributes(), and lookupXMLFieldNumber().

Referenced by addXMLComponentFields(), addXMLGroup(), and lookupXMLFieldNumber().

## operator=()

DataDictionary & FIX::DataDictionary::operator= | ( | const DataDictionary & | rhs | ) |

Definition at line 80 of file DataDictionary.cpp.

{
m_hasVersion = rhs.m_hasVersion;
m_checkFieldsOutOfOrder = rhs.m_checkFieldsOutOfOrder;
m_checkFieldsHaveValues = rhs.m_checkFieldsHaveValues;
m_storeMsgFieldsOrder = rhs.m_storeMsgFieldsOrder;
m_checkUserDefinedFields = rhs.m_checkUserDefinedFields;
m_allowUnknownMessageFields = rhs.m_allowUnknownMessageFields;
m_beginString = rhs.m_beginString;
m_messageFields = rhs.m_messageFields;
m_requiredFields = rhs.m_requiredFields;
m_messages = rhs.m_messages;
m_fields = rhs.m_fields;
m_orderedFields = rhs.m_orderedFields;
m_orderedFieldsArray = rhs.m_orderedFieldsArray;
m_headerFields = rhs.m_headerFields;
m_trailerFields = rhs.m_trailerFields;
m_fieldTypes = rhs.m_fieldTypes;
m_fieldValues = rhs.m_fieldValues;
m_fieldNames = rhs.m_fieldNames;
m_names = rhs.m_names;
m_valueNames = rhs.m_valueNames;
m_dataFields = rhs.m_dataFields;
m_headerOrderedFields = rhs.m_headerOrderedFields;
m_headerOrder = rhs.m_headerOrder;
m_trailerOrderedFields = rhs.m_trailerOrderedFields;
m_trailerOrder = rhs.m_trailerOrder;
m_messageOrderedFields = rhs.m_messageOrderedFields;
FieldToGroup::const_iterator i = rhs.m_groups.begin();
for ( ; i != rhs.m_groups.end(); ++i )
{
const FieldPresenceMap& presenceMap = i->second;
FieldPresenceMap::const_iterator iter = presenceMap.begin();
for ( ; iter != presenceMap.end(); ++iter )
{
addGroup( iter->first, i->first, iter->second.first, *iter->second.second );
}
}
return *this;
}
FIX::DataDictionary::addGroup
void addGroup(const std::string &msg, int field, int delim, const DataDictionary &dataDictionary)
Definition DataDictionary.h:305

References addGroup(), m_allowUnknownMessageFields, m_beginString, m_checkFieldsHaveValues, m_checkFieldsOutOfOrder, m_checkUserDefinedFields, m_dataFields, m_fieldNames, m_fields, m_fieldTypes, m_fieldValues, m_groups, m_hasVersion, m_headerFields, m_headerOrder, m_headerOrderedFields, m_messageFields, m_messageOrderedFields, m_messages, m_names, m_orderedFields, m_orderedFieldsArray, m_requiredFields, m_storeMsgFieldsOrder, m_trailerFields, m_trailerOrder, m_trailerOrderedFields, and m_valueNames.

## preserveMessageFieldsOrder()

void FIX::DataDictionary::preserveMessageFieldsOrder | ( | bool | value | ) |

inline

Definition at line 366 of file DataDictionary.h.

{ m_storeMsgFieldsOrder = value; }

References m_storeMsgFieldsOrder.

## readFromDocument()

void FIX::DataDictionary::readFromDocument | ( | const DOMDocumentPtr & | pDoc | ) |
throw | ( | ConfigError
| ) |  |

Definition at line 234 of file DataDictionary.cpp.

{
// VERSION
DOMNodePtr pFixNode = pDoc->getNode("/fix");
if(!pFixNode.get())
throw ConfigError("Could not parse data dictionary file"
", or no <fix> node found at root");
DOMAttributesPtr attrs = pFixNode->getAttributes();
std::string type = "FIX";
if(attrs->get("type", type))
{
if(type != "FIX" && type != "FIXT")
throw ConfigError("type attribute must be FIX or FIXT");
}
std::string major;
if(!attrs->get("major", major))
throw ConfigError("major attribute not found on <fix>");
std::string minor;
if(!attrs->get("minor", minor))
throw ConfigError("minor attribute not found on <fix>");
setVersion(type + "." + major + "." + minor);
// FIELDS
DOMNodePtr pFieldsNode = pDoc->getNode("/fix/fields");
if(!pFieldsNode.get())
throw ConfigError("<fields> section not found in data dictionary");
DOMNodePtr pFieldNode = pFieldsNode->getFirstChildNode();
if(!pFieldNode.get()) throw ConfigError("No fields defined");
while(pFieldNode.get())
{
if(pFieldNode->getName() == "field")
{
DOMAttributesPtr attrs = pFieldNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("<field> does not have a name attribute");
std::string number;
if(!attrs->get("number", number))
throw ConfigError("<field> " + name + " does not have a number attribute");
int num = atoi(number.c_str());
std::string type;
if(!attrs->get("type", type))
throw ConfigError("<field> " + name + " does not have a type attribute");
addField(num);
addFieldType(num, XMLTypeToType(type));
addFieldName(num, name);
DOMNodePtr pFieldValueNode = pFieldNode->getFirstChildNode();
while(pFieldValueNode.get())
{
if(pFieldValueNode->getName() == "value")
{
DOMAttributesPtr attrs = pFieldValueNode->getAttributes();
std::string enumeration;
if(!attrs->get("enum", enumeration))
throw ConfigError("<value> does not have enum attribute in field " + name);
addFieldValue(num, enumeration);
std::string description;
if(attrs->get("description", description))
addValueName(num, enumeration, description);
}
RESET_AUTO_PTR(pFieldValueNode, pFieldValueNode->getNextSiblingNode());
}
}
RESET_AUTO_PTR(pFieldNode, pFieldNode->getNextSiblingNode());
}
// HEADER
if( type == "FIXT" || (type == "FIX" && major < "5") )
{
DOMNodePtr pHeaderNode = pDoc->getNode("/fix/header");
if(!pHeaderNode.get())
throw ConfigError("<header> section not found in data dictionary");
DOMNodePtr pHeaderFieldNode = pHeaderNode->getFirstChildNode();
if(!pHeaderFieldNode.get()) throw ConfigError("No header fields defined");
while(pHeaderFieldNode.get())
{
if(pHeaderFieldNode->getName() == "field" || pHeaderFieldNode->getName() == "group" )
{
DOMAttributesPtr attrs = pHeaderFieldNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("<field> does not have a name attribute");
std::string required = "false";
attrs->get("required", required);
addHeaderField(lookupXMLFieldNumber(pDoc.get(), name), required == "true");
}
if(pHeaderFieldNode->getName() == "group")
{
DOMAttributesPtr attrs = pHeaderFieldNode->getAttributes();
std::string required;
attrs->get("required", required);
bool isRequired = (required == "Y" || required == "y");
addXMLGroup(pDoc.get(), pHeaderFieldNode.get(), "_header_", *this, isRequired);
}
RESET_AUTO_PTR(pHeaderFieldNode, pHeaderFieldNode->getNextSiblingNode());
}
}
// TRAILER
if( type == "FIXT" || (type == "FIX" && major < "5") )
{
DOMNodePtr pTrailerNode = pDoc->getNode("/fix/trailer");
if(!pTrailerNode.get())
throw ConfigError("<trailer> section not found in data dictionary");
DOMNodePtr pTrailerFieldNode = pTrailerNode->getFirstChildNode();
if(!pTrailerFieldNode.get()) throw ConfigError("No trailer fields defined");
while(pTrailerFieldNode.get())
{
if(pTrailerFieldNode->getName() == "field" || pTrailerFieldNode->getName() == "group" )
{
DOMAttributesPtr attrs = pTrailerFieldNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("<field> does not have a name attribute");
std::string required = "false";
attrs->get("required", required);
addTrailerField(lookupXMLFieldNumber(pDoc.get(), name), required == "true");
}
if(pTrailerFieldNode->getName() == "group")
{
DOMAttributesPtr attrs = pTrailerFieldNode->getAttributes();
std::string required;
attrs->get("required", required);
bool isRequired = (required == "Y" || required == "y");
addXMLGroup(pDoc.get(), pTrailerFieldNode.get(), "_trailer_", *this, isRequired);
}
RESET_AUTO_PTR(pTrailerFieldNode, pTrailerFieldNode->getNextSiblingNode());
}
}
// MSGTYPE
DOMNodePtr pMessagesNode = pDoc->getNode("/fix/messages");
if(!pMessagesNode.get())
throw ConfigError("<messages> section not found in data dictionary");
DOMNodePtr pMessageNode = pMessagesNode->getFirstChildNode();
if(!pMessageNode.get()) throw ConfigError("No messages defined");
while(pMessageNode.get())
{
if(pMessageNode->getName() == "message")
{
DOMAttributesPtr attrs = pMessageNode->getAttributes();
std::string msgtype;
if(!attrs->get("msgtype", msgtype))
throw ConfigError("<field> does not have a name attribute");
addMsgType(msgtype);
std::string name;
if(attrs->get("name", name))
addValueName( 35, msgtype, name );
DOMNodePtr pMessageFieldNode = pMessageNode->getFirstChildNode();
while( pMessageFieldNode.get() )
{
if(pMessageFieldNode->getName() == "field"
|| pMessageFieldNode->getName() == "group")
{
DOMAttributesPtr attrs = pMessageFieldNode->getAttributes();
std::string name;
if(!attrs->get("name", name))
throw ConfigError("<field> does not have a name attribute");
int num = lookupXMLFieldNumber(pDoc.get(), name);
addMsgField(msgtype, num);
std::string required;
if(attrs->get("required", required)
&& (required == "Y" || required == "y"))
{
addRequiredField(msgtype, num);
}
}
else if(pMessageFieldNode->getName() == "component")
{
DOMAttributesPtr attrs = pMessageFieldNode->getAttributes();
std::string required;
attrs->get("required", required);
bool isRequired = (required == "Y" || required == "y");
addXMLComponentFields(pDoc.get(), pMessageFieldNode.get(),
msgtype, *this, isRequired);
}
if(pMessageFieldNode->getName() == "group")
{
DOMAttributesPtr attrs = pMessageFieldNode->getAttributes();
std::string required;
attrs->get("required", required);
bool isRequired = (required == "Y" || required == "y");
addXMLGroup(pDoc.get(), pMessageFieldNode.get(), msgtype, *this, isRequired);
}
RESET_AUTO_PTR(pMessageFieldNode,
pMessageFieldNode->getNextSiblingNode());
}
}
RESET_AUTO_PTR(pMessageNode, pMessageNode->getNextSiblingNode());
}
}
FIX::DataDictionary::addValueName
void addValueName(int field, const std::string &value, const std::string &name)
Definition DataDictionary.h:168
FIX::DataDictionary::addMsgField
void addMsgField(const std::string &msgType, int field)
Definition DataDictionary.h:196
FIX::DataDictionary::addMsgType
void addMsgType(const std::string &msgType)
Definition DataDictionary.h:186
FIX::DataDictionary::addField
void addField(int field)
Definition DataDictionary.h:139
FIX::DataDictionary::addFieldValue
void addFieldValue(int field, const std::string &value)
Definition DataDictionary.h:271
FIX::DataDictionary::XMLTypeToType
TYPE::Type XMLTypeToType(const std::string &xmlType) const
Definition DataDictionary.cpp:646
FIX::DataDictionary::addFieldType
void addFieldType(int field, FIX::TYPE::Type type)
Definition DataDictionary.h:243
FIX::DataDictionary::addHeaderField
void addHeaderField(int field, bool required)
Definition DataDictionary.h:213
FIX::DataDictionary::setVersion
void setVersion(const std::string &beginString)
Definition DataDictionary.h:129
FIX::DataDictionary::addFieldName
void addFieldName(int field, const std::string &name)
Definition DataDictionary.h:145
FIX::DataDictionary::addTrailerField
void addTrailerField(int field, bool required)
Definition DataDictionary.h:228

References RESET_AUTO_PTR.

## readFromStream()

void FIX::DataDictionary::readFromStream | ( | std::istream & | stream | ) |
throw | ( | ConfigError
| ) |  |

Definition at line 223 of file DataDictionary.cpp.

{
DOMDocumentPtr pDoc(new PUGIXML_DOMDocument());
if(!pDoc->load(stream))
throw ConfigError("Could not parse data dictionary stream");
readFromDocument( pDoc );
}
FIX::DataDictionary::readFromDocument
void readFromDocument(const DOMDocumentPtr &pDoc)
Definition DataDictionary.cpp:234
FIX::DOMDocumentPtr
SmartPtr< DOMDocument > DOMDocumentPtr
Definition DOMDocument.h:73

## readFromURL()

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

Definition at line 205 of file DataDictionary.cpp.

{
DOMDocumentPtr pDoc(new PUGIXML_DOMDocument());
if(!pDoc->load(url))
throw ConfigError(url + ": Could not parse data dictionary file");
try
{
readFromDocument( pDoc );
}
catch( ConfigError& e )
{
throw ConfigError( url + ": " + e.what() );
}
}

## setVersion()

void FIX::DataDictionary::setVersion | ( | const std::string & | beginString | ) |

inline

Definition at line 129 of file DataDictionary.h.

{
m_beginString = beginString;
m_hasVersion = true;
}

References m_beginString, and m_hasVersion.

Referenced by addGroup().

## shouldCheckTag()

bool FIX::DataDictionary::shouldCheckTag | ( | const FieldBase & | field | ) | const

inline private

If we need to check for the tag in the dictionary.

Definition at line 395 of file DataDictionary.h.

{
if( m_allowUnknownMessageFields && field.getTag() < FIELD::UserMin )
return false;
else if( !m_checkUserDefinedFields && field.getTag() >= FIELD::UserMin )
return false;
else
return true;
}
FIX::FIELD::UserMin
const int UserMin
Definition FieldNumbers.h:40

References FIX::FieldBase::getTag(), m_allowUnknownMessageFields, m_checkUserDefinedFields, and FIX::FIELD::UserMin.

Referenced by iterate().

## validate() [1/3]

void FIX::DataDictionary::validate | ( | const Message & | message | ) | const
throw | ( | FIX::Exception
| ) |  |

inline

Definition at line 376 of file DataDictionary.h.

{ validate( message, false ); }
FIX::DataDictionary::validate
static void validate(const Message &message, const DataDictionary *const pSessionDD, const DataDictionary *const pAppID)
Validate a message.
Definition DataDictionary.cpp:123

References validate().

## validate() [2/3]

void FIX::DataDictionary::validate | ( | const Message & | message,
|  | bool | bodyOnly
| ) |  | const
throw | ( | FIX::Exception
| ) |  |

inline

Definition at line 378 of file DataDictionary.h.

{ validate( message, bodyOnly ? (DataDictionary*)0 : this, this ); }

References validate().

## validate() [3/3]

void FIX::DataDictionary::validate | ( | const Message & | message,
|  | const DataDictionary *const | pSessionDD,
|  | const DataDictionary *const | pAppID
| ) |  |
throw | ( | FIX::Exception
| ) |  |

static

Validate a message.

Definition at line 123 of file DataDictionary.cpp.

{
const Header& header = message.getHeader();
const BeginString& beginString = FIELD_GET_REF( header, BeginString );
#ifdef HAVE_EMX
const std::string & msgType = message.getSubMessageType();
if (msgType.empty())
{
throw InvalidMessageType("empty subMsgType, check Tag 9426/MESSAGE_ID");
}
#else
const MsgType& msgType = FIELD_GET_REF( header, MsgType );
#endif
if ( pSessionDD != 0 && pSessionDD->m_hasVersion )
{
if( pSessionDD->getVersion() != beginString )
{
throw UnsupportedVersion();
}
}
int field = 0;
if( (pSessionDD !=0 && pSessionDD->m_checkFieldsOutOfOrder) ||
(pAppDD != 0 && pAppDD->m_checkFieldsOutOfOrder) )
{
if ( !message.hasValidStructure(field) )
throw TagOutOfOrder(field);
}
if ( pAppDD != 0 && pAppDD->m_hasVersion )
{
pAppDD->checkMsgType( msgType );
pAppDD->checkHasRequired( message.getHeader(), message, message.getTrailer(), msgType );
}
if( pSessionDD != 0 )
{
pSessionDD->iterate( message.getHeader(), msgType );
pSessionDD->iterate( message.getTrailer(), msgType );
}
if( pAppDD != 0 )
{
pAppDD->iterate( message, msgType );
}
}
FIELD_GET_REF
#define FIELD_GET_REF(MAP, FLD)
Definition FieldMap.h:376

References FIELD_GET_REF.

Referenced by FIX::Session::next(), validate(), and validate().

## XMLTypeToType()

TYPE::Type FIX::DataDictionary::XMLTypeToType | ( | const std::string & | xmlType | ) | const

private

Definition at line 646 of file DataDictionary.cpp.

{
if ( m_beginString < "FIX.4.2" && type == "CHAR" )
return TYPE::String;
if ( type == "STRING" ) return TYPE::String;
if ( type == "CHAR" ) return TYPE::Char;
if ( type == "PRICE" ) return TYPE::Price;
if ( type == "INT" ) return TYPE::Int;
if ( type == "AMT" ) return TYPE::Amt;
if ( type == "QTY" ) return TYPE::Qty;
if ( type == "CURRENCY" ) return TYPE::Currency;
if ( type == "MULTIPLEVALUESTRING" ) return TYPE::MultipleValueString;
if ( type == "MULTIPLESTRINGVALUE" ) return TYPE::MultipleStringValue;
if ( type == "MULTIPLECHARVALUE" ) return TYPE::MultipleCharValue;
if ( type == "EXCHANGE" ) return TYPE::Exchange;
if ( type == "UTCTIMESTAMP" ) return TYPE::UtcTimeStamp;
if ( type == "BOOLEAN" ) return TYPE::Boolean;
if ( type == "LOCALMKTDATE" ) return TYPE::LocalMktDate;
if ( type == "DATA" ) return TYPE::Data;
if ( type == "FLOAT" ) return TYPE::Float;
if ( type == "PRICEOFFSET" ) return TYPE::PriceOffset;
if ( type == "MONTHYEAR" ) return TYPE::MonthYear;
if ( type == "DAYOFMONTH" ) return TYPE::DayOfMonth;
if ( type == "UTCDATE" ) return TYPE::UtcDate;
if ( type == "UTCDATEONLY" ) return TYPE::UtcDateOnly;
if ( type == "UTCTIMEONLY" ) return TYPE::UtcTimeOnly;
if ( type == "NUMINGROUP" ) return TYPE::NumInGroup;
if ( type == "PERCENTAGE" ) return TYPE::Percentage;
if ( type == "SEQNUM" ) return TYPE::SeqNum;
if ( type == "LENGTH" ) return TYPE::Length;
if ( type == "COUNTRY" ) return TYPE::Country;
if ( type == "TIME" ) return TYPE::UtcTimeStamp;
return TYPE::Unknown;
}
FIX::TYPE::UtcDateOnly
@ UtcDateOnly
Definition FieldTypes.h:932

References FIX::TYPE::Amt, FIX::TYPE::Boolean, FIX::TYPE::Char, FIX::TYPE::Country, FIX::TYPE::Currency, FIX::TYPE::Data, FIX::TYPE::DayOfMonth, FIX::TYPE::Exchange, FIX::TYPE::Float, FIX::TYPE::Int, FIX::TYPE::Length, FIX::TYPE::LocalMktDate, m_beginString, FIX::TYPE::MonthYear, FIX::TYPE::MultipleCharValue, FIX::TYPE::MultipleStringValue, FIX::TYPE::MultipleValueString, FIX::TYPE::NumInGroup, FIX::TYPE::Percentage, FIX::TYPE::Price, FIX::TYPE::PriceOffset, FIX::TYPE::Qty, FIX::TYPE::SeqNum, FIX::TYPE::String, FIX::TYPE::Unknown, FIX::TYPE::UtcDate, FIX::TYPE::UtcDateOnly, FIX::TYPE::UtcTimeOnly, and FIX::TYPE::UtcTimeStamp.

## Member Data Documentation

## m_allowUnknownMessageFields

bool FIX::DataDictionary::m_allowUnknownMessageFields

private

Definition at line 586 of file DataDictionary.h.

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

## m_beginString

BeginString FIX::DataDictionary::m_beginString

private

Definition at line 589 of file DataDictionary.h.

Referenced by getVersion(), iterate(), operator=(), setVersion(), and XMLTypeToType().

## m_checkFieldsHaveValues

bool FIX::DataDictionary::m_checkFieldsHaveValues

private

Definition at line 584 of file DataDictionary.h.

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

## m_checkFieldsOutOfOrder

bool FIX::DataDictionary::m_checkFieldsOutOfOrder

private

Definition at line 583 of file DataDictionary.h.

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

## m_checkUserDefinedFields

bool FIX::DataDictionary::m_checkUserDefinedFields

private

Definition at line 585 of file DataDictionary.h.

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

## m_dataFields

MsgFields FIX::DataDictionary::m_dataFields

private

Definition at line 604 of file DataDictionary.h.

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

## m_fieldNames

FieldToName FIX::DataDictionary::m_fieldNames

private

Definition at line 600 of file DataDictionary.h.

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

## m_fields

Fields FIX::DataDictionary::m_fields

private

Definition at line 593 of file DataDictionary.h.

Referenced by addField(), checkValidTagNumber(), isField(), and operator=().

## m_fieldTypes

FieldTypes FIX::DataDictionary::m_fieldTypes

private

Definition at line 598 of file DataDictionary.h.

Referenced by addFieldType(), getFieldType(), isMultipleValueField(), and operator=().

## m_fieldValues

FieldToValue FIX::DataDictionary::m_fieldValues

private

Definition at line 599 of file DataDictionary.h.

Referenced by addFieldValue(), hasFieldValue(), isFieldValue(), and operator=().

## m_groups

FieldToGroup FIX::DataDictionary::m_groups

private

Definition at line 603 of file DataDictionary.h.

Referenced by addGroup(), getGroup(), isGroup(), operator=(), and ~DataDictionary().

## m_hasVersion

bool FIX::DataDictionary::m_hasVersion

private

Definition at line 582 of file DataDictionary.h.

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

## m_headerFields

NonBodyFields FIX::DataDictionary::m_headerFields

private

Definition at line 596 of file DataDictionary.h.

Referenced by addHeaderField(), checkHasRequired(), isHeaderField(), and operator=().

## m_headerOrder

OrderedFieldsArray FIX::DataDictionary::m_headerOrder

mutable private

Definition at line 606 of file DataDictionary.h.

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

## m_headerOrderedFields

OrderedFields FIX::DataDictionary::m_headerOrderedFields

private

Definition at line 605 of file DataDictionary.h.

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

## m_messageFields

MsgTypeToField FIX::DataDictionary::m_messageFields

private

Definition at line 590 of file DataDictionary.h.

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

## m_messageOrderedFields

MsgTypeToOrderedFields FIX::DataDictionary::m_messageOrderedFields

private

Definition at line 609 of file DataDictionary.h.

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

## m_messages

MsgTypes FIX::DataDictionary::m_messages

private

Definition at line 592 of file DataDictionary.h.

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

## m_names

NameToField FIX::DataDictionary::m_names

private

Definition at line 601 of file DataDictionary.h.

Referenced by addFieldName(), getFieldTag(), lookupXMLFieldNumber(), and operator=().

## m_orderedFields

OrderedFields FIX::DataDictionary::m_orderedFields

private

Definition at line 594 of file DataDictionary.h.

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

## m_orderedFieldsArray

OrderedFieldsArray FIX::DataDictionary::m_orderedFieldsArray

mutable private

Definition at line 595 of file DataDictionary.h.

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

## m_requiredFields

MsgTypeToField FIX::DataDictionary::m_requiredFields

private

Definition at line 591 of file DataDictionary.h.

Referenced by addRequiredField(), checkHasRequired(), isRequiredField(), and operator=().

## m_storeMsgFieldsOrder

bool FIX::DataDictionary::m_storeMsgFieldsOrder

private

Definition at line 587 of file DataDictionary.h.

Referenced by addHeaderField(), addMsgField(), addTrailerField(), isMessageFieldsOrderPreserved(), operator=(), and preserveMessageFieldsOrder().

## m_trailerFields

NonBodyFields FIX::DataDictionary::m_trailerFields

private

Definition at line 597 of file DataDictionary.h.

Referenced by addTrailerField(), checkHasRequired(), isTrailerField(), and operator=().

## m_trailerOrder

OrderedFieldsArray FIX::DataDictionary::m_trailerOrder

mutable private

Definition at line 608 of file DataDictionary.h.

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

## m_trailerOrderedFields

OrderedFields FIX::DataDictionary::m_trailerOrderedFields

private

Definition at line 607 of file DataDictionary.h.

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

## m_valueNames

ValueToName FIX::DataDictionary::m_valueNames

private

Definition at line 602 of file DataDictionary.h.

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

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

- DataDictionary.h
- DataDictionary.cpp