From 9b81a545fc50b13f933687550ef116818ab29de6 Mon Sep 17 00:00:00 2001 From: orangefour Date: Wed, 5 Sep 2018 09:25:09 +0200 Subject: Add VectorSink --- filters.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'filters.h') diff --git a/filters.h b/filters.h index 9d39d4d9..d7503f8a 100644 --- a/filters.h +++ b/filters.h @@ -1063,12 +1063,13 @@ template class StringSinkTemplate : public Bufferless { public: + typedef typename T::value_type value_type; virtual ~StringSinkTemplate() {} /// \brief Construct a StringSinkTemplate /// \param output std::basic_string type StringSinkTemplate(T &output) - : m_output(&output) {CRYPTOPP_ASSERT(sizeof(output[0])==1);} + : m_output(&output) {CRYPTOPP_ASSERT(sizeof(value_type)==1);} void IsolatedInitialize(const NameValuePairs ¶meters) {if (!parameters.GetValue("OutputStringPointer", m_output)) throw InvalidArgument("StringSink: OutputStringPointer not specified");} @@ -1076,14 +1077,12 @@ public: size_t Put2(const byte *inString, size_t length, int messageEnd, bool blocking) { CRYPTOPP_UNUSED(messageEnd); CRYPTOPP_UNUSED(blocking); - typedef typename T::traits_type::char_type char_type; - if (length > 0) { typename T::size_type size = m_output->size(); if (length < size && size + length > m_output->capacity()) m_output->reserve(2*size); - m_output->append((const char_type *)inString, (const char_type *)inString+length); + m_output->insert(m_output->end(), (const value_type *)inString, (const value_type *)inString+length); } return 0; } @@ -1099,6 +1098,11 @@ private: DOCUMENTED_TYPEDEF(StringSinkTemplate, StringSink) CRYPTOPP_DLL_TEMPLATE_CLASS StringSinkTemplate; +/// \brief Append input to a std::vector object +/// \details VectorSink is a typedef for StringSinkTemplate >. +DOCUMENTED_TYPEDEF(StringSinkTemplate >, VectorSink); +CRYPTOPP_DLL_TEMPLATE_CLASS StringSinkTemplate >; + /// \brief Incorporates input into RNG as additional entropy /// \since Crypto++ 4.0 class RandomNumberSink : public Bufferless -- cgit v1.2.1