bool
sml_fuzzy_remove_variable(struct sml_fuzzy *fuzzy, struct sml_variable *variable)
{
    fl::Variable *fl_var = (fl::Variable*) variable;
    fl::Variable *removed_var = NULL;
    fl::Engine *engine = (fl::Engine*)fuzzy->engine;
    uint16_t index;
    bool ret = true;

    if (_find_variable((std::vector<fl::Variable*> *) fuzzy->input_list,
                fl_var, &index)) {
        removed_var = engine->removeInputVariable(index);
        fuzzy->input_terms_count -= removed_var->numberOfTerms();
        if (sol_vector_del(&fuzzy->input_terms_width, index))
            ret = false;
    } else if (_find_variable((std::vector<fl::Variable*> *)
               fuzzy->output_list, fl_var, &index)) {
        removed_var = engine->removeOutputVariable(index);
        fuzzy->output_terms_count -= removed_var->numberOfTerms();
        if (sol_vector_del(&fuzzy->output_terms_width, index))
            ret = false;
    } else {
        sml_critical("Variable is not a valid input or output");
        return false;
    }

    delete removed_var;
    return ret;
}
Ejemplo n.º 2
0
void
sml_matrix_remove_col(struct sml_matrix *m, uint16_t line_num, uint16_t col_num)
{
    struct sol_vector *line;

    line = sol_vector_get(&m->data, line_num);
    if (!line)
        return;

    sol_vector_del(line, col_num);
}
Ejemplo n.º 3
0
void
sml_matrix_remove_line(struct sml_matrix *m, uint16_t line_num)
{
    struct sol_vector *line;

    line = sol_vector_get(&m->data, line_num);
    if (!line)
        return;

    sol_vector_clear(line);
    sol_vector_del(&m->data, line_num);
}
Ejemplo n.º 4
0
static int
out_write(struct subprocess_data *mdata)
{
    int ret = 0;
    struct timespec start = sol_util_timespec_get_current();

    while (mdata->write_data.len) {
        struct timespec now = sol_util_timespec_get_current();
        struct timespec elapsed;
        struct write_data *w = sol_vector_get(&mdata->write_data, 0);
        ssize_t r;

        sol_util_timespec_sub(&now, &start, &elapsed);
        if (elapsed.tv_sec > 0 ||
            elapsed.tv_nsec > (time_t)CHUNK_MAX_TIME_NS)
            break;

        r = write(mdata->pipes.out[1], (uint8_t *)w->blob->mem + w->offset, w->blob->size - w->offset);
        if (r > 0) {
            w->offset += r;
        } else if (r < 0) {
            if (errno == EINTR)
                continue;
            else if (errno == EAGAIN)
                break;
            else {
                ret = -errno;
                break;
            }
        }

        if (w->blob->size <= w->offset) {
            sol_blob_unref(w->blob);
            sol_vector_del(&mdata->write_data, 0);
        }
    }

    return ret;
}