// ★コメント未記入
// BregPool.h: CBregPool クラスのインターフェイス
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_BREGPOOL_H__6EF8D474_9EF5_4F03_A5F5_A8287FBDBC8E__INCLUDED_)
#define AFX_BREGPOOL_H__6EF8D474_9EF5_4F03_A5F5_A8287FBDBC8E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "BREGEXP.H"


typedef	int (* ProcMatch)(char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg) ; 
typedef	int (* ProcSubst)(char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg) ; 
typedef	int (* ProcTrans)(char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg) ; 
typedef	int (* ProcSplit)(char* regstr,char *target,char *targetendp, int limit,BREGEXP **rxp,char *msg); 
typedef	void (* ProcFree)(BREGEXP* rx); 
typedef	char* (* ProcVersion)(void);


class CBregPool  
{
private:
	// コンストラクタ
	CBregPool();

public:
	static CBregPool*	GetInstance();

	// デストラクタ
	~CBregPool();

	// デストラクタから呼ばれるFree
	void DestroyFree();
	void Free(	BREGEXP*	rxp );

	// BREGEXPの作成
	BREGEXP* Get(char *regstr);


	BOOL LoadDll();
	BOOL FreeDll();

	BOOL	IsAlive(){ return( m_Dll != NULL ); };

	BOOL Match(
	char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg
	);
	BOOL Subst(
	char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg
	);

private:
	int m_nmax;
	BREGEXP **m_rxpool;

	HINSTANCE		m_Dll;
	ProcMatch		m_ProcMatch;
	ProcSubst		m_ProcSubst;
	ProcFree		m_ProcFree;
	ProcVersion		m_ProcVersion;
	/*
	int BMatch(char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg) ; 
	パターンマッチ処理を実行します。検索結果とカッコ()を使ったパターンを返します。 
	int BSubst(char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg) ; 
	パターンによる置換処理を実行します。置換したパターン数と置換後の文字列を返します。 
	int BTrans(char* regstr,char *target,char *targetendp, BREGEXP **rxp,char *msg) ; 
	変換処理を実行します。変換した文字数と変換後の文字列を返します。 
	int BSplit(char* regstr,char *target,char *targetendp, int limit,BREGEXP **rxp,char *msg); 
	パターンをデリミタにして文字列を分割します。 
	void BRegfree(BREGEXP* rx); 
	コンパイルブロックを開放します。 
	char* BRegexpVersion(void); 
	バージョンを返します。 
	*/	

};

#endif // !defined(AFX_BREGPOOL_H__6EF8D474_9EF5_4F03_A5F5_A8287FBDBC8E__INCLUDED_)
