]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: add list and ptr is_zero() method
authorSage Weil <sage@inktank.com>
Thu, 14 Jun 2012 19:34:46 +0000 (12:34 -0700)
committerSage Weil <sage@inktank.com>
Fri, 15 Jun 2012 18:54:17 +0000 (11:54 -0700)
Simple helper to check if a buffer is all zeros.

Signed-off-by: Sage Weil <sage@inktank.com>
src/common/buffer.cc
src/include/buffer.h

index 4c96ed77c784a5bda2c1b6cc2b8712cd9c8de5bc..461df4c0fa1b1ec06dde371cd8f578658e4308a4 100644 (file)
@@ -381,6 +381,17 @@ bool buffer_track_alloc = get_env_bool("CEPH_BUFFER_TRACK");
     return 0;
   }
 
+  bool buffer::ptr::is_zero() const
+  {
+    const char *data = c_str();
+    for (size_t p = 0; p < _len; p++) {
+      if (data[p] != 0) {
+       return false;
+      }
+    }
+    return true;
+  }
+
   void buffer::ptr::append(char c)
   {
     assert(_raw);
@@ -698,6 +709,17 @@ bool buffer_track_alloc = get_env_bool("CEPH_BUFFER_TRACK");
     return true;
   }
 
+  bool buffer::list::is_zero() const {
+    for (std::list<ptr>::const_iterator it = _buffers.begin();
+        it != _buffers.end();
+        it++) {
+      if (!it->is_zero()) {
+       return false;
+      }
+    }
+    return true;
+  }
+
   void buffer::list::zero()
   {
     for (std::list<ptr>::iterator it = _buffers.begin();
index 2ba138f579c36167013dab6799aca679155a6bd2..d1b91fdd49c59895f8810bfaed38ddc01e63cf70 100644 (file)
@@ -197,6 +197,7 @@ public:
     unsigned wasted();
 
     int cmp(const ptr& o);
+    bool is_zero() const;
 
     // modifiers
     void set_offset(unsigned o) { _off = o; }
@@ -330,6 +331,8 @@ public:
     bool is_page_aligned() const;
     bool is_n_page_sized() const;
 
+    bool is_zero() const;
+
     // modifiers
     void clear() {
       _buffers.clear();