//--------------------------------------------------------------------------------------
//
// X-BASIC' v3.00
//	バッファー制御
//		従来のチェインバッファーに替わるもの
//
//--------------------------------------------------------------------------------------

#ifndef X_BASIC_for_iOS_bufferCtrl_h
#define X_BASIC_for_iOS_bufferCtrl_h

//--------------------------------------------------------------------------------------

typedef struct {
	// 内部で設定
	void	*buffer;				// 登録バッファー
	int 	blocks;					// 確保済みブロック数(addStep分が1ブロック)
	int 	enableToAddIn1Block;	// 現在のブロック(今回の増分)での残り格納可能数
	int		cnt; 					// 登録済み要素数
	int 	maxCnt;					// 最大要素数
	// 外部で設定
	int		addStep;				// バッファー増分単位;何要素入れられるようにするか
	int		sizeOfData;				// 登録する１要素のサイズ
	BOOL	(*cmpData)(void *data1,void *data0);	// データ比較関数;YES=一致,NO=不一致を返すこと;比較対象を引数に持てないので、グローバル変数を経由して渡すこと
	void	(*printData)(void *data);	// データ表示関数
} BUFF_CTRL;

//--------------------------------------------------------------------------------------
// プロトタイプ宣言

void _initBuffer(BUFF_CTRL *ctrl,int addStep,int size1);
void _initBufferWithPrintData(BUFF_CTRL *ctrl,int addStep,int size1,void (*printData)(void *data));
void closeBuffer(BUFF_CTRL *ctrl);
void *searchValueFromBuffer(BUFF_CTRL *ctrl,void *data);
void *getValueFromBuffer(BUFF_CTRL *ctrl,int point);
BOOL getValueFromBufferByCopy(BUFF_CTRL *ctrl,int point,void *data,int size);
void *getValueAdrs(BUFF_CTRL *ctrl,int point);
void *addValueForBuffer(BUFF_CTRL *ctrl,void *data);
BOOL addValueForBufferNoRedundant(BUFF_CTRL *ctrl,void *data);
void *addValueForBufferWithSize(BUFF_CTRL *ctrl,void *data,int size);
#ifdef DEBUG
void dumpBuffer(BUFF_CTRL *ctrl,BOOL fdumpInBuffer);
#define initBuffer(ctrl,addStep,size1,print)	_initBufferWithPrintData(ctrl,addStep,size1,print)
#else
#define dumpBuffer(ctrl,fdumpInBuffer)	// 消す
#define initBuffer(ctrl,addStep,size1,print)	_initBuffer(ctrl,addStep,size1)
#endif

//--------------------------------------------------------------------------------------

#endif
