35 #ifndef MESSAGE_FILTERS_CACHE_H_
36 #define MESSAGE_FILTERS_CACHE_H_
39 #include "boost/thread.hpp"
40 #include "boost/shared_ptr.hpp"
73 Cache(F&
f,
unsigned int cache_size = 1)
84 Cache(
unsigned int cache_size = 1)
142 typename std::deque<EventType >::reverse_iterator rev_it =
cache_.rbegin();
146 ros::Time evt_stamp = mt::TimeStamp<M>::value(*evt.getMessage());
147 while(rev_it !=
cache_.rend() && mt::TimeStamp<M>::value(*(*rev_it).getMessage()) > evt_stamp)
151 cache_.insert(rev_it.base(), evt);
173 unsigned int start_index = 0 ;
174 while(start_index <
cache_.size() &&
175 mt::TimeStamp<M>::value(*
cache_[start_index].getMessage()) < start)
181 unsigned int end_index = start_index ;
182 while(end_index <
cache_.size() &&
183 mt::TimeStamp<M>::value(*
cache_[end_index].getMessage()) <= end)
188 std::vector<MConstPtr> interval_elems ;
189 interval_elems.reserve(end_index - start_index) ;
190 for (
unsigned int i=start_index; i<end_index; i++)
192 interval_elems.push_back(
cache_[i].getMessage()) ;
195 return interval_elems ;
211 unsigned int start_index =
cache_.size()-1;
212 while(start_index > 0 &&
213 mt::TimeStamp<M>::value(*
cache_[start_index].getMessage()) >
start)
217 unsigned int end_index = start_index;
218 while(end_index <
cache_.size()-1 &&
219 mt::TimeStamp<M>::value(*
cache_[end_index].getMessage()) < end)
224 std::vector<MConstPtr> interval_elems;
225 interval_elems.reserve(end_index - start_index + 1) ;
226 for (
unsigned int i=start_index; i<=end_index; i++)
228 interval_elems.push_back(
cache_[i].getMessage()) ;
231 return interval_elems;
248 int elem_index = -1 ;
250 mt::TimeStamp<M>::value(*
cache_[i].getMessage()) < time)
257 out =
cache_[elem_index].getMessage() ;
276 int elem_index = -1 ;
278 mt::TimeStamp<M>::value(*
cache_[i].getMessage()) > time)
285 out =
cache_[elem_index].getMessage() ;
304 latest_time = mt::TimeStamp<M>::value(*
cache_.back().getMessage());
321 oldest_time = mt::TimeStamp<M>::value(*
cache_.front().getMessage());
334 std::deque<EventType>
cache_ ;