// This file is part of AspectC++.
// Copyright (C) 1999-2015  The AspectC++ developer team.
//                                                                
// This program is free software;  you can redistribute it and/or 
// modify it under the terms of the GNU General Public License as 
// published by the Free Software Foundation; either version 2 of 
// the License, or (at your option) any later version.            
//                                                                
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
// GNU General Public License for more details.                   
//                                                                
// You should have received a copy of the GNU General Public      
// License along with this program; if not, write to the Free     
// Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, 
// MA  02111-1307  USA                                            

#include "RegComp.h"

namespace ACBase {

// Constructors
RegComp::RegComp(const std::string &expr) : regex_(expr) {
}

RegComp::RegComp(const RegComp &rc) : regex_(rc.regex_) {
}

RegComp &RegComp::operator =(const RegComp &rc) {
  error_msg_.clear();
  regex_ = rc.regex_;
  return *this;
}

// Match against a string.
bool RegComp::match(const std::string &str) {

  bool res;
  try {
    std::smatch match;
    res = std::regex_match(str, match, regex_);
  } catch(std::regex_error &e) {
    error_msg_ = e.what();
    error_msg_ += std::string("; matched '") + str + "' with regex";
    return false;
  }
  return res;
}

// To be called on errors.
void RegComp::comperror(ErrorStream &err) const {
  if (error())
    err << sev_error << "RegComp: " << error_msg_.c_str() << endMessage;
}

} // namespace ACBase
