// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_URL_MATCHER_STRING_PATTERN_H_
#define COMPONENTS_URL_MATCHER_STRING_PATTERN_H_

#include <string>
#include <vector>

#include "base/basictypes.h"
#include "components/url_matcher/url_matcher_export.h"

namespace url_matcher {

// An individual pattern of a substring or regex matcher. A pattern consists of
// a string (interpreted as individual bytes, no character encoding) and an
// identifier.
// IDs are returned to the caller of SubstringSetMatcher::Match() or
// RegexMatcher::MatchURL() to help the caller to figure out what
// patterns matched a string. All patterns registered to a matcher
// need to contain unique IDs.
class URL_MATCHER_EXPORT StringPattern {
 public:
  typedef int ID;

  StringPattern(const std::string& pattern, ID id);
  ~StringPattern();
  const std::string& pattern() const { return pattern_; }
  ID id() const { return id_; }

  bool operator<(const StringPattern& rhs) const;

 private:
  std::string pattern_;
  ID id_;

  DISALLOW_COPY_AND_ASSIGN(StringPattern);
};

}  // namespace url_matcher

#endif  // COMPONENTS_URL_MATCHER_STRING_PATTERN_H_
