comparison 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
comparison
equal deleted inserted replaced
547:806e3c72b5df 548:1469caaa8e67
38 } 38 }
39 ~ResizeableBitset() { 39 ~ResizeableBitset() {
40 delete m_bits; 40 delete m_bits;
41 } 41 }
42 42
43 void resize(size_t bits) { // losing all data 43 void resize(size_t size) { // retaining existing data; not thread safe
44 if (!m_bits || bits < m_bits->size()) { 44 size_t bytes = (size >> 3) + 1;
45 if (m_bits && bytes == m_bits->size()) return;
46 std::vector<uint8_t> *newbits = new std::vector<uint8_t>(bytes);
47 newbits->assign(bytes, 0);
48 if (m_bits) {
49 for (size_t i = 0; i < bytes && i < m_bits->size(); ++i) {
50 (*newbits)[i] = (*m_bits)[i];
51 }
45 delete m_bits; 52 delete m_bits;
46 m_bits = new std::vector<uint8_t>;
47 } 53 }
48 m_bits->assign((bits >> 3) + 1, 0); 54 m_bits = newbits;
49 m_size = bits; 55 m_size = size;
50 } 56 }
51 57
52 bool get(size_t column) const { 58 bool get(size_t column) const {
53 return ((*m_bits)[column >> 3]) & (1u << (column & 0x07)); 59 return ((*m_bits)[column >> 3]) & (1u << (column & 0x07));
54 } 60 }