Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Smoothie by
libs/HeapRing.h@2:1df0b61d3b5a, 2014-02-28 (annotated)
- Committer:
- Michael J. Spencer
- Date:
- Fri Feb 28 18:52:52 2014 -0800
- Revision:
- 2:1df0b61d3b5a
Update to latest Smoothie.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Michael J. Spencer |
2:1df0b61d3b5a | 1 | #ifndef _HEAPRING_H |
| Michael J. Spencer |
2:1df0b61d3b5a | 2 | #define _HEAPRING_H |
| Michael J. Spencer |
2:1df0b61d3b5a | 3 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 4 | template<class kind> class HeapRing { |
| Michael J. Spencer |
2:1df0b61d3b5a | 5 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 6 | // smoothie-specific friend classes |
| Michael J. Spencer |
2:1df0b61d3b5a | 7 | friend class Planner; |
| Michael J. Spencer |
2:1df0b61d3b5a | 8 | friend class Conveyor; |
| Michael J. Spencer |
2:1df0b61d3b5a | 9 | friend class Block; |
| Michael J. Spencer |
2:1df0b61d3b5a | 10 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 11 | public: |
| Michael J. Spencer |
2:1df0b61d3b5a | 12 | HeapRing(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 13 | HeapRing(unsigned int length); |
| Michael J. Spencer |
2:1df0b61d3b5a | 14 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 15 | ~HeapRing(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 16 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 17 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 18 | * direct accessors |
| Michael J. Spencer |
2:1df0b61d3b5a | 19 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 20 | kind& head(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 21 | kind& tail(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 22 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 23 | void push_front(kind&) __attribute__ ((warning("Not thread-safe if pop_back() is used in ISR context!"))); // instead, prepare(head_ref()); produce_head(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 24 | kind& pop_back(void) __attribute__ ((warning("Not thread-safe if head_ref() is used to prepare new items, or push_front() is used in ISR context!"))); // instead, consume(tail_ref()); consume_tail(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 25 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 26 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 27 | * pointer accessors |
| Michael J. Spencer |
2:1df0b61d3b5a | 28 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 29 | kind* head_ref(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 30 | kind* tail_ref(); |
| Michael J. Spencer |
2:1df0b61d3b5a | 31 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 32 | void produce_head(void); |
| Michael J. Spencer |
2:1df0b61d3b5a | 33 | void consume_tail(void); |
| Michael J. Spencer |
2:1df0b61d3b5a | 34 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 35 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 36 | * queue status |
| Michael J. Spencer |
2:1df0b61d3b5a | 37 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 38 | bool is_empty(void); |
| Michael J. Spencer |
2:1df0b61d3b5a | 39 | bool is_full(void); |
| Michael J. Spencer |
2:1df0b61d3b5a | 40 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 41 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 42 | * resize |
| Michael J. Spencer |
2:1df0b61d3b5a | 43 | * |
| Michael J. Spencer |
2:1df0b61d3b5a | 44 | * returns true on success, or false if queue is not empty or not enough memory available |
| Michael J. Spencer |
2:1df0b61d3b5a | 45 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 46 | bool resize(unsigned int); |
| Michael J. Spencer |
2:1df0b61d3b5a | 47 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 48 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 49 | * provide |
| Michael J. Spencer |
2:1df0b61d3b5a | 50 | * kind* - new buffer pointer |
| Michael J. Spencer |
2:1df0b61d3b5a | 51 | * int length - number of items in buffer (NOT size in bytes!) |
| Michael J. Spencer |
2:1df0b61d3b5a | 52 | * |
| Michael J. Spencer |
2:1df0b61d3b5a | 53 | * cause HeapRing to use a specific memory location instead of allocating its own |
| Michael J. Spencer |
2:1df0b61d3b5a | 54 | * |
| Michael J. Spencer |
2:1df0b61d3b5a | 55 | * returns true on success, or false if queue is not empty |
| Michael J. Spencer |
2:1df0b61d3b5a | 56 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 57 | bool provide(kind*, unsigned int length); |
| Michael J. Spencer |
2:1df0b61d3b5a | 58 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 59 | protected: |
| Michael J. Spencer |
2:1df0b61d3b5a | 60 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 61 | * these functions are protected as they should only be used internally |
| Michael J. Spencer |
2:1df0b61d3b5a | 62 | * or in extremely specific circumstances |
| Michael J. Spencer |
2:1df0b61d3b5a | 63 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 64 | kind& item(unsigned int); |
| Michael J. Spencer |
2:1df0b61d3b5a | 65 | kind* item_ref(unsigned int); |
| Michael J. Spencer |
2:1df0b61d3b5a | 66 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 67 | unsigned int next(unsigned int); |
| Michael J. Spencer |
2:1df0b61d3b5a | 68 | unsigned int prev(unsigned int); |
| Michael J. Spencer |
2:1df0b61d3b5a | 69 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 70 | /* |
| Michael J. Spencer |
2:1df0b61d3b5a | 71 | * buffer variables |
| Michael J. Spencer |
2:1df0b61d3b5a | 72 | */ |
| Michael J. Spencer |
2:1df0b61d3b5a | 73 | unsigned int length; |
| Michael J. Spencer |
2:1df0b61d3b5a | 74 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 75 | volatile unsigned int head_i; |
| Michael J. Spencer |
2:1df0b61d3b5a | 76 | volatile unsigned int tail_i; |
| Michael J. Spencer |
2:1df0b61d3b5a | 77 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 78 | private: |
| Michael J. Spencer |
2:1df0b61d3b5a | 79 | kind* ring; |
| Michael J. Spencer |
2:1df0b61d3b5a | 80 | }; |
| Michael J. Spencer |
2:1df0b61d3b5a | 81 | |
| Michael J. Spencer |
2:1df0b61d3b5a | 82 | #endif /* _HEAPRING_H */ |
