Exemplo n.º 1
0
Arquivo: shared.c Projeto: clarkok/CoS
static inline
SharedPages *
_mm_shared_pages_find(SBTree *tree, size_t p_page_start)
{
    SBNode *node = sb_root(tree);

    while (node) {
        SharedPages *shared_pages = sb_get(node, SharedPages, _node);
        if (shared_pages->p_page_start == p_page_start) return shared_pages;
        if (shared_pages->p_page_start > p_page_start) {
            if (node->left) {
                node = node->left;
            }
            else if ((node = sb_prev(node))) {
                return sb_get(node, SharedPages, _node);
            }
            else {
                return NULL;
            }
        }
        else {
            if (node->right) {
                node = node->right;
            }
            else {
                return shared_pages;
            }
        }
    }
    return NULL;
}
Exemplo n.º 2
0
static strbuf *
savechar(strbuf *sb, int idx, int c) {
    if (sb == 0 || idx >= sb->size) {
        sb = sb_get(sb, idx + 1);
    }
    sb->str[idx] = c;
    return sb;
}
Exemplo n.º 3
0
static strbuf *
savestr(strbuf *sb, const char *str) {
    int len = strlen(str);
    if (sb == 0 || len >= sb->size) {
        sb = sb_get(sb, len + 1);
    }
    strcpy(sb->str, str);
    return sb;
}
Exemplo n.º 4
0
Arquivo: proc.c Projeto: clarkok/CoS
static Process *
_proc_find(SBTree *tree, size_t id)
{
    SBNode *node = sb_root(tree);

    while (node) {
        Process *proc = sb_get(node, Process, _node);
        if (proc->id == id) return proc;
        if (proc->id > id) {
            node = node->left;
        }
        else {
            node = node->right;
        }
    }
    return NULL;
}
Exemplo n.º 5
0
Arquivo: proc.c Projeto: clarkok/CoS
static void
_proc_insert(SBTree *tree, Process *proc)
{
    SBNode **ptr = &sb_root(tree),
           *parent = NULL;

    while (*ptr) {
        parent = *ptr;
        if (sb_get(*ptr, Process, _node)->id > proc->id) {
            ptr = &(*ptr)->left;
        }
        else {
            ptr = &(*ptr)->right;
        }
    }
    sb_link(&proc->_node, parent, ptr, tree);
}
Exemplo n.º 6
0
Arquivo: shared.c Projeto: clarkok/CoS
static inline void
_mm_shared_pages_insert(SBTree *tree, SharedPages *node)
{
    SBNode **ptr = &sb_root(tree),
           *parent = NULL;

    while (*ptr) {
        parent = *ptr;
        SharedPages *shared_pages = sb_get(*ptr, SharedPages, _node);
        if (shared_pages->p_page_start > node->p_page_start) {
            ptr = &(*ptr)->left;
        }
        else {
            ptr = &(*ptr)->right;
        }
    }

    sb_link(&node->_node, parent, ptr, tree);
}