queue.h
Go to the documentation of this file.
1 //=================================================================================================
2 // Copyright (c) 2011, Johannes Meyer, TU Darmstadt
3 // All rights reserved.
4 
5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are met:
7 // * Redistributions of source code must retain the above copyright
8 // notice, this list of conditions and the following disclaimer.
9 // * Redistributions in binary form must reproduce the above copyright
10 // notice, this list of conditions and the following disclaimer in the
11 // documentation and/or other materials provided with the distribution.
12 // * Neither the name of the Flight Systems and Automatic Control group,
13 // TU Darmstadt, nor the names of its contributors may be used to
14 // endorse or promote products derived from this software without
15 // specific prior written permission.
16 
17 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
21 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 //=================================================================================================
28 
29 #ifndef HECTOR_POSE_ESTIMATION_QUEUE_H
30 #define HECTOR_POSE_ESTIMATION_QUEUE_H
31 
32 #include <boost/array.hpp>
34 
35 namespace hector_pose_estimation {
36 
37 class Queue {
38 public:
39  static const size_t capacity_ = 10;
40 
41  virtual ~Queue() {}
42  virtual bool empty() const = 0;
43  virtual bool full() const = 0;
44  virtual size_t size() const = 0;
45  virtual size_t capacity() const = 0;
46 
47  virtual void push(const MeasurementUpdate& update) = 0;
48  virtual const MeasurementUpdate& pop() = 0;
49  virtual void clear() = 0;
50 };
51 
52 template <class Update>
53 class Queue_ : public Queue
54 {
55 public:
56  Queue_() : in_(0), out_(0), size_(0) {}
57  virtual ~Queue_() {}
58 
59  virtual bool empty() const { return size_ == 0; }
60  virtual bool full() const { return size_ == capacity_; }
61  virtual size_t size() const { return size_; }
62  virtual size_t capacity() const { return capacity_; }
63 
64  virtual void push(const MeasurementUpdate& update) {
65  if (full()) return;
66  data_[inc(in_)] = static_cast<Update const &>(update);
67  size_++;
68  }
69 
70  virtual const Update& pop() {
71  if (empty()) throw std::runtime_error("queue is empty");
72  size_--;
73  return data_[inc(out_)];
74  }
75 
76  virtual void clear() { out_ = in_ = size_ = 0; }
77 
78 private:
79  static size_t inc(size_t& index) { size_t temp = index++; index %= Queue::capacity_; return temp; }
80 
81  boost::array<Update, Queue::capacity_> data_;
82  size_t in_, out_, size_;
83 };
84 
85 } // namespace hector_pose_estimation
86 
87 #endif // HECTOR_POSE_ESTIMATION_QUEUE_H
hector_pose_estimation::Queue_::data_
boost::array< Update, Queue::capacity_ > data_
Definition: queue.h:81
hector_pose_estimation::Queue::size
virtual size_t size() const =0
hector_pose_estimation::Queue_::pop
virtual const Update & pop()
Definition: queue.h:70
hector_pose_estimation::Queue_::size
virtual size_t size() const
Definition: queue.h:61
hector_pose_estimation::Queue::capacity
virtual size_t capacity() const =0
hector_pose_estimation::Queue::pop
virtual const MeasurementUpdate & pop()=0
hector_pose_estimation::Queue_::full
virtual bool full() const
Definition: queue.h:60
hector_pose_estimation::Queue::~Queue
virtual ~Queue()
Definition: queue.h:41
hector_pose_estimation::Queue_::~Queue_
virtual ~Queue_()
Definition: queue.h:57
hector_pose_estimation::Queue_::empty
virtual bool empty() const
Definition: queue.h:59
hector_pose_estimation::Queue::capacity_
static const size_t capacity_
Definition: queue.h:39
hector_pose_estimation::Queue::empty
virtual bool empty() const =0
hector_pose_estimation::Queue_::size_
size_t size_
Definition: queue.h:82
hector_pose_estimation::Queue_::inc
static size_t inc(size_t &index)
Definition: queue.h:79
update
void update(const std::string &key, const XmlRpc::XmlRpcValue &v)
hector_pose_estimation
Definition: collection.h:39
hector_pose_estimation::Queue
Definition: queue.h:37
hector_pose_estimation::Queue_::out_
size_t out_
Definition: queue.h:82
hector_pose_estimation::MeasurementUpdate
Definition: measurement_update.h:36
hector_pose_estimation::Queue_::in_
size_t in_
Definition: queue.h:82
hector_pose_estimation::Queue::clear
virtual void clear()=0
hector_pose_estimation::Queue_
Definition: queue.h:53
hector_pose_estimation::Queue_::capacity
virtual size_t capacity() const
Definition: queue.h:62
hector_pose_estimation::Queue_::push
virtual void push(const MeasurementUpdate &update)
Definition: queue.h:64
hector_pose_estimation::Queue::push
virtual void push(const MeasurementUpdate &update)=0
hector_pose_estimation::Queue_::Queue_
Queue_()
Definition: queue.h:56
hector_pose_estimation::Queue::full
virtual bool full() const =0
measurement_update.h
hector_pose_estimation::Queue_::clear
virtual void clear()
Definition: queue.h:76


hector_pose_estimation_core
Author(s): Johannes Meyer
autogenerated on Wed Mar 2 2022 00:24:41