Exemplo n.º 1
0
Arquivo: Data.c Projeto: tobynet/clcl
/*
 * data_delete - アイテムの削除
 */
BOOL data_delete(DATA_INFO **root, DATA_INFO *del_di, const BOOL free_item)
{
    DATA_INFO *di;

    if (root == NULL || *root == NULL || del_di == NULL) {
        return FALSE;
    }
    if (*root == del_di) {
        *root = del_di->next;
        del_di->next = NULL;
        if (free_item == TRUE) {
            data_free(del_di);
        }
        return TRUE;
    }
    for (di = *root; di != NULL; di = di->next) {
        if (di->next == del_di) {
            // 削除
            di->next = del_di->next;
            del_di->next = NULL;
            if (free_item == TRUE) {
                data_free(del_di);
            }
            return TRUE;
        }
        if (di->child != NULL && data_delete(&di->child, del_di, free_item) == TRUE) {
            return TRUE;
        }
    }
    return FALSE;
}
Exemplo n.º 2
0
void test_data()
{
    struct Data* d = data_generate(10);

    data_set(0, 1, d);
    data_set(2, 1, d);
    data_set(4, 1, d);
    data_set(9,1,d);
    data_show(d);
    data_delete(4,d);
    data_show(d);
    data_set(3,1,d);
    data_show(d);
    data_free(d);
}
Exemplo n.º 3
0
Arquivo: Data.c Projeto: tobynet/clcl
/*
 * data_adjust - アイテムの整理
 */
void data_adjust(DATA_INFO **root)
{
    DATA_INFO *di = *root;
    DATA_INFO *wk_di;

    while (di != NULL) {
        if (di->type == TYPE_ITEM && di->child == NULL) {
            wk_di = di->next;
            // 削除
            data_delete(root, di, TRUE);
            di = wk_di;
        } else {
            if (di->type == TYPE_FOLDER) {
                data_adjust(&di->child);
            }
            di = di->next;
        }
    }
}