5 * th9x - http://code.google.com/p/th9x
6 * er9x - http://code.google.com/p/er9x
7 * gruvin9x - http://code.google.com/p/gruvin9x
9 * License GPLv2: http://www.gnu.org/licenses/gpl-2.0.html
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License version 2 as
13 * published by the Free Software Foundation.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
24 template <class T
, int N
>
27 static_assert((N
> 1) & !(N
& (N
- 1)), "Fifo size must be a power of two!");
43 uint32_t next
= (widx
+1) & (N
-1);
57 ridx
= (ridx
+1) & (N
-1);
64 return (ridx
== widx
);
69 uint32_t next
= (widx
+1) & (N
-1);
70 return (next
== ridx
);
75 while (!isEmpty()) {};
80 return (N
+ widx
- ridx
) & (N
-1);
83 uint32_t hasSpace(uint32_t n
) const
85 return (N
> (size() + n
));
88 bool probe(T
& element
) const
101 volatile uint32_t widx
;
102 volatile uint32_t ridx
;