Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. #include <array>
  2. #include <iostream>
  3. #include <iomanip>
  4.  
  5. namespace {
  6. template <typename T, std::size_t N>
  7. auto print_array(std::array<T, N> a) {
  8. std::cout << "array: |";
  9. for (auto const& e : a) {
  10. std::cout << std::setw(2) << e << "|";
  11. }
  12. std::cout << "\n";
  13. }
  14.  
  15. template <typename T, std::size_t N>
  16. auto mask(std::array<T, N>, T val) {
  17. return val & (N - 1);
  18. }
  19.  
  20. template <typename T, std::size_t N>
  21. auto push(std::array<T, N>& buffer, T val, uint32_t& write) {
  22. buffer[mask(buffer, write++)] = val;
  23. }
  24.  
  25. template <typename T, std::size_t N>
  26. auto shift(std::array<T, N>& buffer, T val, uint32_t& read) {
  27. return buffer[mask(buffer, read++)];
  28. }
  29.  
  30. auto empty(uint32_t read, uint32_t write) {
  31. return read == write;
  32. }
  33.  
  34. auto size(uint32_t read, uint32_t write) {
  35. return write - read;
  36. }
  37.  
  38. template <typename T, std::size_t N>
  39. auto full(std::array<T, N>, uint32_t read, uint32_t write) {
  40. return size(read, write) == N;
  41. }
  42. }
  43.  
  44. int main() {
  45. std::array<uint32_t, 4> buffer = { 0, 0, 0, 0 };
  46. uint32_t read = 1;
  47. uint32_t write = 1;
  48. print_array(buffer);
  49. for (uint32_t i = 1; i < 11; ++i) {
  50. push(buffer, i, write);
  51. print_array(buffer);
  52. std::cout << "Buffer is " << (full(buffer, read, write) ? "full" : "not full") << "\n";
  53. }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement