Mercurial > hg > svcore
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 {