From: Sage Weil Date: Thu, 10 Mar 2016 21:46:34 +0000 (-0500) Subject: include/encoding: do not try to be clever with list encoding X-Git-Tag: v10.1.0~110^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fd4d8ceec87041c554fc3ee3e4914681aac92beb;p=ceph.git include/encoding: do not try to be clever with list encoding In c++11 std::list::size() is O(1). No need to be clever. Signed-off-by: Sage Weil --- diff --git a/src/include/encoding.h b/src/include/encoding.h index b52ec068d56e..2657c623c94f 100644 --- a/src/include/encoding.h +++ b/src/include/encoding.h @@ -368,24 +368,10 @@ inline void decode(std::pair &pa, bufferlist::iterator &p) template inline void encode(const std::list& ls, bufferlist& bl) { - // should i pre- or post- count? - if (!ls.empty()) { - unsigned pos = bl.length(); - unsigned n = 0; - encode(n, bl); - for (typename std::list::const_iterator p = ls.begin(); p != ls.end(); ++p) { - n++; - encode(*p, bl); - } - ceph_le32 en; - en = n; - bl.copy_in(pos, sizeof(en), (char*)&en); - } else { - __u32 n = (__u32)(ls.size()); // FIXME: this is slow on a list. - encode(n, bl); - for (typename std::list::const_iterator p = ls.begin(); p != ls.end(); ++p) - encode(*p, bl); - } + __u32 n = (__u32)(ls.size()); // c++11 std::list::size() is O(1) + encode(n, bl); + for (typename std::list::const_iterator p = ls.begin(); p != ls.end(); ++p) + encode(*p, bl); } template inline void decode(std::list& ls, bufferlist::iterator& p) @@ -403,46 +389,18 @@ inline void decode(std::list& ls, bufferlist::iterator& p) template inline void encode(const std::list >& ls, bufferlist& bl) { - // should i pre- or post- count? - if (!ls.empty()) { - unsigned pos = bl.length(); - unsigned n = 0; - encode(n, bl); - for (typename std::list >::const_iterator p = ls.begin(); p != ls.end(); ++p) { - n++; - encode(**p, bl); - } - ceph_le32 en; - en = n; - bl.copy_in(pos, sizeof(en), (char*)&en); - } else { - __u32 n = (__u32)(ls.size()); // FIXME: this is slow on a list. - encode(n, bl); - for (typename std::list >::const_iterator p = ls.begin(); p != ls.end(); ++p) - encode(**p, bl); - } + __u32 n = (__u32)(ls.size()); // c++11 std::list::size() is O(1) + encode(n, bl); + for (typename std::list >::const_iterator p = ls.begin(); p != ls.end(); ++p) + encode(**p, bl); } template inline void encode(const std::list >& ls, bufferlist& bl, uint64_t features) { - // should i pre- or post- count? - if (!ls.empty()) { - unsigned pos = bl.length(); - unsigned n = 0; - encode(n, bl); - for (typename std::list >::const_iterator p = ls.begin(); p != ls.end(); ++p) { - n++; - encode(**p, bl, features); - } - ceph_le32 en; - en = n; - bl.copy_in(pos, sizeof(en), (char*)&en); - } else { - __u32 n = (__u32)(ls.size()); // FIXME: this is slow on a list. - encode(n, bl); - for (typename std::list >::const_iterator p = ls.begin(); p != ls.end(); ++p) - encode(**p, bl, features); - } + __u32 n = (__u32)(ls.size()); // c++11 std::list::size() is O(1) + encode(n, bl); + for (typename std::list >::const_iterator p = ls.begin(); p != ls.end(); ++p) + encode(**p, bl, features); } template inline void decode(std::list >& ls, bufferlist::iterator& p)