Algorithm-GDiffDelta

 view release on metacpan or  search on metacpan

util.c  view on Meta::CPAN

{
    unsigned int val = 1, bits = 0;

    while (val < size && bits < CHAR_BIT * sizeof(Off_t)) {
        val <<= 1;
        ++bits;
    }

    return bits ? bits : 1;
}


static void
qef_cha_init (QefChaStore *cha, long isize, long icount)
{
    cha->head = cha->tail = 0;
    cha->isize = isize;
    cha->nsize = icount * isize;
    cha->ancur = cha->sncur = 0;
    cha->scurr = 0;
}


static void
qef_cha_free (QefChaStore *cha)
{
    QefChaNode *cur, *tmp;

    for (cur = cha->head; (tmp = cur) != 0;) {
        cur = cur->next;
        free(tmp);
    }
}


static void *
qef_cha_alloc (QefChaStore *cha)
{
    QefChaNode *ancur;
    void *data;

    if (!(ancur = cha->ancur) || ancur->icurr == cha->nsize) {
        if (!(ancur = (QefChaNode *) malloc(sizeof(QefChaNode) + cha->nsize)))
            assert(0);
        ancur->icurr = 0;
        ancur->next = 0;
        if (cha->tail)
            cha->tail->next = ancur;
        if (!cha->head)
            cha->head = ancur;
        cha->tail = ancur;
        cha->ancur = ancur;
    }

    data = (char *) ancur + sizeof(QefChaNode) + ancur->icurr;
    ancur->icurr += cha->isize;

    return data;
}

/* vi:set ts=4 sw=4 expandtab: */



( run in 2.018 seconds using v1.01-cache-2.11-cpan-5b529ec07f3 )