123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- /* -*- C++ -*- */
- /****************************************************************************
- ** Copyright (c) 2001-2014
- **
- ** This file is part of the QuickFIX FIX Engine
- **
- ** This file may be distributed under the terms of the quickfixengine.org
- ** license as defined by quickfixengine.org and appearing in the file
- ** LICENSE included in the packaging of this file.
- **
- ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
- ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- **
- ** See http://www.quickfixengine.org/LICENSE for licensing information.
- **
- ** Contact ask@quickfixengine.org if any conditions of this licensing are
- ** not clear to you.
- **
- ****************************************************************************/
- #ifndef FIX_SESSIONID_H
- #define FIX_SESSIONID_H
- #include "Fields.h"
- namespace FIX
- {
- /// Unique session id consists of BeginString, SenderCompID and TargetCompID.
- class SessionID
- {
- public:
- SessionID()
- {
- toString(m_frozenString);
- }
- SessionID( const std::string& beginString,
- const std::string& senderCompID,
- const std::string& targetCompID,
- const std::string& sessionQualifier = "" )
- : m_beginString( BeginString(beginString) ),
- m_senderCompID( SenderCompID(senderCompID) ),
- m_targetCompID( TargetCompID(targetCompID) ),
- m_sessionQualifier( sessionQualifier ),
- m_isFIXT(false)
- {
- toString(m_frozenString);
- if( beginString.substr(0, 4) == "FIXT" )
- m_isFIXT = true;
- }
- const BeginString& getBeginString() const
- { return m_beginString; }
- const SenderCompID& getSenderCompID() const
- { return m_senderCompID; }
- const TargetCompID& getTargetCompID() const
- { return m_targetCompID; }
- const std::string& getSessionQualifier() const
- { return m_sessionQualifier; }
- const bool isFIXT() const
- { return m_isFIXT; }
- /// Get a string representation of the SessionID
- std::string toString() const
- {
- return m_frozenString;
- }
-
- // Return a reference for a high-performance scenario
- const std::string& toStringFrozen() const
- {
- return m_frozenString;
- }
- /// Build from string representation of SessionID
- void fromString( const std::string& str )
- {
- std::string::size_type first =
- str.find_first_of(':');
- std::string::size_type second =
- str.find("->");
- std::string::size_type third =
- str.find_last_of(':');
- if( first == std::string::npos )
- return;
- if( second == std::string::npos )
- return;
- m_beginString = str.substr(0, first);
- m_senderCompID = str.substr(first+1, second - first - 1);
- if( first == third )
- {
- m_targetCompID = str.substr(second+2);
- m_sessionQualifier = "";
- }
- else
- {
- m_targetCompID = str.substr(second+2, third - second - 2);
- m_sessionQualifier = str.substr(third+1);
- }
- toString(m_frozenString);
- }
- /// Get a string representation without making a copy
- std::string& toString( std::string& str ) const
- {
- str = getBeginString().getValue() + ":" +
- getSenderCompID().getValue() + "->" +
- getTargetCompID().getValue();
- if( m_sessionQualifier.size() )
- str += ":" + m_sessionQualifier;
- return str;
- }
- friend bool operator<( const SessionID&, const SessionID& );
- friend bool operator==( const SessionID&, const SessionID& );
- friend bool operator!=( const SessionID&, const SessionID& );
- friend std::ostream& operator<<( std::ostream&, const SessionID& );
- friend std::ostream& operator>>( std::ostream&, const SessionID& );
- SessionID operator~() const
- {
- return SessionID( m_beginString, SenderCompID( m_targetCompID ),
- TargetCompID( m_senderCompID ), m_sessionQualifier );
- }
- private:
- BeginString m_beginString;
- SenderCompID m_senderCompID;
- TargetCompID m_targetCompID;
- std::string m_sessionQualifier;
- bool m_isFIXT;
- std::string m_frozenString;
- };
- /*! @} */
- inline bool operator<( const SessionID& lhs, const SessionID& rhs )
- {
- return lhs.toStringFrozen() < rhs.toStringFrozen();
- }
- inline bool operator==( const SessionID& lhs, const SessionID& rhs )
- {
- return lhs.toStringFrozen() == rhs.toStringFrozen();
- }
- inline bool operator!=( const SessionID& lhs, const SessionID& rhs )
- {
- return !( lhs == rhs );
- }
- inline std::ostream& operator<<
- ( std::ostream& stream, const SessionID& sessionID )
- {
- stream << sessionID.toStringFrozen();
- return stream;
- }
- inline std::istream& operator>>
- ( std::istream& stream, SessionID& sessionID )
- {
- std::string str;
- stream >> str;
- sessionID.fromString( str );
- return stream;
- }
- }
- #endif //FIX_SESSIONID_H
|