From ac91e954c28c1a737993fd68d1dc1d401dc6c0c0 Mon Sep 17 00:00:00 2001 From: Raoul Wols Date: Thu, 1 Jul 2021 11:47:51 +0200 Subject: [PATCH 1/2] Prefer make_shared over calling std::shared_ptr constructor --- include/amqpcpp/field.h | 4 ++-- src/array.cpp | 8 ++++---- src/field.cpp | 40 ++++++++++++++++++++-------------------- src/table.cpp | 4 ++-- 4 files changed, 28 insertions(+), 28 deletions(-) diff --git a/include/amqpcpp/field.h b/include/amqpcpp/field.h index 58be766..5dd4475 100644 --- a/include/amqpcpp/field.h +++ b/include/amqpcpp/field.h @@ -40,9 +40,9 @@ protected: * Decode a field by fetching a type and full field from a frame * The returned field is allocated on the heap! * @param frame - * @return Field* + * @return std::shared_ptr */ - static Field *decode(InBuffer &frame); + static std::shared_ptr decode(InBuffer &frame); public: /** diff --git a/src/array.cpp b/src/array.cpp index 0ee8f94..16db050 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -25,14 +25,14 @@ Array::Array(InBuffer &frame) charsToRead -= 1; // read the field type and construct the field - Field *field = Field::decode(frame); + auto field = Field::decode(frame); if (!field) continue; // less bytes to read charsToRead -= (uint32_t)field->size(); // add the additional field - _fields.push_back(std::shared_ptr(field)); + _fields.push_back(move(field)); } } @@ -46,7 +46,7 @@ Array::Array(const Array &array) for (auto iter = array._fields.begin(); iter != array._fields.end(); iter++) { // add to this vector - _fields.push_back(std::shared_ptr((*iter)->clone())); + _fields.push_back((*iter)->clone()); } } @@ -93,7 +93,7 @@ void Array::pop_back() */ void Array::push_back(const Field& value) { - _fields.push_back(std::shared_ptr(value.clone())); + _fields.push_back(value.clone()); } /** diff --git a/src/field.cpp b/src/field.cpp index 0b85fe3..0c78874 100644 --- a/src/field.cpp +++ b/src/field.cpp @@ -14,9 +14,9 @@ namespace AMQP { * Decode a field by fetching a type and full field from a frame * The returned field is allocated on the heap! * @param frame - * @return Field* + * @return std::shared_ptr */ -Field *Field::decode(InBuffer &frame) +std::shared_ptr Field::decode(InBuffer &frame) { // get the type uint8_t type = frame.nextUint8(); @@ -24,24 +24,24 @@ Field *Field::decode(InBuffer &frame) // create field based on type switch (type) { - case 't': return new BooleanSet(frame); - case 'b': return new Octet(frame); - case 'B': return new UOctet(frame); - case 'U': return new Short(frame); - case 'u': return new UShort(frame); - case 'I': return new Long(frame); - case 'i': return new ULong(frame); - case 'L': return new LongLong(frame); - case 'l': return new ULongLong(frame); - case 'f': return new Float(frame); - case 'd': return new Double(frame); - case 'D': return new DecimalField(frame); - case 's': return new ShortString(frame); - case 'S': return new LongString(frame); - case 'A': return new Array(frame); - case 'T': return new Timestamp(frame); - case 'F': return new Table(frame); - case 'V': return new VoidField(frame); + case 't': return std::make_shared(frame); + case 'b': return std::make_shared(frame); + case 'B': return std::make_shared(frame); + case 'U': return std::make_shared(frame); + case 'u': return std::make_shared(frame); + case 'I': return std::make_shared(frame); + case 'i': return std::make_shared(frame); + case 'L': return std::make_shared(frame); + case 'l': return std::make_shared(frame); + case 'f': return std::make_shared(frame); + case 'd': return std::make_shared(frame); + case 'D': return std::make_shared(frame); + case 's': return std::make_shared(frame); + case 'S': return std::make_shared(frame); + case 'A': return std::make_shared(frame); + case 'T': return std::make_shared(frame); + case 'F': return std::make_shared(frame); + case 'V': return std::make_shared(frame); default: return nullptr; } } diff --git a/src/table.cpp b/src/table.cpp index 6c538b8..3c4328f 100644 --- a/src/table.cpp +++ b/src/table.cpp @@ -24,11 +24,11 @@ Table::Table(InBuffer &frame) bytesToRead -= (uint32_t)(name.size() + 1); // get the field - Field *field = Field::decode(frame); + auto field = Field::decode(frame); if (!field) continue; // add field - _fields[name] = std::shared_ptr(field); + _fields[name] = move(field); // subtract size bytesToRead -= (uint32_t)field->size(); From 3965739ccb60a7a410329813fd4e69f9d584ee6c Mon Sep 17 00:00:00 2001 From: Raoul Wols Date: Thu, 1 Jul 2021 12:07:43 +0200 Subject: [PATCH 2/2] Don't rely on argument dependent lookup --- src/array.cpp | 2 +- src/table.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/array.cpp b/src/array.cpp index 16db050..215ef32 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -32,7 +32,7 @@ Array::Array(InBuffer &frame) charsToRead -= (uint32_t)field->size(); // add the additional field - _fields.push_back(move(field)); + _fields.push_back(std::move(field)); } } diff --git a/src/table.cpp b/src/table.cpp index 3c4328f..42348b2 100644 --- a/src/table.cpp +++ b/src/table.cpp @@ -28,7 +28,7 @@ Table::Table(InBuffer &frame) if (!field) continue; // add field - _fields[name] = move(field); + _fields[name] = std::move(field); // subtract size bytesToRead -= (uint32_t)field->size();