/*
 * 数値用Ring Buffer(FIFO)のヘッダファイル
 * fifo_num.cがメインソース
 * 
 * @author fenrir (M.Naruoka)
 * @since 04/05/30
 * @version 1.0
 * @see fifo_num.c
 * @see common.h
 */

#ifndef __FIFO_NUM_H__
#define __FIFO_NUM_H__

#ifdef __cplusplus
extern "C"
{
#endif

#ifndef FIFO_NUM_SIZE_T
#define FIFO_NUM_SIZE_T int
#endif

typedef FIFO_NUM_SIZE_T fifo_num_size_t;

#ifndef FIFO_NUM_T
#define FIFO_NUM_T int
#endif

typedef FIFO_NUM_T num_t;


typedef struct{
    num_t *buffer;
    fifo_num_size_t size;
    num_t *prius;
    num_t *follower;
} fifo_num_t;
/* リングバッファルール
 * follower(追っかけ)はprius(先行者)に追いつくことはできないし、追い抜くこともできない
 * prius(先行者)はfollower(追っかけ)に追いつくことはできるが、追い抜くことはできない
 */

fifo_num_t *fifo_num_init(fifo_num_t *buffer, num_t *array, fifo_num_size_t size);
num_t *fifo_num_write(fifo_num_t *buffer, num_t data);
num_t *fifo_num_read(fifo_num_t *buffer, num_t *data);
fifo_num_size_t fifo_num_size(fifo_num_t *buffer);

#ifdef __cplusplus
};
#endif

#endif /* __FIFO_NUM_H__ */