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