Go to the documentation of this file.00001
00024 #ifndef BUFFER_H
00025 #define BUFFER_H
00026
00027 #include <stdint.h>
00028 #include <string.h>
00029
00060 template <typename T>
00061 class Buffer
00062 {
00063 private:
00064 T *_buf;
00065 volatile uint32_t _wloc;
00066 volatile uint32_t _rloc;
00067 uint32_t _size;
00068
00069 public:
00073 Buffer(uint32_t size = 0x100);
00074
00078 uint32_t getSize();
00079
00082 ~Buffer();
00083
00087 void put(T data);
00088
00092 T get(void);
00093
00097 T *head(void);
00098
00101 void clear(void);
00102
00106 uint32_t available(void);
00107
00112 Buffer &operator= (T data)
00113 {
00114 put(data);
00115 return *this;
00116 }
00117
00121 operator int(void)
00122 {
00123 return get();
00124 }
00125
00126 uint32_t peek(char c);
00127
00128 };
00129
00130 template <class T>
00131 inline void Buffer<T>::put(T data)
00132 {
00133 _buf[_wloc++] = data;
00134 _wloc %= (_size-1);
00135
00136 return;
00137 }
00138
00139 template <class T>
00140 inline T Buffer<T>::get(void)
00141 {
00142 T data_pos = _buf[_rloc++];
00143 _rloc %= (_size-1);
00144
00145 return data_pos;
00146 }
00147
00148 template <class T>
00149 inline T *Buffer<T>::head(void)
00150 {
00151 T *data_pos = &_buf[0];
00152
00153 return data_pos;
00154 }
00155
00156 template <class T>
00157 inline uint32_t Buffer<T>::available(void)
00158 {
00159 return (_wloc == _rloc) ? 0 : 1;
00160 }
00161
00162 #endif
00163