/*
 * Ring BufferというFIFOを表現するヘッダファイル
 * ring_buffer.cがメインソース
 * 
 * @author fenrir (M.Naruoka)
 * @since 04/05/30
 * @version 1.0
 */

#ifndef __FIFO_CHAR_H__
#define __FIFO_CHAR_H__

#ifdef __cplusplus
extern "C"
{
#endif

#ifndef FIFO_CHAR_SIZE_T
    #define FIFO_CHAR_SIZE_T int
#endif

typedef FIFO_CHAR_SIZE_T fifo_char_size_t;

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

fifo_char_t *fifo_char_init(fifo_char_t *buffer, char *c, fifo_char_size_t size);
fifo_char_size_t fifo_char_write(fifo_char_t *buffer, char *data, fifo_char_size_t size);
fifo_char_size_t fifo_char_read(fifo_char_t *buffer, char *c, fifo_char_size_t size);
fifo_char_size_t fifo_char_size(fifo_char_t *buffer);

#ifdef __cplusplus
}
#endif

#endif /* __FIFO_CHAR_H__ */