Buffer.h
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 


rosserial_mbed
Author(s): Gary Servin
autogenerated on Sat Oct 7 2017 03:08:46