コード例 #1
0
ファイル: regex.c プロジェクト: AlexanderC/saffire
/**
 * Saffire method: match a string against (compiled) regex
 */
SAFFIRE_METHOD(regex, match) {
    t_string_object *str;
    int ovector[OVECCOUNT];
    int rc;

    // Parse the arguments
    if (! object_parse_arguments(SAFFIRE_METHOD_ARGS, "s", &str)) {
        saffire_warning("Error while parsing argument list\n");
        RETURN_NUMERICAL(0);
    }

    // Convert to utf8 and execute regex
    rc = pcre_exec(self->regex, 0, str->value, strlen(str->value), 0, 0, ovector, OVECCOUNT);

    // Check result
    if (rc < 0) {
        switch (rc) {
            case PCRE_ERROR_NOMATCH:
                saffire_warning("String didn't match.\n");
                break;
            default :
                saffire_warning("Error while matching: %d\n", rc);
                break;
        }
    }

    // Display result
    for (int i=0; i<rc; i++) {
        DEBUG_PRINT("%2d: %.*s\n", i, ovector[2*i+1] - ovector[2*i], str->value + ovector[2*i]);
    }

    // Return number of matches
    RETURN_NUMERICAL(rc);
}
コード例 #2
0
ファイル: hash.c プロジェクト: AlexanderC/saffire
/**
 * Saffire method:
 */
SAFFIRE_METHOD(hash, add) {
    t_string_object *key, *val;

    if (! object_parse_arguments(SAFFIRE_METHOD_ARGS, "ss", &key, &val)) {
        saffire_warning("Error while parsing argument list\n");
        RETURN_NUMERICAL(0);
    }

    ht_add(self->ht, key->value, val->value);
    RETURN_SELF;
}
コード例 #3
0
ファイル: hash.c プロジェクト: AlexanderC/saffire
/**
 * Saffire method:
 */
SAFFIRE_METHOD(hash, remove) {
    t_string_object *key;

    if (! object_parse_arguments(SAFFIRE_METHOD_ARGS, "s", &key)) {
        saffire_warning("Error while parsing argument list\n");
        RETURN_NUMERICAL(0);
    }

    ht_remove(self->ht, key->value);
    RETURN_SELF;
}
コード例 #4
0
ファイル: hash.c プロジェクト: AlexanderC/saffire
/**
  * Saffire method: Returns object stored at "key" inside the hash (or NULL when not found)
  */
SAFFIRE_METHOD(hash, find) {
    t_string_object *key;

    if (! object_parse_arguments(SAFFIRE_METHOD_ARGS, "s", &key)) {
        saffire_warning("Error while parsing argument list\n");
        RETURN_NUMERICAL(0);
    }

    t_object *obj = ht_find(self->ht, key->value);
    if (obj == NULL) RETURN_NULL;
    RETURN_OBJECT(obj);
}
コード例 #5
0
ファイル: numerical.c プロジェクト: flijten/saffire
SAFFIRE_OPERATOR_METHOD(numerical, sr) {
    t_numerical_object *self = (t_numerical_object *)_self;
    t_numerical_object *other;

    // Parse the arguments
    if (! object_parse_arguments(SAFFIRE_METHOD_ARGS, "n", &other)) {
        saffire_warning("Error while parsing argument list\n");
        RETURN_NUMERICAL(0);
    }

    if (in_place) {
        DEBUG_PRINT("Add to self\n");
        self->value >>= other->value;
        RETURN_SELF;
    }

    t_object *obj = object_new(Object_Numerical, self->value >> other->value);
    RETURN_OBJECT(obj);
}
コード例 #6
0
ファイル: regex.c プロジェクト: flijten/saffire
SAFFIRE_METHOD(regex, conv_numerical) {
    RETURN_NUMERICAL(0);
}
コード例 #7
0
ファイル: null.c プロジェクト: AlexanderC/saffire
SAFFIRE_METHOD(null, conv_numerical) {
    RETURN_NUMERICAL(0);
}
コード例 #8
0
ファイル: hash.c プロジェクト: AlexanderC/saffire
/**
 * Saffire method: Returns the number of elements stored inside the hash
 */
SAFFIRE_METHOD(hash, length) {
    RETURN_NUMERICAL(self->ht->element_count);
}
コード例 #9
0
ファイル: hash.c プロジェクト: AlexanderC/saffire
SAFFIRE_METHOD(hash, conv_numerical) {
    RETURN_NUMERICAL(self->ht->element_count);
}