Trying to get easy access to the DataDictionary from within a method that
only has a FIX::Message reference to work with. My current solution is as
follows:
std::string hdrStr;
m_message.getHeader().calculateString(hdrStr);
FIX::BeginString beginString;
m_message.getHeader().getField(beginString);
FIX::Session *session = FIX::Session::lookupSession(hdrStr, true);
const FIX::DataDictionaryProvider& ddp =
session->getDataDictionaryProvider();
const FIX::DataDictionary& dd =
ddp.getSessionDataDictionary(beginString);
The only issue this presents is that the
DataDictionaryProvider::getSessionDataDictionary() method is not const
friendly
(neither is the getApplicationDataDictionary() method). I have provided
patches for both DataDictionaryProvider.h & .cpp
to make those methods const friendly.
One question I have is if there is any reason the DataDictionaryProvider
class can't provide static methods to return
DataDictionary references? So instead of jumping through the hoops above I
could simply do a:
const FIX::DataDictionary& dd =
FIX::DataDictionaryProvider::getDataDictionary(beginString);
Any thoughts?
TIA,
Marc
--- /tmpi/quickfix/src/C++/DataDictionaryProvider.h 2010-03-07
20:26:26.000000000 -0600
+++ DataDictionaryProvider.h 2010-03-19 13:53:12.000000000 -0500
@@ -44,10 +44,10 @@
DataDictionaryProvider() {}
DataDictionaryProvider( const DataDictionaryProvider& copy );
- const DataDictionary& getSessionDataDictionary(const BeginString&
beginString)
+ const DataDictionary& getSessionDataDictionary(const BeginString&
beginString) const
throw( DataDictionaryNotFound );
- const DataDictionary& getApplicationDataDictionary(const ApplVerID&
applVerID)
+ const DataDictionary& getApplicationDataDictionary(const ApplVerID&
applVerID) const
throw( DataDictionaryNotFound );
void addTransportDataDictionary(const BeginString& beginString, const
DataDictionary& dd);
--- /home/mrossi/quickfix/src/C++/DataDictionaryProvider.cpp 2010-03-07
20:26:26.000000000 -0600
+++ DataDictionaryProvider.cpp 2010-03-19 13:54:44.000000000 -0500
@@ -36,9 +36,9 @@
}
const DataDictionary& DataDictionaryProvider::getSessionDataDictionary
-(const BeginString& beginString) throw( DataDictionaryNotFound )
+(const BeginString& beginString) const throw( DataDictionaryNotFound )
{
- std::map<std::string, DataDictionary>::iterator find =
+ std::map<std::string, DataDictionary>::const_iterator find =
m_transportDictionaries.find(beginString);
if( find != m_transportDictionaries.end() )
return find->second;
@@ -47,9 +47,9 @@
}
const DataDictionary& DataDictionaryProvider::getApplicationDataDictionary
-(const ApplVerID& applVerID) throw( DataDictionaryNotFound )
+(const ApplVerID& applVerID) const throw( DataDictionaryNotFound )
{
- std::map<std::string, DataDictionary>::iterator find =
+ std::map<std::string, DataDictionary>::const_iterator find =
m_applicationDictionaries.find(applVerID);
if( find != m_applicationDictionaries.end() )
return find->second;
|