My server gets some requests, compiles response and sends it back. Sometimes response is a file, sometimes it’s HTML. So I define response in the following way:
class ResponseData
{
public:
bool operator== (const ResponseData & param) const { return id == param.id; }
public:
RequestIdType id;
RequestType type;
std::vector<char> data;
};
When I compile HTML response I use std::stringstream.
std::vector<char> RequestHandler::createResponse( const RequestData * request ) const
{
std::stringstream buffer;
std::vector<char> result;
result.assign( RESPONSE_HEADER, RESPONSE_HEADER + strlen( RESPONSE_HEADER ) );
buffer << "<tr>";
for( auto param : request->paramsMap )
{
buffer << "<tr><td>" << param.first << "</td><td>" << param.second << "</td></tr>\n";
}
buffer << "<\tr>";
DEBUG_LOG_F << buffer.str();
std::string str = buffer.str();
result.insert( result.end(), str.begin(), str.end() );
result.insert( result.end(), RESPONSE_FOOTER, RESPONSE_FOOTER + strlen( RESPONSE_FOOTER ) );
return result;
}
It seems to me that copying buffer to string to append it then to vector is not good idea. How can I do it more effectively?
<tr>?