// MatchFinders/IMatchFinder.h

#ifndef __IMATCHFINDER_H
#define __IMATCHFINDER_H

struct IInWindowStream: public IUnknown
{
  STDMETHOD(SetStream)(ISequentialInStream *inStream) PURE;
  STDMETHOD_(void, ReleaseStream)() PURE;
  STDMETHOD(Init)() PURE;
  STDMETHOD_(Byte, GetIndexByte)(Int32 index) PURE;
  STDMETHOD_(UInt32, GetMatchLen)(Int32 index, UInt32 distance, UInt32 limit) PURE;
  STDMETHOD_(UInt32, GetNumAvailableBytes)() PURE;
  STDMETHOD_(const Byte *, GetPointerToCurrentPos)() PURE;
  STDMETHOD_(Int32, NeedChangeBufferPos)(UInt32 numCheckBytes) PURE;
  STDMETHOD_(void, ChangeBufferPos)() PURE;
};

struct IMatchFinder: public IInWindowStream
{
  STDMETHOD(Create)(UInt32 historySize, UInt32 keepAddBufferBefore,
      UInt32 matchMaxLen, UInt32 keepAddBufferAfter) PURE;
  STDMETHOD(GetMatches)(UInt32 *distances) PURE;
  STDMETHOD(Skip)(UInt32 num) PURE;
};

struct IMatchFinderSetNumPasses
{
  //virtual ~IMatchFinderSetNumPasses(){}
  virtual void SetNumPasses(UInt32 numPasses) PURE;
};

#endif
