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..215ef32 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(std::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..42348b2 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] = std::move(field); // subtract size bytesToRead -= (uint32_t)field->size();