Algorithm-GDiffDelta
view release on metacpan or search on metacpan
{
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 )