Repository URL to install this package:
|
Version:
1.15.1 ▾
|
/* -*- 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