comparison base/Scavenger.h @ 1039:b14064bd1f97 cxx11

This code now compiles. Main problem: sample rate types
author Chris Cannam
date Tue, 03 Mar 2015 17:09:19 +0000
parents 218605f94073
children 6b847a59d908
comparison
equal deleted inserted replaced
1038:cc27f35aa75c 1039:b14064bd1f97
59 * Only one thread should be calling this on any given scavenger. 59 * Only one thread should be calling this on any given scavenger.
60 */ 60 */
61 void scavenge(bool clearNow = false); 61 void scavenge(bool clearNow = false);
62 62
63 protected: 63 protected:
64 typedef std::pair<T *, int> ObjectTimePair; 64 typedef std::pair<T *, time_t> ObjectTimePair;
65 typedef std::vector<ObjectTimePair> ObjectTimeList; 65 typedef std::vector<ObjectTimePair> ObjectTimeList;
66 ObjectTimeList m_objects; 66 ObjectTimeList m_objects;
67 int m_sec; 67 time_t m_sec;
68 68
69 typedef std::list<T *> ObjectList; 69 typedef std::list<T *> ObjectList;
70 ObjectList m_excess; 70 ObjectList m_excess;
71 int m_lastExcess; 71 time_t m_lastExcess;
72 QMutex m_excessMutex; 72 QMutex m_excessMutex;
73 void pushExcess(T *); 73 void pushExcess(T *);
74 void clearExcess(int); 74 void clearExcess(time_t);
75 75
76 unsigned int m_claimed; 76 unsigned int m_claimed;
77 unsigned int m_scavenged; 77 unsigned int m_scavenged;
78 }; 78 };
79 79
127 { 127 {
128 // std::cerr << "Scavenger::claim(" << t << ")" << std::endl; 128 // std::cerr << "Scavenger::claim(" << t << ")" << std::endl;
129 129
130 struct timeval tv; 130 struct timeval tv;
131 (void)gettimeofday(&tv, 0); 131 (void)gettimeofday(&tv, 0);
132 int sec = tv.tv_sec; 132 time_t sec = tv.tv_sec;
133 133
134 for (size_t i = 0; i < m_objects.size(); ++i) { 134 for (size_t i = 0; i < m_objects.size(); ++i) {
135 ObjectTimePair &pair = m_objects[i]; 135 ObjectTimePair &pair = m_objects[i];
136 if (pair.first == 0) { 136 if (pair.first == 0) {
137 pair.second = sec; 137 pair.second = sec;
154 154
155 if (m_scavenged >= m_claimed) return; 155 if (m_scavenged >= m_claimed) return;
156 156
157 struct timeval tv; 157 struct timeval tv;
158 (void)gettimeofday(&tv, 0); 158 (void)gettimeofday(&tv, 0);
159 int sec = tv.tv_sec; 159 time_t sec = tv.tv_sec;
160 160
161 for (size_t i = 0; i < m_objects.size(); ++i) { 161 for (size_t i = 0; i < m_objects.size(); ++i) {
162 ObjectTimePair &pair = m_objects[i]; 162 ObjectTimePair &pair = m_objects[i];
163 if (clearNow || 163 if (clearNow ||
164 (pair.first != 0 && pair.second + m_sec < sec)) { 164 (pair.first != 0 && pair.second + m_sec < sec)) {
186 m_excessMutex.unlock(); 186 m_excessMutex.unlock();
187 } 187 }
188 188
189 template <typename T> 189 template <typename T>
190 void 190 void
191 Scavenger<T>::clearExcess(int sec) 191 Scavenger<T>::clearExcess(time_t sec)
192 { 192 {
193 m_excessMutex.lock(); 193 m_excessMutex.lock();
194 for (typename ObjectList::iterator i = m_excess.begin(); 194 for (typename ObjectList::iterator i = m_excess.begin();
195 i != m_excess.end(); ++i) { 195 i != m_excess.end(); ++i) {
196 delete *i; 196 delete *i;