template<class kind> HeapRing<kind>::HeapRing()
{
head_i = tail_i = length = 0;
+ isr_tail_i = tail_i;
ring = NULL;
}
template<class kind> HeapRing<kind>::HeapRing(unsigned int length)
{
head_i = tail_i = 0;
+ isr_tail_i = tail_i;
ring = new kind[length];
// TODO: handle allocation failure
this->length = length;
template<class kind> HeapRing<kind>::~HeapRing()
{
head_i = tail_i = length = 0;
+ isr_tail_i = tail_i;
if (ring)
delete [] ring;
ring = NULL;
* index accessors (protected)
*/
-template<class kind> unsigned int HeapRing<kind>::next(unsigned int item)
+template<class kind> unsigned int HeapRing<kind>::next(unsigned int item) const
{
if (length == 0)
return 0;
return item;
}
-template<class kind> unsigned int HeapRing<kind>::prev(unsigned int item)
+template<class kind> unsigned int HeapRing<kind>::prev(unsigned int item) const
{
if (length == 0)
return 0;
template<class kind> void HeapRing<kind>::produce_head()
{
+ while (is_full());
head_i = next(head_i);
}
template<class kind> void HeapRing<kind>::consume_tail()
{
- tail_i = next(tail_i);
+ if (!is_empty())
+ tail_i = next(tail_i);
}
/*
* queue status accessors
*/
-template<class kind> bool HeapRing<kind>::is_full()
+template<class kind> bool HeapRing<kind>::is_full() const
{
- return (next(head_i) == tail_i);
+ //__disable_irq();
+ bool r = (next(head_i) == tail_i);
+ //__enable_irq();
+
+ return r;
}
-template<class kind> bool HeapRing<kind>::is_empty()
+template<class kind> bool HeapRing<kind>::is_empty() const
{
- return (head_i == tail_i);
+ //__disable_irq();
+ bool r = (head_i == tail_i);
+ //__enable_irq();
+
+ return r;
}
/*