From: Jason Dillaman Date: Wed, 1 Jul 2015 03:49:12 +0000 (-0400) Subject: cls_journal: new convenience functions for ObjectSetPosition X-Git-Tag: v10.0.1~102^2~30 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d2a987537018ae8bf99c89b4f23915d989c2cc50;p=ceph.git cls_journal: new convenience functions for ObjectSetPosition Signed-off-by: Jason Dillaman --- diff --git a/src/cls/journal/cls_journal_types.cc b/src/cls/journal/cls_journal_types.cc index 9ecb9516c4b5..65c0d98dc59e 100644 --- a/src/cls/journal/cls_journal_types.cc +++ b/src/cls/journal/cls_journal_types.cc @@ -3,6 +3,7 @@ #include "cls/journal/cls_journal_types.h" #include "common/Formatter.h" +#include namespace cls { namespace journal { @@ -31,6 +32,28 @@ void EntryPosition::generate_test_instances(std::list &o) { o.push_back(new EntryPosition("id", 2)); } +bool ObjectSetPosition::operator<(const ObjectSetPosition& rhs) const { + if (entry_positions.size() < rhs.entry_positions.size()) { + return true; + } else if (entry_positions.size() > rhs.entry_positions.size()) { + return false; + } + + std::map rhs_tids; + for (EntryPositions::const_iterator it = rhs.entry_positions.begin(); + it != rhs.entry_positions.end(); ++it) { + rhs_tids[it->tag] = it->tid; + } + + for (size_t i=0; i &o) { o.push_back(new Client("id", "desc", ObjectSetPosition(1, entry_positions))); } +std::ostream &operator<<(std::ostream &os, + const EntryPosition &entry_position) { + os << "[tag=" << entry_position.tag << ", tid=" + << entry_position.tid << "]"; + return os; +} + +std::ostream &operator<<(std::ostream &os, + const ObjectSetPosition &object_set_position) { + os << "[object_number=" << object_set_position.object_number << ", " + << "positions=["; + for (size_t i=0; i #include #include @@ -47,6 +48,10 @@ struct ObjectSetPosition { const EntryPositions &_entry_positions) : object_number(_object_number), entry_positions(_entry_positions) {} + bool operator<(const ObjectSetPosition& rhs) const; + inline bool operator<=(const ObjectSetPosition& rhs) const { + return (*this == rhs || *this < rhs); + } inline bool operator==(const ObjectSetPosition &rhs) const { return (object_number == rhs.object_number && entry_positions == rhs.entry_positions); @@ -88,6 +93,11 @@ WRITE_CLASS_ENCODER(EntryPosition); WRITE_CLASS_ENCODER(ObjectSetPosition); WRITE_CLASS_ENCODER(Client); +std::ostream &operator<<(std::ostream &os, + const EntryPosition &entry_position); +std::ostream &operator<<(std::ostream &os, + const ObjectSetPosition &object_set_position); + } // namespace journal } // namespace cls