Add code to de-register patterns.
This commit is contained in:
parent
3b72569b33
commit
945426e245
|
@ -114,6 +114,15 @@ liblex_result eval_config_free(eval_config* config);
|
|||
* @return LIBLEX_SUCCESS if all goes well, or LIBLEX_MALLOC if there was an allocation failure.
|
||||
*/
|
||||
liblex_result eval_config_add(eval_config* config, const char* pattern, int pattern_id);
|
||||
/**
|
||||
* Removes a pattern from this configuration that has been previously
|
||||
* registered.
|
||||
* @param config the configuration to add the pattern to.
|
||||
* @param pattern the pattern to remove.
|
||||
* @param pattern_id the id associated with the pattern.
|
||||
* @return LIBLEX_SUCCESS if all goes well, or LIBLEX_MALLOC if there was an allocation failure.
|
||||
*/
|
||||
liblex_result eval_config_remove(eval_config* config, const char* pattern, int pattern_id);
|
||||
/**
|
||||
* Evaluates / finds a single word.
|
||||
* @param string the string to evaluate.
|
||||
|
|
26
src/eval.c
26
src/eval.c
|
@ -41,14 +41,34 @@ liblex_result eval_config_add(eval_config* config, const char* ptrn, int pattern
|
|||
return result;
|
||||
}
|
||||
|
||||
int _eval_config_foreach_free(void *data, va_list args){
|
||||
eval_state* state = data;
|
||||
int result = pattern_free(state->pattern) == LIBLEX_SUCCESS ? 0 : EVAL_FOREACH_MALLOC;
|
||||
liblex_result _eval_config_free_state(eval_state* state) {
|
||||
liblex_result result = pattern_free(state->pattern);
|
||||
free(state->pattern);
|
||||
free(state);
|
||||
return result;
|
||||
}
|
||||
|
||||
liblex_result eval_config_remove(eval_config* config, const char* pattern, int pattern_id) {
|
||||
liblex_result result = LIBLEX_SUCCESS;
|
||||
ll_node** head = &(config->states.head);
|
||||
while(*head && result == LIBLEX_SUCCESS) {
|
||||
eval_state* current_state = (*head)->data;
|
||||
if(strcmp(current_state->source, pattern) == 0 && current_state->pattern->head->pattern_id == pattern_id) {
|
||||
ll_node* to_delete = *head;
|
||||
(*head) = (*head)->next;
|
||||
free(to_delete);
|
||||
result = _eval_config_free_state(current_state);
|
||||
} else {
|
||||
head = &((*head)->next);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
int _eval_config_foreach_free(void* data, va_list args){
|
||||
return _eval_config_free_state(data) == LIBLEX_SUCCESS ? 0 : EVAL_FOREACH_MALLOC;
|
||||
}
|
||||
|
||||
liblex_result eval_config_free(eval_config* config){
|
||||
liblex_result result = foreach_errors[ll_foreach(&config->states, NULL, compare_always, _eval_config_foreach_free)];
|
||||
ll_free(&config->states);
|
||||
|
|
Loading…
Reference in New Issue
Block a user