示例#1
0
rc_t AgrepDPMake( DPParams **self, AgrepFlags mode, const char *pattern )
{
    rc_t rc = 0;

    if( (*self = malloc(sizeof(**self))) == NULL ) {
        rc = RC(rcText, rcString, rcSearching, rcMemory, rcExhausted);
    } else {
        int32_t i;
        (*self)->mode = mode;
        (*self)->pattern = strdup(pattern);
        (*self)->plen = strlen(pattern);
        (*self)->rpattern = malloc((*self)->plen + 1);
        if( (*self)->pattern == NULL || (*self)->pattern == NULL ) {
            rc = RC(rcText, rcString, rcSearching, rcMemory, rcExhausted);
        } else if( mode & AGREP_MODE_ASCII ) {
            if( mode & AGREP_IGNORE_CASE ) {
                for(i = 0; i < (*self)->plen; i++) {
                    (*self)->pattern[i] = tolower((*self)->pattern[i]);
                }
            }
        }
    }
    if( rc != 0 ) {
        AgrepDPFree(*self);
    } else {
        reverse_string((*self)->pattern, (*self)->plen, (*self)->rpattern);
    }
    return rc;
}
示例#2
0
LIB_EXPORT void CC AgrepWhack( AgrepParams *self )
{
    if( self != NULL ) {
        if( self->wu ) {
            AgrepWuFree(self->wu);
        }
        if( self->myers ) {
            AgrepMyersFree(self->myers);
        }
        if( self->myersunltd ) {
            MyersUnlimitedFree(self->myersunltd);
        }
        if( self->dp ) {
            AgrepDPFree(self->dp);
        }
        free(self);
    }
}