예제 #1
0
/* Resolve dependency, decrease refcount */
static int g_itemResolveDependency(void* o, void* userData) {
    g_dependency dep;
    corto_depresolver data;

    dep = o;
    data = userData;

    if (!dep->processed) {
        switch(dep->kind) {
        case CORTO_DECLARED:
            dep->item->declareCount--;

            corto_assert(dep->item->declareCount >= 0, "negative declareCount for item '%s'.", corto_nameof(dep->item->o));

            if (!dep->item->declareCount) {
                corto_llInsert(data->toPrint, dep->item);
            }
            break;
        case CORTO_DEFINED:
            dep->item->defineCount--;

            corto_assert(dep->item->defineCount >= 0, "negative defineCount for item '%s'.", corto_nameof(dep->item->o));

            if (!dep->item->defineCount) {
                corto_llInsert(data->toPrint, dep->item);
            }
            break;
        }
    }

    dep->processed = TRUE;

    return 1;
}
예제 #2
0
파일: ll.c 프로젝트: daltonwang/corto
/* Append one list to another */
void corto_llAppendList(corto_ll l1, corto_ll l2) {
    corto_llNode ptr;

    ptr = l2->first;
    while(ptr) {
        corto_llInsert(l1, ptr->data);
        ptr = ptr->next;
    }
}
예제 #3
0
/* Collect initial objects */
int g_itemCollectinitial(void* o, void* userData) {
    g_item item;
    corto_depresolver data;

    item = o;
    data = userData;

    if (!item->declareCount) {
        corto_llInsert(data->toPrint, item);
    }

    return 1;
}
예제 #4
0
/* Create new item */
g_item g_itemNew(corto_object o, corto_depresolver data) {
    g_item result;

    result = corto_alloc(sizeof(struct g_item));
    result->o = o;
    result->declared = FALSE;
    result->defined = FALSE;
    result->declareCount = 0;
    result->defineCount = 0;
    result->onDeclared = NULL;
    result->onDefined = NULL;

    if (o == root_o) {
        result->declared = TRUE;
        result->defined = TRUE;
    }

    corto_llInsert(data->items, result);

    return result;
}