pwm period is now 200us instead of the default 20ms veml6040 config is now AF_BIT | TRIG_BIT

Dependencies:   mbed MMA8451Q USBDevice WakeUp vt100

Fork of afero_node_suntory_2017_06_15 by Orefatoi

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers USQueue.hpp Source File

USQueue.hpp

00001 #ifndef _ULTRA_SIMPLE_QUEUE_
00002 #define _ULTRA_SIMPLE_QUEUE_
00003 
00004 //#include <string.h>
00005 
00006 template<typename T> class USQueue
00007 {
00008     public: enum QSIZE
00009     {
00010         QSIZE_8 = 8,
00011         QSIZE_16 = 16,
00012         QSIZE_32 = 32,
00013         QSIZE_64 = 64
00014     };
00015     private: T *q;
00016     private: unsigned char eqi;
00017     private: unsigned char dqi;
00018     private: T init_val;
00019     private: QSIZE _size;
00020     public: USQueue(T init_val, QSIZE _size = QSIZE_64) : eqi(0), dqi(0)
00021     {
00022         q = new T[_size];
00023         for(unsigned int i=0; i<_size; ++i)
00024         {
00025             q[i] = init_val;
00026         };
00027         this->init_val = init_val;
00028         this->_size = _size;
00029     }
00030     public: ~USQueue()
00031     {
00032         delete[] q;
00033         q = NULL;
00034     }
00035     public: inline void enq(T t)
00036     {
00037         q[eqi] = t;
00038         ++eqi;
00039         eqi = eqi&(_size-1);
00040     }
00041     private: inline T _deq()
00042     {
00043         T r = q[dqi];
00044         q[dqi] = init_val;
00045         ++dqi;
00046         dqi = dqi&(_size-1);
00047         return r;
00048     }
00049     public: inline T deq()
00050     {
00051         T ret = init_val;
00052         for(unsigned int i=0; i<_size; ++i)
00053         {
00054             if( (ret = _deq()) != init_val )
00055             {
00056                 break;
00057             }
00058         }
00059         return ret;
00060     }
00061     public: inline T pkq(T unavailable)
00062     {
00063         T ret = unavailable;
00064         unsigned char _dqi = dqi;
00065         for(unsigned int i=0; i<_size; ++i)
00066         {
00067             T tmp = q[_dqi];
00068             if( tmp != init_val )
00069             {
00070                 ret = tmp;
00071                 break;
00072             }
00073             ++_dqi;
00074             _dqi = _dqi&(_size-1);
00075         }
00076         return ret;
00077     }
00078     public: size_t size()
00079     {
00080         return _size;
00081     }
00082 };
00083 
00084 #endif //_ULTRA_SIMPLE_QUEUE_