ECE 4180 - Final Project Team / Mbed 2 deprecated WalkieTalkie

Dependencies:   mbed 4DGL-uLCD-SE mbed-rtos nRF24L01P

CircularBuf.cpp

Committer:
Nurchu
Date:
2018-04-20
Revision:
17:604f9c4bd6d3
Parent:
16:d0d3bb2fc3ce
Child:
20:e068469ffb89

File content as of revision 17:604f9c4bd6d3:

#include "CircularBuf.h"

template <class T>
CircularBuf::CircularBuf(unsigned int size) : _size(size) {
    _data = new T[size];
}

template <class T>
CircularBuf::~CircularBuf() {
    delete _data;
}

template <class T>
unsigned int CircularBuf::push(T* data, unsigned int size) {
    unsigned int cnt = 0;
    
    for (int i = 0; i < size; i++) {
        unsigned int next = _head + 1;
        
        if (next >= _size)
            next = 0;
            
        if (next == _tail)
            return cnt;
            
        _data[next] = data[cnt];
        _head = next;
        cnt++;
    }
    
    return cnt;
}

template <class T>
unsigned int CircularBuf::pop(T* data, unsigned int size) {
    unsigned int cnt = 0;
    
    for (int i = 0; i < size; i++) {
        unsigned int next = _tail + 1;
        
        if (next >= size)
            next = 0;
            
        if (next == _head)
            return cnt;
            
        data[cnt] = _data[next];
        _tail = next;
        cnt++;
    }
    
    return cnt;
}

template <class T>
unsigned int CircularBuf::size() {
    int s = _head - _tail;
    
    // If buffer overlaps end
    if (s < 0)
        s += _size;
        
    return s;
}

template <class T>
void CircularBuf::clear() {
    _head = 0;
    _tail = 0;
}