From 7f172eabf6ad21eb9b4e72f309638ef22aa54b6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alex=20Villac=C3=ADs=20Lasso?= Date: Tue, 29 Dec 2020 16:49:19 -0500 Subject: [PATCH] Replace use of LinkedList with std::list for AsyncWebServerResponse headers Fraction of commit 8bb1c704cd70dd58b318b296154a5404a1bd27d0 of dumbfixes branch of 0xFEEDC0DE64 fork of ESPAsyncWebServer. This uses defaulted copy constructors for AsyncWebHeader from a previous commit. Step three of removal of homebrewed LinkedList in favor of standard C++ containers. Also removed from DefaultHeaders class. --- src/ESPAsyncWebServer.h | 14 +++++++------- src/WebResponses.cpp | 15 ++++++--------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/src/ESPAsyncWebServer.h b/src/ESPAsyncWebServer.h index 32d0cd3..0425159 100644 --- a/src/ESPAsyncWebServer.h +++ b/src/ESPAsyncWebServer.h @@ -380,7 +380,7 @@ typedef enum { class AsyncWebServerResponse { protected: int _code; - LinkedList _headers; + std::list _headers; String _contentType; size_t _contentLength; bool _sendContentLength; @@ -463,17 +463,16 @@ class AsyncWebServer { }; class DefaultHeaders { - using headers_t = LinkedList; + using headers_t = std::list; headers_t _headers; - DefaultHeaders() - :_headers(headers_t([](AsyncWebHeader *h){ delete h; })) - {} public: - using ConstIterator = headers_t::ConstIterator; + DefaultHeaders() = default; + + using ConstIterator = headers_t::const_iterator; void addHeader(const String& name, const String& value){ - _headers.add(new AsyncWebHeader(name, value)); + _headers.emplace_back(name, value); } ConstIterator begin() const { return _headers.begin(); } @@ -481,6 +480,7 @@ public: DefaultHeaders(DefaultHeaders const &) = delete; DefaultHeaders &operator=(DefaultHeaders const &) = delete; + static DefaultHeaders &Instance() { static DefaultHeaders instance; return instance; diff --git a/src/WebResponses.cpp b/src/WebResponses.cpp index f7722bf..22a549f 100644 --- a/src/WebResponses.cpp +++ b/src/WebResponses.cpp @@ -88,7 +88,6 @@ const __FlashStringHelper *AsyncWebServerResponse::responseCodeToString(int code AsyncWebServerResponse::AsyncWebServerResponse() : _code(0) - , _headers(LinkedList([](AsyncWebHeader *h){ delete h; })) , _contentType() , _contentLength(0) , _sendContentLength(true) @@ -99,14 +98,12 @@ AsyncWebServerResponse::AsyncWebServerResponse() , _writtenLength(0) , _state(RESPONSE_SETUP) { - for(auto header: DefaultHeaders::Instance()) { - _headers.add(new AsyncWebHeader(header->name(), header->value())); + for(const auto &header: DefaultHeaders::Instance()) { + _headers.emplace_back(header); } } -AsyncWebServerResponse::~AsyncWebServerResponse(){ - _headers.free(); -} +AsyncWebServerResponse::~AsyncWebServerResponse() = default; void AsyncWebServerResponse::setCode(int code){ if(_state == RESPONSE_SETUP) @@ -124,7 +121,7 @@ void AsyncWebServerResponse::setContentType(const String& type){ } void AsyncWebServerResponse::addHeader(const String& name, const String& value){ - _headers.add(new AsyncWebHeader(name, value)); + _headers.emplace_back(name, value); } String AsyncWebServerResponse::_assembleHead(uint8_t version){ @@ -150,10 +147,10 @@ String AsyncWebServerResponse::_assembleHead(uint8_t version){ } for(const auto& header: _headers){ - snprintf_P(buf, bufSize, PSTR("%s: %s\r\n"), header->name().c_str(), header->value().c_str()); + snprintf_P(buf, bufSize, PSTR("%s: %s\r\n"), header.name().c_str(), header.value().c_str()); out.concat(buf); } - _headers.free(); + _headers.clear(); out.concat(F("\r\n")); _headLength = out.length();