[Quickfix-users] Access to DataDictionary
Brought to you by:
orenmnero
From: Marc R. <mro...@gm...> - 2010-03-20 21:13:52
|
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; |