/////////////////////////////////////////////////////////////////////////
//                                                                     //
// This file contains the declaration and the implementation of the    //
// CRegExMatcher class.                                                //
//                                                                     //
/////////////////////////////////////////////////////////////////////////
#ifndef __CREGEXMATCHER_HPP__
#define __CREGEXMATCHER_HPP__

#include <deelx.h>
#include "CLexer.hpp"


/////////////////////////////////////////////////////////////////////////
//                                                                     //
// This class is an implementation of the ITokenMatcher interface that //
// matches strings corresponding to a given regular expression.        //
//                                                                     //
/////////////////////////////////////////////////////////////////////////
class CRegExMatcher : public CLexer::ITokenMatcher
{
public:
  CRegExMatcher(int tokenValue, const std::string& strRegEx)
    : ITokenMatcher(tokenValue) , m_regEx(strRegEx.c_str())
  {
  }
  virtual int match(const std::string& s) const
  {
    if (m_regEx.MatchExact(s.c_str()).IsMatched())
      return m_tokenValue;
    else
      return 0;
  }

private:
  CRegexp m_regEx;
};


#endif // __CREGEXMATCHER_HPP__
