Skip to content

Commit 7f172ea

Browse files
committed
Replace use of LinkedList<T> with std::list for AsyncWebServerResponse headers
Fraction of commit 8bb1c70 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.
1 parent 7a40df0 commit 7f172ea

File tree

2 files changed

+13
-16
lines changed

2 files changed

+13
-16
lines changed

src/ESPAsyncWebServer.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ typedef enum {
380380
class AsyncWebServerResponse {
381381
protected:
382382
int _code;
383-
LinkedList<AsyncWebHeader *> _headers;
383+
std::list<AsyncWebHeader> _headers;
384384
String _contentType;
385385
size_t _contentLength;
386386
bool _sendContentLength;
@@ -463,24 +463,24 @@ class AsyncWebServer {
463463
};
464464

465465
class DefaultHeaders {
466-
using headers_t = LinkedList<AsyncWebHeader *>;
466+
using headers_t = std::list<AsyncWebHeader>;
467467
headers_t _headers;
468468

469-
DefaultHeaders()
470-
:_headers(headers_t([](AsyncWebHeader *h){ delete h; }))
471-
{}
472469
public:
473-
using ConstIterator = headers_t::ConstIterator;
470+
DefaultHeaders() = default;
471+
472+
using ConstIterator = headers_t::const_iterator;
474473

475474
void addHeader(const String& name, const String& value){
476-
_headers.add(new AsyncWebHeader(name, value));
475+
_headers.emplace_back(name, value);
477476
}
478477

479478
ConstIterator begin() const { return _headers.begin(); }
480479
ConstIterator end() const { return _headers.end(); }
481480

482481
DefaultHeaders(DefaultHeaders const &) = delete;
483482
DefaultHeaders &operator=(DefaultHeaders const &) = delete;
483+
484484
static DefaultHeaders &Instance() {
485485
static DefaultHeaders instance;
486486
return instance;

src/WebResponses.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ const __FlashStringHelper *AsyncWebServerResponse::responseCodeToString(int code
8888

8989
AsyncWebServerResponse::AsyncWebServerResponse()
9090
: _code(0)
91-
, _headers(LinkedList<AsyncWebHeader *>([](AsyncWebHeader *h){ delete h; }))
9291
, _contentType()
9392
, _contentLength(0)
9493
, _sendContentLength(true)
@@ -99,14 +98,12 @@ AsyncWebServerResponse::AsyncWebServerResponse()
9998
, _writtenLength(0)
10099
, _state(RESPONSE_SETUP)
101100
{
102-
for(auto header: DefaultHeaders::Instance()) {
103-
_headers.add(new AsyncWebHeader(header->name(), header->value()));
101+
for(const auto &header: DefaultHeaders::Instance()) {
102+
_headers.emplace_back(header);
104103
}
105104
}
106105

107-
AsyncWebServerResponse::~AsyncWebServerResponse(){
108-
_headers.free();
109-
}
106+
AsyncWebServerResponse::~AsyncWebServerResponse() = default;
110107

111108
void AsyncWebServerResponse::setCode(int code){
112109
if(_state == RESPONSE_SETUP)
@@ -124,7 +121,7 @@ void AsyncWebServerResponse::setContentType(const String& type){
124121
}
125122

126123
void AsyncWebServerResponse::addHeader(const String& name, const String& value){
127-
_headers.add(new AsyncWebHeader(name, value));
124+
_headers.emplace_back(name, value);
128125
}
129126

130127
String AsyncWebServerResponse::_assembleHead(uint8_t version){
@@ -150,10 +147,10 @@ String AsyncWebServerResponse::_assembleHead(uint8_t version){
150147
}
151148

152149
for(const auto& header: _headers){
153-
snprintf_P(buf, bufSize, PSTR("%s: %s\r\n"), header->name().c_str(), header->value().c_str());
150+
snprintf_P(buf, bufSize, PSTR("%s: %s\r\n"), header.name().c_str(), header.value().c_str());
154151
out.concat(buf);
155152
}
156-
_headers.free();
153+
_headers.clear();
157154

158155
out.concat(F("\r\n"));
159156
_headLength = out.length();

0 commit comments

Comments
 (0)