# portability/wildcard.hpp

    #ifndef STLPLUS_WILDCARD
    #define STLPLUS_WILDCARD
    ////////////////////////////////////////////////////////////////////////////////

    //   Author:    Andy Rushton
    //   Copyright: (c) Southampton University 1999-2004
    //              (c) Andy Rushton           2004 onwards
    //   License:   BSD License, see ../docs/license.html

    //   This is a portable interface to wildcard matching.

    //   The problem:
    //     *  matches any number of characters - this is achieved by matching 1 and seeing if the remainder matches
    //        if not, try 2 characters and see if the remainder matches etc.
    //        this must be recursive, not iterative, so that multiple *s can appear in the same wildcard expression
    //     ?  matches exactly one character so doesn't need the what-if approach
    //     \  escapes special characters such as *, ? and [
    //     [] matches exactly one character in the set - the difficulty is the set can contain ranges, e.g [a-zA-Z0-9]
    //        a set cannot be empty and the ] character can be included by making it the first character

    ////////////////////////////////////////////////////////////////////////////////
    #include "portability_fixes.hpp"
    #include <string>

    namespace stlplus
    {

      // wild = the wildcard expression
      // match = the string to test against that expression
      // e.g. wildcard("[a-f]*", "fred") returns true
      bool wildcard(const std::string& wild, const std::string& match);

    }

    #endif