Mercurial > hg > svcore
comparison base/ResizeableBitset.h @ 546:95391b480e17
* Make use of peak cache in spectrogram
author | Chris Cannam |
---|---|
date | Wed, 04 Feb 2009 15:03:42 +0000 |
parents | 146eb9e35baa |
children | 1469caaa8e67 |
comparison
equal
deleted
inserted
replaced
545:c603d9439b37 | 546:95391b480e17 |
---|---|
22 class ResizeableBitset { | 22 class ResizeableBitset { |
23 | 23 |
24 public: | 24 public: |
25 ResizeableBitset() : m_bits(0) { | 25 ResizeableBitset() : m_bits(0) { |
26 } | 26 } |
27 ResizeableBitset(size_t size) : m_bits(new std::vector<uint8_t>) { | 27 ResizeableBitset(size_t size) : m_bits(new std::vector<uint8_t>), m_size(size) { |
28 m_bits->assign((size >> 3) + 1, 0); | 28 m_bits->assign((size >> 3) + 1, 0); |
29 } | 29 } |
30 ResizeableBitset(const ResizeableBitset &b) { | 30 ResizeableBitset(const ResizeableBitset &b) { |
31 m_bits = new std::vector<uint8_t>(*b.m_bits); | 31 m_bits = new std::vector<uint8_t>(*b.m_bits); |
32 } | 32 } |
44 if (!m_bits || bits < m_bits->size()) { | 44 if (!m_bits || bits < m_bits->size()) { |
45 delete m_bits; | 45 delete m_bits; |
46 m_bits = new std::vector<uint8_t>; | 46 m_bits = new std::vector<uint8_t>; |
47 } | 47 } |
48 m_bits->assign((bits >> 3) + 1, 0); | 48 m_bits->assign((bits >> 3) + 1, 0); |
49 m_size = bits; | |
49 } | 50 } |
50 | 51 |
51 bool get(size_t column) const { | 52 bool get(size_t column) const { |
52 return ((*m_bits)[column >> 3]) & (1u << (column & 0x07)); | 53 return ((*m_bits)[column >> 3]) & (1u << (column & 0x07)); |
53 } | 54 } |
61 } | 62 } |
62 | 63 |
63 void copy(size_t source, size_t dest) { | 64 void copy(size_t source, size_t dest) { |
64 get(source) ? set(dest) : reset(dest); | 65 get(source) ? set(dest) : reset(dest); |
65 } | 66 } |
67 | |
68 size_t size() const { | |
69 return m_size; | |
70 } | |
66 | 71 |
67 private: | 72 private: |
68 std::vector<uint8_t> *m_bits; | 73 std::vector<uint8_t> *m_bits; |
74 size_t m_size; | |
69 }; | 75 }; |
70 | 76 |
71 | 77 |
72 #endif | 78 #endif |
73 | 79 |