Skip to content

Instantly share code, notes, and snippets.

@bamkrs
Created August 28, 2019 09:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bamkrs/fe0ecf35d88d758d396f755b84c25515 to your computer and use it in GitHub Desktop.
Save bamkrs/fe0ecf35d88d758d396f755b84c25515 to your computer and use it in GitHub Desktop.
oatpp ResponseHeadersReader::readHeadersSection optimization
--- a/src/oatpp/web/protocol/http/incoming/ResponseHeadersReader.cpp
+++ b/src/oatpp/web/protocol/http/incoming/ResponseHeadersReader.cpp
@@ -32,8 +32,8 @@ data::v_io_size ResponseHeadersReader::readHeadersSection(const std::shared_ptr<
oatpp::data::stream::OutputStream* bufferStream,
Result& result) {
- v_word32 sectionEnd = ('\r' << 24) | ('\n' << 16) | ('\r' << 8) | ('\n');
- v_word32 accumulator = 0;
+ v_word32 sectionEnd = ('\r') | ('\n' << 8) | ('\r' << 16) | ('\n' << 24);
+ p_int32 rnrnptr = nullptr;
v_int32 progress = 0;
data::v_io_size res;
while (true) {
@@ -51,10 +51,9 @@ data::v_io_size ResponseHeadersReader::readHeadersSection(const std::shared_ptr<
bufferStream->write(m_buffer, res);
for(v_int32 i = 0; i < res; i ++) {
- accumulator <<= 8;
- accumulator |= m_buffer[i];
- if(accumulator == sectionEnd) {
- result.bufferPosStart = i + 1;
+ rnrnptr = reinterpret_cast<p_int32>(m_buffer + i); //reinterpret_cast is a noop
+ if(sectionEnd == *rnrnptr) {
+ result.bufferPosStart = i + 4;
result.bufferPosEnd = (v_int32) res;
return res;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment