]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
denc: add reserve() to boost::flat_set/map decode
authorCasey Bodley <cbodley@redhat.com>
Tue, 16 May 2017 19:03:05 +0000 (15:03 -0400)
committerCasey Bodley <cbodley@redhat.com>
Thu, 18 May 2017 18:46:59 +0000 (14:46 -0400)
by reserving space up front, we avoid rellocating storage as elements
are inserted

Signed-off-by: Casey Bodley <cbodley@redhat.com>
src/include/encoding.h

index 953420e8991018528daf418f8c924f8d435bebdb..0013728efed91b39a7aab00e821c66c196658ed2 100644 (file)
@@ -512,6 +512,7 @@ decode(boost::container::flat_set<T, Comp, Alloc>& s, bufferlist::iterator& p)
   __u32 n;
   decode(n, p);
   s.clear();
+  s.reserve(n);
   while (n--) {
     T v;
     decode(v, p);
@@ -532,6 +533,7 @@ inline typename std::enable_if<!traits::supported>::type
 decode_nohead(int len, boost::container::flat_set<T, Comp, Alloc>& s,
              bufferlist::iterator& p)
 {
+  s.reserve(len);
   for (int i=0; i<len; i++) {
     T v;
     decode(v, p);
@@ -817,6 +819,7 @@ template<class T, class U, class Comp, class Alloc,
   __u32 n;
   decode(n, p);
   m.clear();
+  m.reserve(n);
   while (n--) {
     T k;
     decode(k, p);
@@ -829,6 +832,7 @@ inline void decode_noclear(boost::container::flat_map<T,U,Comp,Alloc>& m,
 {
   __u32 n;
   decode(n, p);
+  m.reserve(m.size() + n);
   while (n--) {
     T k;
     decode(k, p);