#ifndef HEXSEARCH_H
#define HEXSEARCH_H
#include <vector>
#include "Core.h" //for some reason process.h needs core
#include "MemAccess.h"

//(not yet)implemented using Boyer-Moore algorithm

class Hexsearch
{
public:
	typedef std::vector<int> SearchArgType;
	enum SearchConst  //TODO add more
	{
		ANYBYTE=0x101,DWORD_,ANYDWORD,ADDRESS
	};

	Hexsearch(const SearchArgType &args,char * startpos,char * endpos);
	~Hexsearch();

	void Reset(){pos_=startpos_;};
	void SetStart(char * pos){pos_=pos;};

	void * FindNext();
	std::vector<void *> FindAll();
	
private:
	bool Compare(int a,int b);
	void ReparseArgs();
	SearchArgType args_;
	char * pos_,* startpos_,* endpos_;
	std::vector<int> BadCharShifts,GoodSuffixShift;
	void PrepareGoodSuffixTable();
	void PrepareBadCharShift();
};

#endif