From acbe0d801d3a00dc075c7490bc2f7d4abd28a94f Mon Sep 17 00:00:00 2001 From: orignal Date: Thu, 26 Jun 2014 14:45:34 -0400 Subject: [PATCH] eliminate extra copy --- TunnelGateway.cpp | 11 +++++------ TunnelGateway.h | 13 +++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/TunnelGateway.cpp b/TunnelGateway.cpp index c85e92e6..4a004edc 100644 --- a/TunnelGateway.cpp +++ b/TunnelGateway.cpp @@ -107,13 +107,10 @@ namespace tunnel } } - const std::vector TunnelGatewayBuffer::GetTunnelDataMsgs () + void TunnelGatewayBuffer::ClearTunnelDataMsgs () { - CompleteCurrentTunnelDataMessage (); - std::vector ret = m_TunnelDataMsgs; // TODO: implement it better - m_TunnelDataMsgs.clear (); - return ret; - } + m_TunnelDataMsgs.clear (); + } void TunnelGatewayBuffer::CreateCurrentTunnelDataMessage () { @@ -162,6 +159,7 @@ namespace tunnel void TunnelGateway::SendBuffer () { + m_Buffer.CompleteCurrentTunnelDataMessage (); auto tunnelMsgs = m_Buffer.GetTunnelDataMsgs (); for (auto tunnelMsg : tunnelMsgs) { @@ -170,6 +168,7 @@ namespace tunnel i2p::transports.SendMessage (m_Tunnel->GetNextIdentHash (), tunnelMsg); m_NumSentBytes += TUNNEL_DATA_MSG_SIZE; } + m_Buffer.ClearTunnelDataMsgs (); } } } diff --git a/TunnelGateway.h b/TunnelGateway.h index aec0ca03..abed9288 100644 --- a/TunnelGateway.h +++ b/TunnelGateway.h @@ -16,12 +16,13 @@ namespace tunnel TunnelGatewayBuffer (uint32_t tunnelID): m_TunnelID (tunnelID), m_CurrentTunnelDataMsg (nullptr), m_RemainingSize (0) {}; void PutI2NPMsg (const TunnelMessageBlock& block); - const std::vector GetTunnelDataMsgs (); + const std::vector& GetTunnelDataMsgs () const { return m_TunnelDataMsgs; }; + void ClearTunnelDataMsgs (); + void CompleteCurrentTunnelDataMessage (); private: void CreateCurrentTunnelDataMessage (); - void CompleteCurrentTunnelDataMessage (); private: @@ -37,11 +38,11 @@ namespace tunnel TunnelGateway (TunnelBase * tunnel): m_Tunnel (tunnel), m_Buffer (tunnel->GetNextTunnelID ()), m_NumSentBytes (0) {}; - void SendTunnelDataMsg (const TunnelMessageBlock& block); - void PutTunnelDataMsg (const TunnelMessageBlock& block); - void SendBuffer (); + void SendTunnelDataMsg (const TunnelMessageBlock& block); + void PutTunnelDataMsg (const TunnelMessageBlock& block); + void SendBuffer (); size_t GetNumSentBytes () const { return m_NumSentBytes; }; - + private: TunnelBase * m_Tunnel;