Esempio n. 1
0
corto_void* corto_value_ptrof(corto_value* val) {
    corto_void* result;
    switch(val->kind) {
    case CORTO_OBJECT:
        result = val->is.object.o;
        break;
    case CORTO_BASE:
        result = val->is.base.v;
        break;
    case CORTO_LITERAL:
        result = &val->is.literal.v;
        break;
    case CORTO_VALUE:
    case CORTO_MEM:
        result = val->is.value.v;
        break;
    case CORTO_MEMBER:
        result = val->is.member.v;
        break;
    case CORTO_CONSTANT:
        result = val->is.constant.v;
        break;
    case CORTO_ELEMENT:
        result = val->is.element.v;
        break;
    case CORTO_MAP_ELEMENT:
        result = val->is.mapElement.v;
        break;
    default:
        corto_critical("corto_value_ptrof: invalid corto_valueKind(%d).", val->kind);
        result = NULL;
        break;
    }
    return result;
}
Esempio n. 2
0
corto_int16 corto_value_ptrset(corto_value *val, void *ptr) {
    switch(val->kind) {
    case CORTO_OBJECT:
        val->is.object.o = ptr;
        break;
    case CORTO_BASE:
        val->is.base.v = ptr;
        break;
    case CORTO_VALUE:
    case CORTO_MEM:
        val->is.value.v = ptr;
        break;
    case CORTO_MEMBER:
        val->is.member.v = ptr;
        break;
    case CORTO_CONSTANT:
        val->is.constant.v = ptr;
        break;
    case CORTO_ELEMENT:
        val->is.element.v = ptr;
        break;
    case CORTO_MAP_ELEMENT:
        val->is.mapElement.v = ptr;
        break;
    case CORTO_LITERAL:
        corto_seterr("cannot set pointer for literal");
        goto error;
    default:
        corto_critical("corto_value_ptrset: invalid corto_valueKind(%d).", val->kind);
        break;
    }
    return 0;
error:
    return -1;
}
Esempio n. 3
0
/* Set data of current element. */
void corto_llIterSet(corto_iter* iter, void* o) {
    if (corto_iterData(*iter)->cur) {
        ((corto_llNode)corto_iterData(*iter)->cur)->data = o;
    } else {
        corto_critical("Illegal use of 'set' by corto_iter: no element selected. Use 'next' to select an element first.");
    }
}
Esempio n. 4
0
/* Remove the last-read element from the iterator. */
void* corto_llIterRemove(corto_iter* iter) {
    corto_llNode current;
    void* result;

    result = 0;

    if ((current = corto_iterData(*iter)->cur)) {
        if ((corto_iterData(*iter)->list)->first == current) {
            (corto_iterData(*iter)->list)->first = current->next;
        }
        if ((corto_iterData(*iter)->list)->last == current) {
            (corto_iterData(*iter)->list)->last = current->next;
        }
        if (current->prev) {
            current->prev->next = current->next;
        }
        if (current->next) {
            current->next->prev = current->prev;
        }
        result = current->data;
        free(current);
        (corto_iterData(*iter)->list)->size--;
    } else {
        corto_critical("Illegal use of 'remove' by corto_iter: no element selected. Use 'next' to select an element first.");
    }

    return result;
}
Esempio n. 5
0
static void* html_getDocMember(corto_object doc, corto_string member, htmlData_t *data) {
    corto_member m = corto_interface_resolveMember(data->docClass, member);
    void *result = NULL;
    if (m) {
        result = CORTO_OFFSET(doc, m->offset);
    } else {
        corto_critical("member description not found in doc class");
    }
    return result;
}
Esempio n. 6
0
void* corto_llIterMove(corto_iter* iter, unsigned int index) {
    void* result;

    result = NULL;

    if (corto_iterData(*iter)->list->size <= index) {
        corto_critical("iterMove exceeds list-bound (%d >= %d).", index, (corto_iterData(*iter)->list)->size);
    }
    corto_iterMoveFirst(iter);
    while(index) {
        result = corto_iterNext(iter);
        index--;
    }

    return result;
}
Esempio n. 7
0
/* Take next element of iterator */
void* corto_llIterNextPtr(corto_iter* iter) {
    corto_llNode current;
    void* result;

    current = corto_iterData(*iter)->next;
    result = 0;

    if (current) {
        corto_iterData(*iter)->next = current->next;
        result = &current->data;
        corto_iterData(*iter)->cur = current;
    } else {
        corto_critical("Illegal use of 'next' by corto_iter. Use 'hasNext' to check if data is still available.");
    }

    return result;
}
Esempio n. 8
0
corto_type corto_value_typeof(corto_value* val) {
    corto_type result;

    switch(val->kind) {
    case CORTO_OBJECT:
        result = val->is.object.t;
        break;
    case CORTO_BASE:
        result = val->is.base.t;
        break;
    case CORTO_VALUE:
    case CORTO_MEM:
        result = val->is.value.t;
        break;
    case CORTO_LITERAL:
        switch(val->is.literal.kind) {
        case CORTO_LITERAL_BOOLEAN:
            result = corto_type(corto_bool_o);
            break;
        case CORTO_LITERAL_CHARACTER:
            result = corto_type(corto_char_o);
            break;
        case CORTO_LITERAL_INTEGER:
            result = corto_type(corto_int64_o);
            break;
        case CORTO_LITERAL_UNSIGNED_INTEGER:
            result = corto_type(corto_uint64_o);
            break;
        case CORTO_LITERAL_FLOATING_POINT:
            result = corto_type(corto_float64_o);
            break;
        case CORTO_LITERAL_STRING:
            result = corto_type(corto_string_o);
            break;
        case CORTO_LITERAL_NULL:
            result = NULL;
            break;
        default:
            corto_critical("corto_value_typeof: invalid corto_literalKind(%d)", val->is.literal.kind);
            result = NULL;
            break;
        }
        break;
    case CORTO_MEMBER:
        result = val->is.member.t->type;
        break;
    case CORTO_CONSTANT:
        result = corto_value_typeof(val->parent);
        break;
    case CORTO_ELEMENT:
        result = val->is.element.t.type;
        break;
    case CORTO_MAP_ELEMENT:
        result = val->is.mapElement.t.type;
        break;
    default:
        corto_critical("corto_value_typeof: invalid corto_valueKind(%d).", val->kind);
        result = NULL;
        break;
    }

    return result;
}