On 4/3/08 11:38 AM, "William A. Rowe, Jr." <[EMAIL PROTECTED]> wrote:
>> <If HTTP_Method == GET>
>> ...
>> </If>
>
> Slooooooooooooooooooooow
Not if the parsing is done at config time and HTTP_Method is handle by a
provider. Some pseudo code:
At config time, the parser would do something like:
parse_provider *prov;
void *data;
prov = ap_lookup_provider("config_parse", "HTTP_Method", "0.1");
data = prov->init(conf_pool, "HTTP_Method", TOKEN_EQUAL, "GET")
/*the provider may do something like*/
typedef struct {
parse_token token;
int method_number;
} method_data;
void *method_init(apr_pool_t *pool, const char *key, parse_token token,
const char *arg) {
method_data *data = apr_pcalloc(pool, sizeof(method_data));
data->token = token; /*need to check if we only handle === or something
*/
if(strcacecmp(arg, "GET")) {
data->method_number = M_GET;
}
return data;
/*the parser stores this data with the node*/
At run time, then when running this node from the cached parse tree, it may
call something like:
node->prov->exec(r, nod->data)
/*the provider runs something like*/
int method_exec(reuqest_rec *r, method_data *data) {
if(data->method_number == r->method_number)
return 1;
return 0;
}
Very rough draft. But this is not necessarily slooooow... ;)
--
Brian Akins
Chief Operations Engineer
Turner Digital Media Technologies