diff base/ResizeableBitset.h @ 548:1469caaa8e67

* Finer locking in fft caches; fix displayed bin ranges in spectrogram
author Chris Cannam
date Thu, 05 Feb 2009 12:05:28 +0000
parents 95391b480e17
children 107d3f3705c9
line wrap: on
line diff
--- a/base/ResizeableBitset.h	Wed Feb 04 20:39:11 2009 +0000
+++ b/base/ResizeableBitset.h	Thu Feb 05 12:05:28 2009 +0000
@@ -40,13 +40,19 @@
         delete m_bits;
     }
     
-    void resize(size_t bits) { // losing all data
-        if (!m_bits || bits < m_bits->size()) {
+    void resize(size_t size) { // retaining existing data; not thread safe
+        size_t bytes = (size >> 3) + 1;
+        if (m_bits && bytes == m_bits->size()) return;
+        std::vector<uint8_t> *newbits = new std::vector<uint8_t>(bytes);
+        newbits->assign(bytes, 0);
+        if (m_bits) {
+            for (size_t i = 0; i < bytes && i < m_bits->size(); ++i) {
+                (*newbits)[i] = (*m_bits)[i];
+            }
             delete m_bits;
-            m_bits = new std::vector<uint8_t>;
         }
-        m_bits->assign((bits >> 3) + 1, 0);
-        m_size = bits;
+        m_bits = newbits;
+        m_size = size;
     }
     
     bool get(size_t column) const {