From: Sage Weil Date: Tue, 18 Oct 2016 02:42:17 +0000 (-0400) Subject: include/encoding: parameterize stl containers encoders with allocator X-Git-Tag: v11.1.0~442^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=82251cc51d87ef614e6ddd1eb0f810920e98671b;p=ceph.git include/encoding: parameterize stl containers encoders with allocator This will let us encode/decode containers with custom allocators (i.e., in mempools). Signed-off-by: Sage Weil --- diff --git a/src/include/encoding.h b/src/include/encoding.h index 2611330961dbd..b8907897d2962 100644 --- a/src/include/encoding.h +++ b/src/include/encoding.h @@ -383,18 +383,18 @@ inline typename std::enable_if -template> +template> inline typename std::enable_if::type - encode(const std::list& ls, bufferlist& bl) + encode(const std::list& ls, bufferlist& 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> +template> inline typename std::enable_if::type - encode(const std::list& ls, bufferlist& bl, uint64_t features) + encode(const std::list& ls, bufferlist& bl, uint64_t features) { // should i pre- or post- count? if (!ls.empty()) { @@ -415,9 +415,9 @@ inline typename std::enable_if::type encode(*p, bl, features); } } -template> +template> inline typename std::enable_if::type - decode(std::list& ls, bufferlist::iterator& p) + decode(std::list& ls, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -430,24 +430,27 @@ inline typename std::enable_if::type } // std::list> -template -inline void encode(const std::list >& ls, bufferlist& bl) +template +inline void encode(const std::list, Alloc>& ls, + bufferlist& 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) +template +inline void encode(const std::list, Alloc>& ls, + bufferlist& bl, uint64_t 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) +template +inline void decode(std::list, Alloc>& ls, + bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -460,41 +463,18 @@ inline void decode(std::list >& ls, bufferlist::iterator& p) } // std::set -template> +template> inline typename std::enable_if::type - encode(const std::set& s, bufferlist& bl) + encode(const std::set& s, bufferlist& bl) { __u32 n = (__u32)(s.size()); encode(n, bl); for (typename std::set::const_iterator p = s.begin(); p != s.end(); ++p) encode(*p, bl); } -template> -inline typename std::enable_if::type - decode(std::set& s, bufferlist::iterator& p) -{ - __u32 n; - decode(n, p); - s.clear(); - while (n--) { - T v; - decode(v, p); - s.insert(v); - } -} - -template> -inline typename std::enable_if::type - encode(const std::set& s, bufferlist& bl) -{ - __u32 n = (__u32)(s.size()); - encode(n, bl); - for (typename std::set::const_iterator p = s.begin(); p != s.end(); ++p) - encode(*p, bl); -} -template> +template> inline typename std::enable_if::type - decode(std::set& s, bufferlist::iterator& p) + decode(std::set& s, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -506,16 +486,16 @@ inline typename std::enable_if::type } } -template> +template> inline typename std::enable_if::type - encode_nohead(const std::set& s, bufferlist& bl) + encode_nohead(const std::set& s, bufferlist& bl) { - for (typename std::set::const_iterator p = s.begin(); p != s.end(); ++p) + for (typename std::set::const_iterator p = s.begin(); p != s.end(); ++p) encode(*p, bl); } -template> +template> inline typename std::enable_if::type - decode_nohead(int len, std::set& s, bufferlist::iterator& p) + decode_nohead(int len, std::set& s, bufferlist::iterator& p) { for (int i=0; i::type } // multiset -template -inline void encode(const std::multiset& s, bufferlist& bl) +template +inline void encode(const std::multiset& s, bufferlist& bl) { __u32 n = (__u32)(s.size()); encode(n, bl); - for (typename std::multiset::const_iterator p = s.begin(); p != s.end(); ++p) + for (typename std::multiset::const_iterator p = s.begin(); p != s.end(); ++p) encode(*p, bl); } -template -inline void decode(std::multiset& s, bufferlist::iterator& p) +template +inline void decode(std::multiset& s, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -566,27 +546,27 @@ inline void decode(std::vector& v, bufferlist::iterator& p) } */ // std::vector -template> +template> inline typename std::enable_if::type - encode(const std::vector& v, bufferlist& bl, uint64_t features) + encode(const std::vector& v, bufferlist& bl, uint64_t features) { __u32 n = (__u32)(v.size()); encode(n, bl); for (typename std::vector::const_iterator p = v.begin(); p != v.end(); ++p) encode(*p, bl, features); } -template> +template> inline typename std::enable_if::type - encode(const std::vector& v, bufferlist& bl) + encode(const std::vector& v, bufferlist& bl) { __u32 n = (__u32)(v.size()); encode(n, bl); for (typename std::vector::const_iterator p = v.begin(); p != v.end(); ++p) encode(*p, bl); } -template> +template> inline typename std::enable_if::type - decode(std::vector& v, bufferlist::iterator& p) + decode(std::vector& v, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -595,16 +575,16 @@ inline typename std::enable_if::type decode(v[i], p); } -template> +template> inline typename std::enable_if::type - encode_nohead(const std::vector& v, bufferlist& bl) + encode_nohead(const std::vector& v, bufferlist& bl) { for (typename std::vector::const_iterator p = v.begin(); p != v.end(); ++p) encode(*p, bl); } -template> +template> inline typename std::enable_if::type - decode_nohead(int len, std::vector& v, bufferlist::iterator& p) + decode_nohead(int len, std::vector& v, bufferlist::iterator& p) { v.resize(len); for (__u32 i=0; i::type } // vector (shared_ptr) -template -inline void encode(const std::vector >& v, bufferlist& bl, +template +inline void encode(const std::vector,Alloc>& v, + bufferlist& bl, uint64_t features) { __u32 n = (__u32)(v.size()); @@ -624,8 +605,9 @@ inline void encode(const std::vector >& v, bufferlist& bl, else encode(T(), bl, features); } -template -inline void encode(const std::vector >& v, bufferlist& bl) +template +inline void encode(const std::vector,Alloc>& v, + bufferlist& bl) { __u32 n = (__u32)(v.size()); encode(n, bl); @@ -635,8 +617,9 @@ inline void encode(const std::vector >& v, bufferlist& bl) else encode(T(), bl); } -template -inline void decode(std::vector >& v, bufferlist::iterator& p) +template +inline void decode(std::vector,Alloc>& v, + bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -673,59 +656,37 @@ inline void decode(std::map& m, bufferlist::iterator& p) }*/ // map -template, typename u_traits=denc_traits> inline typename std::enable_if::type - encode(const std::map& m, bufferlist& bl) -{ - __u32 n = (__u32)(m.size()); - encode(n, bl); - for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { - encode(p->first, bl); - encode(p->second, bl); - } -} -template -inline void encode(const std::map& m, bufferlist& bl) + encode(const std::map& m, bufferlist& bl) { __u32 n = (__u32)(m.size()); encode(n, bl); - for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl); encode(p->second, bl); } } -template, typename u_traits=denc_traits> inline typename std::enable_if::type - encode(const std::map& m, bufferlist& bl, uint64_t features) + encode(const std::map& m, bufferlist& bl, uint64_t features) { __u32 n = (__u32)(m.size()); encode(n, bl); - for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl, features); encode(p->second, bl, features); } } -template, typename u_traits=denc_traits> inline typename std::enable_if::type - decode(std::map& m, bufferlist::iterator& p) -{ - __u32 n; - decode(n, p); - m.clear(); - while (n--) { - T k; - decode(k, p); - decode(m[k], p); - } -} -template -inline void decode(std::map& m, bufferlist::iterator& p) + decode(std::map& m, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -736,19 +697,8 @@ inline void decode(std::map& m, bufferlist::iterator& p) decode(m[k], p); } } -template -inline void decode_noclear(std::map& m, bufferlist::iterator& p) -{ - __u32 n; - decode(n, p); - while (n--) { - T k; - decode(k, p); - decode(m[k], p); - } -} -template -inline void decode_noclear(std::map& m, bufferlist::iterator& p) +template +inline void decode_noclear(std::map& m, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -758,33 +708,33 @@ inline void decode_noclear(std::map& m, bufferlist::iterator& p) decode(m[k], p); } } -template, typename u_traits=denc_traits> inline typename std::enable_if::type - encode_nohead(const std::map& m, bufferlist& bl) + encode_nohead(const std::map& m, bufferlist& bl) { - for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl); encode(p->second, bl); } } -template, typename u_traits=denc_traits> inline typename std::enable_if::type - encode_nohead(const std::map& m, bufferlist& bl, uint64_t features) + encode_nohead(const std::map& m, bufferlist& bl, uint64_t features) { - for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename std::map::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl, features); encode(p->second, bl, features); } } -template, typename u_traits=denc_traits> inline typename std::enable_if::type - decode_nohead(int n, std::map& m, bufferlist::iterator& p) + decode_nohead(int n, std::map& m, bufferlist::iterator& p) { m.clear(); while (n--) { @@ -795,18 +745,18 @@ inline typename std::enable_if -inline void encode(const std::multimap& m, bufferlist& bl) +template +inline void encode(const std::multimap& m, bufferlist& bl) { __u32 n = (__u32)(m.size()); encode(n, bl); - for (typename std::multimap::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename std::multimap::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl); encode(p->second, bl); } } -template -inline void decode(std::multimap& m, bufferlist::iterator& p) +template +inline void decode(std::multimap& m, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -814,35 +764,35 @@ inline void decode(std::multimap& m, bufferlist::iterator& p) while (n--) { typename std::pair tu = std::pair(); decode(tu.first, p); - typename std::multimap::iterator it = m.insert(tu); + typename std::multimap::iterator it = m.insert(tu); decode(it->second, p); } } // ceph::unordered_map -template -inline void encode(const unordered_map& m, bufferlist& bl, +template +inline void encode(const unordered_map& m, bufferlist& bl, uint64_t features) { __u32 n = (__u32)(m.size()); encode(n, bl); - for (typename unordered_map::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename unordered_map::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl, features); encode(p->second, bl, features); } } -template -inline void encode(const unordered_map& m, bufferlist& bl) +template +inline void encode(const unordered_map& m, bufferlist& bl) { __u32 n = (__u32)(m.size()); encode(n, bl); - for (typename unordered_map::const_iterator p = m.begin(); p != m.end(); ++p) { + for (typename unordered_map::const_iterator p = m.begin(); p != m.end(); ++p) { encode(p->first, bl); encode(p->second, bl); } } -template -inline void decode(unordered_map& m, bufferlist::iterator& p) +template +inline void decode(unordered_map& m, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -855,16 +805,16 @@ inline void decode(unordered_map& m, bufferlist::iterator& p) } // ceph::unordered_set -template -inline void encode(const ceph::unordered_set& m, bufferlist& bl) +template +inline void encode(const ceph::unordered_set& m, bufferlist& bl) { __u32 n = (__u32)(m.size()); encode(n, bl); - for (typename ceph::unordered_set::const_iterator p = m.begin(); p != m.end(); ++p) + for (typename ceph::unordered_set::const_iterator p = m.begin(); p != m.end(); ++p) encode(*p, bl); } -template -inline void decode(ceph::unordered_set& m, bufferlist::iterator& p) +template +inline void decode(ceph::unordered_set& m, bufferlist::iterator& p) { __u32 n; decode(n, p); @@ -877,24 +827,24 @@ inline void decode(ceph::unordered_set& m, bufferlist::iterator& p) } // deque -template -inline void encode(const std::deque& ls, bufferlist& bl, uint64_t features) +template +inline void encode(const std::deque& ls, bufferlist& bl, uint64_t features) { __u32 n = ls.size(); encode(n, bl); for (typename std::deque::const_iterator p = ls.begin(); p != ls.end(); ++p) encode(*p, bl, features); } -template -inline void encode(const std::deque& ls, bufferlist& bl) +template +inline void encode(const std::deque& ls, bufferlist& bl) { __u32 n = ls.size(); encode(n, bl); for (typename std::deque::const_iterator p = ls.begin(); p != ls.end(); ++p) encode(*p, bl); } -template -inline void decode(std::deque& ls, bufferlist::iterator& p) +template +inline void decode(std::deque& ls, bufferlist::iterator& p) { __u32 n; decode(n, p);