OpenCores
URL https://opencores.org/ocsvn/riscv_vhdl/riscv_vhdl/trunk

Subversion Repositories riscv_vhdl

[/] [riscv_vhdl/] [trunk/] [debugger/] [src/] [socsim_plugin/] [fifo.h] - Rev 2

Go to most recent revision | Compare with Previous | Blame | View Log

/**
 * @file
 * @copyright  Copyright 2016 GNSS Sensor Ltd. All right reserved.
 * @author     Sergey Khabarov - sergeykhbr@gmail.com
 * @brief	   FIFO implementation.
 */
 
#ifndef __DEBUGGER_FIFO_H__
#define __DEBUGGER_FIFO_H__
 
#include <inttypes.h>
 
namespace debugger {
 
template<class T> class TFifo {
public:
    TFifo(int sz) {
        arr_ = new T[size_ = sz];
        prd_ = &arr_[0];
        pwr_ = &arr_[1];
    }
    ~TFifo() {
        delete [] arr_;
    }
    bool isFull() {
        return pwr_ == prd_;
    }
    bool isEmpty() {
        if (pwr_ == (prd_ + 1)) {
            return true;
        }
        if ((prd_ - pwr_ + 1) == size_) {
            return true;
        }
        return false;
    }
    void get(T *out) {
        if (isEmpty()) {
            return;
        }
        if (prd_ >= &arr_[size_ - 1]) {
            *out = arr_[0];
            prd_ = arr_;
        } else {
            *out = prd_[1];
            prd_++;
        }
    }
    void put(T *in) {
        if (isFull()) {
            return;
        }
        *pwr_ = *in;
        if (pwr_ >= &arr_[size_ - 1]) {
            pwr_ = arr_;
        } else {
            pwr_++;
        }
    }
private:
    T *arr_;
    T *prd_;
    T *pwr_;
    int size_;
};
 
}  // namespace debugger
 
#endif  // __DEBUGGER_FIFO_H__
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.