00001 /* Copyright 2002-2005 The Apache Software Foundation or its licensors, as 00002 * applicable. 00003 * 00004 * Licensed under the Apache License, Version 2.0 (the "License"); 00005 * you may not use this file except in compliance with the License. 00006 * You may obtain a copy of the License at 00007 * 00008 * http://www.apache.org/licenses/LICENSE-2.0 00009 * 00010 * Unless required by applicable law or agreed to in writing, software 00011 * distributed under the License is distributed on an "AS IS" BASIS, 00012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00013 * See the License for the specific language governing permissions and 00014 * limitations under the License. 00015 */ 00016 00017 #ifndef APR_STRMATCH_H 00018 #define APR_STRMATCH_H 00019 /** 00020 * @file apr_strmatch.h 00021 * @brief APR-UTIL string matching routines 00022 */ 00023 00024 #include "apu.h" 00025 #include "apr_pools.h" 00026 00027 #ifdef __cplusplus 00028 extern "C" { 00029 #endif 00030 00031 /** 00032 * @defgroup APR_Util_StrMatch String matching routines 00033 * @ingroup APR_Util 00034 * @{ 00035 */ 00036 00037 /** @see apr_strmatch_pattern */ 00038 typedef struct apr_strmatch_pattern apr_strmatch_pattern; 00039 00040 /** 00041 * Precompiled search pattern 00042 */ 00043 struct apr_strmatch_pattern { 00044 /** Function called to compare */ 00045 const char *(*compare)(const apr_strmatch_pattern *this_pattern, 00046 const char *s, apr_size_t slen); 00047 const char *pattern; /**< Current pattern */ 00048 apr_size_t length; /**< Current length */ 00049 void *context; /**< hook to add precomputed metadata */ 00050 }; 00051 00052 #if defined(DOXYGEN) 00053 /** 00054 * Search for a precompiled pattern within a string 00055 * @param pattern The pattern 00056 * @param s The string in which to search for the pattern 00057 * @param slen The length of s (excluding null terminator) 00058 * @return A pointer to the first instance of the pattern in s, or 00059 * NULL if not found 00060 */ 00061 APU_DECLARE(const char *) apr_strmatch(const apr_strmatch_pattern *pattern, 00062 const char *s, apr_size_t slen); 00063 #else 00064 #define apr_strmatch(pattern, s, slen) (*((pattern)->compare))((pattern), (s), (slen)) 00065 #endif 00066 00067 /** 00068 * Precompile a pattern for matching using the Boyer-Moore-Horspool algorithm 00069 * @param p The pool from which to allocate the pattern 00070 * @param s The pattern string 00071 * @param case_sensitive Whether the matching should be case-sensitive 00072 * @return a pointer to the compiled pattern, or NULL if compilation fails 00073 */ 00074 APU_DECLARE(const apr_strmatch_pattern *) apr_strmatch_precompile(apr_pool_t *p, const char *s, int case_sensitive); 00075 00076 /** @} */ 00077 #ifdef __cplusplus 00078 } 00079 #endif 00080 00081 #endif /* !APR_STRMATCH_H */