示例#1
0
文件: bstree.c 项目: HanLuo/snippets
void BSTree_set(BSTree* map, void* key, void* value) {
    if(map->root == 0) {
        map->root = BSTreeNode_create(0, key, value);
    }
    else {
        BSTree_setnode(map, map->root, key, value);
    }
}
示例#2
0
static inline void BSTree_setnode(BSTree *map, BSTreeNode *node, void *key, void *data) {
    int cmp = map->compare(node->key, key);

    if (cmp <= 0) {
        if (node->left) {
            BSTree_setnode(map, node->left, key, data);
        } else { 
            node->left = BSTreeNode_create(node, key, data);
        }
    } else {
        if (node->right) {
            BSTree_setnode(map, node->right, key, data);
        } else {
            node->right = BSTreeNode_create(node, key, data);
        }
    }
}
示例#3
0
文件: bstree.c 项目: shackijj/lcthw
static inline void BSTree_setnode(BSTree *map, BSTreeNode *node, void *key, void *data, uint32_t hash)
{
    //int cmp = map->compare(node->key, key);

    if(node->hash <= hash) {
        if(node->left) {
            BSTree_setnode(map, node->left, key, data, hash);
        } else {
            node->left = BSTreeNode_create(node, key, data, hash);
        }
    } else {
        if(node->right) {
            BSTree_setnode(map, node->right, key, data, hash);
        } else {
            node->right = BSTreeNode_create(node, key, data, hash);
        }
    }
}
示例#4
0
int BSTree_set(BSTree *map, void *key, void *data) {
    if (map->root == NULL) {
        map->root = BSTreeNode_create(NULL, key, data);
        check_mem(map->root);
    } else {
        BSTree_setnode(map, map->root, key, data);
    }
    return 0;
error:
    return -1;
}
示例#5
0
int BSTree_set(BSTree *map, void *key, void *data)
{
    if (map->root == NULL) {
        // first so just make it and get out
        map->root = BSTreeNode_create(NULL, key, data);
        check_mem(map->root);
    } else {
        BSTree_setnode(map, map->root, key, data);
    }
    
    map->count++;

    return 0;
error:
    return -1;
}
示例#6
0
文件: bstree.c 项目: shackijj/lcthw
int BSTree_set(BSTree *map, void *key, void *data)
{
    check(map != NULL, "Map can't be NULL.");
    check(key != NULL, "Key can't be NULL.");

    uint32_t hash = map->hash(key);

    if(map->root == NULL) {
        map->root = BSTreeNode_create(NULL, key, data, hash);
        check_mem(map->root);
    } else {
        BSTree_setnode(map, map->root, key, data, hash);
    }

    return 0;

error:
    return -1;
}