mirror of
https://git.wownero.com/wownero/wownero-puddle.git
synced 2024-08-15 01:03:20 +00:00
tweak bag
This commit is contained in:
parent
2efa10a194
commit
9184050df2
1 changed files with 20 additions and 16 deletions
|
@ -97,21 +97,23 @@ gbag_get(gbag_t *gb)
|
|||
assert(gb && gb->max && gb->b);
|
||||
char *end = gb->b + (gb->max * gb->z);
|
||||
char *from = gb->n;
|
||||
size_t nm, cz;
|
||||
size_t nc, oc, ocz;
|
||||
char *b = NULL;
|
||||
char *rv = NULL;
|
||||
if (gb->ref == gb->max)
|
||||
goto grow;
|
||||
scan:
|
||||
do
|
||||
while(gb->n < end)
|
||||
{
|
||||
if (!*gb->n)
|
||||
{
|
||||
gb->ref++;
|
||||
return gb->n;
|
||||
rv = gb->n;
|
||||
gb->n += gb->z;
|
||||
return rv;
|
||||
}
|
||||
gb->n += gb->z;
|
||||
}
|
||||
while(gb->n < end);
|
||||
if (from != gb->b)
|
||||
{
|
||||
end = from;
|
||||
|
@ -122,19 +124,21 @@ scan:
|
|||
else
|
||||
{
|
||||
grow:
|
||||
cz = gb->max * gb->z;
|
||||
nm = gb->max << 1;
|
||||
b = (char*) realloc(gb->b, nm * gb->z);
|
||||
if (b == NULL)
|
||||
ocz = gb->max * gb->z;
|
||||
oc = gb->max;
|
||||
nc = gb->max << 1;
|
||||
b = (char*) realloc(gb->b, nc * gb->z);
|
||||
if (!b)
|
||||
return NULL;
|
||||
memset(b + cz, 0, cz);
|
||||
gb->max = nm;
|
||||
rv = b + ocz;
|
||||
memset(rv, 0, ocz);
|
||||
if (gb->mv && gb->b != b)
|
||||
gb->mv(b, cz);
|
||||
gb->b = b;
|
||||
gb->n = b + cz;
|
||||
gb->mv(b, oc);
|
||||
gb->max = nc;
|
||||
gb->ref++;
|
||||
return gb->n;
|
||||
gb->b = b;
|
||||
gb->n = rv + gb->z;
|
||||
return rv;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
@ -188,13 +192,13 @@ gbag_first(gbag_t *gb)
|
|||
char *s = gb->b;
|
||||
char *e = gb->b + (gb->max * gb->z);
|
||||
gb->ni = s;
|
||||
do
|
||||
while (s<e)
|
||||
{
|
||||
if (*s)
|
||||
return s;
|
||||
s += gb->z;
|
||||
gb->ni = s;
|
||||
}
|
||||
while (s<e);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue