From c1775a7ad0ee2158a18b855b46f8049f1e01da1e Mon Sep 17 00:00:00 2001 From: heck Date: Tue, 22 Feb 2022 22:34:58 +0100 Subject: [PATCH] Fix: pEp::Utils to_string() func use ref instead of ptr --- src/utils.cc | 343 +++++++++++++++++++++++++-------------------------- src/utils.hh | 29 +++-- 2 files changed, 189 insertions(+), 183 deletions(-) diff --git a/src/utils.cc b/src/utils.cc index f229cfc..e55a47c 100644 --- a/src/utils.cc +++ b/src/utils.cc @@ -10,10 +10,10 @@ using namespace pEp; namespace pEp { namespace Utils { - std::vector<::pEp_identity *> to_cxx(const ::identity_list &idl) + std::vector<::pEp_identity*> to_cxx(const ::identity_list& idl) { - vector ret{}; - for (const ::identity_list *curr = &idl; curr != nullptr; curr = curr->next) { + vector ret{}; + for (const ::identity_list* curr = &idl; curr != nullptr; curr = curr->next) { if (curr->ident) { ret.push_back(curr->ident); } @@ -21,233 +21,195 @@ namespace pEp { return ret; } - string to_string(const ::pEp_identity *const ident, bool full, int indent) + string to_string(const ::pEp_identity& ident, bool full, int indent) { stringstream builder; - if (ident != nullptr) { - if (full) { - builder << endl; - builder << std::string(indent, '\t') << "{" << endl; - indent++; - builder << std::string(indent, '\t') << "address: '" - << (ident->address != nullptr ? ident->address : "NULL") << "'" << endl; - builder << std::string(indent, '\t') << "user_id: '" - << (ident->user_id != nullptr ? ident->user_id : "NULL") << "'" << endl; - builder << std::string(indent, '\t') << "username: '" - << (ident->username != nullptr ? ident->username : "NULL") << "'" - << endl; - builder << std::string(indent, '\t') << "fpr: '" - << (ident->fpr != nullptr ? ident->fpr : "NULL") << "'" << endl; - builder << std::string(indent, '\t') << "comm_type: " << ident->comm_type << endl; - builder << std::string(indent, '\t') << "lang: '" - << static_cast(ident->lang) << "'" << endl; - builder << std::string(indent, '\t') << "me: " << ident->me << endl; - builder << std::string(indent, '\t') << "major_ver: " << ident->major_ver << endl; - builder << std::string(indent, '\t') << "minor_ver: " << ident->minor_ver << endl; - builder << std::string(indent, '\t') << "enc_format: " << ident->enc_format - << endl; - builder << std::string(indent, '\t') << "flags: " << ident->flags << endl; - indent--; - builder << std::string(indent, '\t') << "}"; - } else { - builder << std::string(indent, '\t') << "{ '" - << (ident->address != nullptr ? ident->address : "NULL") << "' / '" - << (ident->user_id != nullptr ? ident->user_id : "NULL") << "' / '" - << (ident->username != nullptr ? ident->username : "NULL") << "' / '" - << (ident->fpr != nullptr ? ident->fpr : "NULL") << "' }"; - } + if (full) { + builder << endl; + builder << std::string(indent, '\t') << "{" << endl; + indent++; + builder << std::string(indent, '\t') << "address: '" + << (ident.address != nullptr ? ident.address : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "user_id: '" + << (ident.user_id != nullptr ? ident.user_id : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "username: '" + << (ident.username != nullptr ? ident.username : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "fpr: '" + << (ident.fpr != nullptr ? ident.fpr : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "comm_type: " << ident.comm_type << endl; + builder << std::string(indent, '\t') << "lang: '" << static_cast(ident.lang) + << "'" << endl; + builder << std::string(indent, '\t') << "me: " << ident.me << endl; + builder << std::string(indent, '\t') << "major_ver: " << ident.major_ver << endl; + builder << std::string(indent, '\t') << "minor_ver: " << ident.minor_ver << endl; + builder << std::string(indent, '\t') << "enc_format: " << ident.enc_format << endl; + builder << std::string(indent, '\t') << "flags: " << ident.flags << endl; + indent--; + builder << std::string(indent, '\t') << "}"; } else { - builder << "NULL"; + builder << std::string(indent, '\t') << "{ '" + << (ident.address != nullptr ? ident.address : "NULL") << "' / '" + << (ident.user_id != nullptr ? ident.user_id : "NULL") << "' / '" + << (ident.username != nullptr ? ident.username : "NULL") << "' / '" + << (ident.fpr != nullptr ? ident.fpr : "NULL") << "' }"; } return builder.str(); } - std::string to_string(const ::bloblist_t *const blob, bool full, int indent) + std::string to_string(const ::bloblist_t& blob, bool full, int indent) { stringstream builder; - if (blob != nullptr) { - builder << endl; - builder << std::string(indent, '\t') << "[" << endl; - indent++; - for (const ::bloblist_t *curr = blob; curr != nullptr; curr = curr->next) { - if (full) { - builder << std::string(indent, '\t') << "{" << endl; - indent++; - builder << std::string(indent, '\t') << "mime_type: '" - << (curr->mime_type != nullptr ? std::string(curr->mime_type) : "NULL") - << "'" << endl; - builder << std::string(indent, '\t') << "filename: '" - << (curr->filename != nullptr ? curr->filename : "NULL") << "'" - << endl; - builder << std::string(indent, '\t') << "size: " << curr->size << endl; - builder << std::string(indent, '\t') << "value: '" - << (curr->value != nullptr - ? Utils::tldr(std::string(curr->value), 300) - : "NULL") - << "'" << endl; - indent--; - builder << std::string(indent, '\t') << "}" << endl; - } else { - builder << std::string(indent, '\t'); - builder << "{ '" - << (curr->mime_type != nullptr ? std::string(curr->mime_type) - : "NULL"); - builder << "' / '" << (curr->filename != nullptr ? curr->filename : "NULL"); - builder << "' / '" << curr->size << "'"; - builder << " }" << endl; - } + builder << endl; + builder << std::string(indent, '\t') << "[" << endl; + indent++; + for (const ::bloblist_t* curr = &blob; curr != nullptr; curr = curr->next) { + if (full) { + builder << std::string(indent, '\t') << "{" << endl; + indent++; + builder << std::string(indent, '\t') << "mime_type: '" + << (curr->mime_type != nullptr ? std::string(curr->mime_type) : "NULL") + << "'" << endl; + builder << std::string(indent, '\t') << "filename: '" + << (curr->filename != nullptr ? curr->filename : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "size: " << curr->size << endl; + builder << std::string(indent, '\t') << "value: '" + << (curr->value != nullptr ? Utils::tldr(std::string(curr->value), 300) + : "NULL") + << "'" << endl; + indent--; + builder << std::string(indent, '\t') << "}" << endl; + } else { + builder << std::string(indent, '\t'); + builder << "{ '" + << (curr->mime_type != nullptr ? std::string(curr->mime_type) : "NULL"); + builder << "' / '" << (curr->filename != nullptr ? curr->filename : "NULL"); + builder << "' / '" << curr->size << "'"; + builder << " }" << endl; } - indent--; - builder << std::string(indent, '\t') << "]" << endl; - } else { - builder << "NULL"; } + indent--; + builder << std::string(indent, '\t') << "]" << endl; return builder.str(); } - std::string to_string(const ::stringpair_list_t *const spl, bool full, int indent) + std::string to_string(const ::stringpair_list_t& spl, bool full, int indent) { stringstream builder; - if (spl != nullptr) { - builder << endl; - builder << std::string(indent, '\t') << "[" << endl; - indent++; - for (const ::stringpair_list_t *curr = spl; curr != nullptr; curr = curr->next) { - builder << std::string(indent, '\t') << "{ '"; - if (curr->value != nullptr) { - builder << (curr->value->key ? curr->value->key : "NULL"); - builder << "' : '"; - builder << (curr->value->value ? curr->value->value : "NULL"); - } - builder << "' }" << endl; + builder << endl; + builder << std::string(indent, '\t') << "[" << endl; + indent++; + for (const ::stringpair_list_t* curr = &spl; curr != nullptr; curr = curr->next) { + builder << std::string(indent, '\t') << "{ '"; + if (curr->value != nullptr) { + builder << (curr->value->key ? curr->value->key : "NULL"); + builder << "' : '"; + builder << (curr->value->value ? curr->value->value : "NULL"); } - indent--; - builder << std::string(indent, '\t') << "]" << endl; - } else { - builder << "NULL"; + builder << "' }" << endl; } + indent--; + builder << std::string(indent, '\t') << "]" << endl; return builder.str(); } - std::string to_string(const ::message *const msg, bool full, int indent) + std::string to_string(const ::message& msg, bool full, int indent) { stringstream builder; - if (msg != nullptr) { - builder << endl; - builder << std::string(indent, '\t') << "{" << endl; - indent++; - builder << std::string(indent, '\t') << "from: " - << (msg->from != nullptr ? to_string(msg->from, full, indent) : "NULL") - << endl; - builder << std::string(indent, '\t') << "to: " - << (msg->to != nullptr ? to_string(msg->to, full, indent) : "NULL") << endl; - builder << std::string(indent, '\t') << "shortmsg: '" - << (msg->shortmsg != nullptr ? msg->shortmsg : "NULL") << "'" << endl; - builder << std::string(indent, '\t') << "longmsg: '" - << (msg->longmsg != nullptr ? msg->longmsg : "NULL") << "'" << endl; - builder << std::string(indent, '\t') << "enc_format: " << msg->enc_format << endl; - builder << std::string(indent, '\t') - << "dir: " << (msg->dir == 0 ? "incomming" : "outgoing") << endl; - builder << std::string(indent, '\t') << "id: '" - << (msg->id != nullptr ? msg->id : "NULL") << "'" << endl; - builder << std::string(indent, '\t') << "opt_fields: " - << (msg->opt_fields ? to_string(msg->opt_fields, full, indent) : "NULL") - << endl; - builder << std::string(indent, '\t') << "attachments: " - << (msg->attachments ? to_string(msg->attachments, full, indent) : "NULL") - << endl; - indent--; - builder << std::string(indent, '\t') << "}" << endl; - } else { - builder << "NULL"; - } + builder << endl; + builder << std::string(indent, '\t') << "{" << endl; + indent++; + builder << std::string(indent, '\t') << "from: " + << (msg.from != nullptr ? to_string(*msg.from, full, indent) : "NULL") << endl; + builder << std::string(indent, '\t') + << "to: " << (msg.to != nullptr ? to_string(*msg.to, full, indent) : "NULL") + << endl; + builder << std::string(indent, '\t') << "shortmsg: '" + << (msg.shortmsg != nullptr ? msg.shortmsg : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "longmsg: '" + << (msg.longmsg != nullptr ? msg.longmsg : "NULL") << "'" << endl; + builder << std::string(indent, '\t') << "enc_format: " << msg.enc_format << endl; + builder << std::string(indent, '\t') + << "dir: " << (msg.dir == 0 ? "incomming" : "outgoing") << endl; + builder << std::string(indent, '\t') << "id: '" << (msg.id != nullptr ? msg.id : "NULL") + << "'" << endl; + builder << std::string(indent, '\t') << "opt_fields: " + << (msg.opt_fields ? to_string(*msg.opt_fields, full, indent) : "NULL") << endl; + builder << std::string(indent, '\t') << "attachments: " + << (msg.attachments ? to_string(*msg.attachments, full, indent) : "NULL") + << endl; + indent--; + builder << std::string(indent, '\t') << "}" << endl; return builder.str(); } - std::string to_string(const ::identity_list *const idl, bool full, int indent) + std::string to_string(const ::identity_list& idl, bool full, int indent) { stringstream builder; - if (idl != nullptr) { - builder << endl; - builder << std::string(indent, '\t') << "[" << endl; - indent++; - for (const ::identity_list *curr = idl; curr != nullptr; curr = curr->next) { - builder << to_string(curr->ident, full, indent) << endl; - } - indent--; - builder << std::string(indent, '\t') << "]"; - } else { - builder << "NULL"; + builder << endl; + builder << std::string(indent, '\t') << "[" << endl; + indent++; + for (const ::identity_list* curr = &idl; curr != nullptr; curr = curr->next) { + builder << to_string(*curr->ident, full, indent) << endl; } + indent--; + builder << std::string(indent, '\t') << "]"; return builder.str(); } - string to_string(const ::pEp_member *const member, bool full, int indent) + string to_string(const ::pEp_member& member, bool full, int indent) { stringstream builder; - if (member != nullptr) { - builder << std::string(indent, '\t') << "{" << endl; - indent++; - builder << std::string(indent, '\t') - << "ident: " << to_string(member->ident, full, indent) << endl; - builder << std::string(indent, '\t') << "joined: " << member->joined << endl; - indent--; - builder << std::string(indent, '\t') << "}"; - } else { - builder << "NULL"; - } + builder << std::string(indent, '\t') << "{" << endl; + indent++; + builder << std::string(indent, '\t') + << "ident: " << to_string(*member.ident, full, indent) << endl; + builder << std::string(indent, '\t') << "joined: " << member.joined << endl; + indent--; + builder << std::string(indent, '\t') << "}"; return builder.str(); } - string to_string(const ::member_list *const mbl, bool full, int indent) + string to_string(const ::member_list& mbl, bool full, int indent) { stringstream builder; - if (mbl != nullptr) { - builder << endl; - builder << std::string(indent, '\t') << "[" << endl; - indent++; - for (const member_list *curr = mbl; curr != nullptr; curr = curr->next) { - builder << to_string(curr->member, full, indent) << endl; - } - indent--; - builder << std::string(indent, '\t') << "]"; - } else { - builder << "NULL"; + builder << endl; + builder << std::string(indent, '\t') << "[" << endl; + indent++; + for (const member_list* curr = &mbl; curr != nullptr; curr = curr->next) { + builder << to_string(*curr->member, full, indent) << endl; } + indent--; + builder << std::string(indent, '\t') << "]"; return builder.str(); } - string to_string(const ::pEp_group *const group, bool full, int indent) + string to_string(const ::pEp_group& group, bool full, int indent) { stringstream builder; - if (group != nullptr) { - builder << endl; - builder << std::string(indent, '\t') << "{" << endl; - indent++; - builder << std::string(indent, '\t') - << "group_identity: " << to_string(group->group_identity, full, indent) - << endl; - builder << std::string(indent, '\t') - << "manager: " << to_string(group->manager, full, indent) << endl; - builder << std::string(indent, '\t') << "active: " << group->active << endl; - builder << std::string(indent, '\t') - << "members: " << to_string(group->members, full, indent) << endl; - indent--; - builder << std::string(indent, '\t') << "]"; - } else { - builder << "NULL"; - } + builder << endl; + builder << std::string(indent, '\t') << "{" << endl; + indent++; + builder << std::string(indent, '\t') + << "group_identity: " << to_string(*group.group_identity, full, indent) << endl; + builder << std::string(indent, '\t') + << "manager: " << to_string(*group.manager, full, indent) << endl; + builder << std::string(indent, '\t') << "active: " << group.active << endl; + builder << std::string(indent, '\t') + << "members: " << to_string(*group.members, full, indent) << endl; + indent--; + builder << std::string(indent, '\t') << "]"; return builder.str(); } + // TODO: Move to std_utils std::string readKey() { @@ -257,3 +219,36 @@ namespace pEp { } } // namespace Utils } // namespace pEp + +std::ostream& operator<<(std::ostream& o, const ::pEp_identity& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::bloblist_t& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::stringpair_list_t& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::message& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::identity_list& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::pEp_member& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::member_list& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} +std::ostream& operator<<(std::ostream& o, const ::pEp_group& pEp_c_dt) +{ + return o << pEp::Utils::to_string(pEp_c_dt); +} \ No newline at end of file diff --git a/src/utils.hh b/src/utils.hh index b97f64e..a59db2a 100644 --- a/src/utils.hh +++ b/src/utils.hh @@ -15,21 +15,32 @@ namespace pEp { namespace Utils { // C-types to C++ types - std::vector<::pEp_identity *> to_cxx(const ::identity_list &idl); + std::vector<::pEp_identity*> to_cxx(const ::identity_list& idl); // pEpEngine datatypes to string - std::string to_string(const ::pEp_identity *const ident, bool full = true, int indent = 0); - std::string to_string(const ::bloblist_t *const ident, bool full = true, int indent = 0); - std::string to_string(const ::stringpair_list_t *const spl, bool full = true, int indent = 0); - std::string to_string(const ::message *const msg, bool full = true, int indent = 0); - std::string to_string(const ::identity_list *const idl, bool full = true, int indent = 0); - std::string to_string(const ::pEp_member *const member, bool full = true, int indent = 0); - std::string to_string(const ::member_list *const mbl, bool full = true, int indent = 0); - std::string to_string(const ::pEp_group *const group, bool full = true, int indent = 0); + std::string to_string(const ::pEp_identity& ident, bool full = true, int indent = 0); + std::string to_string(const ::bloblist_t& ident, bool full = true, int indent = 0); + std::string to_string(const ::stringpair_list_t& spl, bool full = true, int indent = 0); + std::string to_string(const ::message& msg, bool full = true, int indent = 0); + std::string to_string(const ::identity_list& idl, bool full = true, int indent = 0); + std::string to_string(const ::pEp_member& member, bool full = true, int indent = 0); + std::string to_string(const ::member_list& mbl, bool full = true, int indent = 0); + std::string to_string(const ::pEp_group& group, bool full = true, int indent = 0); // Misc std::string readKey(); // TODO: Move to std_utils } // namespace Utils } // namespace pEp + +// ostream inserters +std::ostream& operator<<(std::ostream& o, const ::pEp_identity& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::bloblist_t& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::stringpair_list_t& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::message& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::identity_list& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::pEp_member& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::member_list& pEp_c_dt); +std::ostream& operator<<(std::ostream& o, const ::pEp_group& pEp_c_dt); + #endif // LIBPEPADAPTER_UTILS_HH \ No newline at end of file