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
virtual void push(const MeasurementUpdate &update)
Definition: queue.h:64
virtual void clear()
Definition: queue.h:76
virtual const MeasurementUpdate & pop()=0
static size_t inc(size_t &index)
Definition: queue.h:79
virtual size_t capacity() const =0
virtual bool empty() const =0
void update(const std::string &key, const XmlRpc::XmlRpcValue &v)
virtual bool full() const
Definition: queue.h:60
virtual size_t capacity() const
Definition: queue.h:62
static const size_t capacity_
Definition: queue.h:39
virtual bool empty() const
Definition: queue.h:59
virtual bool full() const =0
boost::array< Update, Queue::capacity_ > data_
Definition: queue.h:81
virtual size_t size() const
Definition: queue.h:61
virtual size_t size() const =0
virtual void push(const MeasurementUpdate &update)=0
virtual const Update & pop()
Definition: queue.h:70


hector_pose_estimation_core
Author(s): Johannes Meyer
autogenerated on Thu Feb 18 2021 03:29:30