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