#include <stdlib.h>
#include <stdio.h>
typedef struct Data_ {
int x,y,z;
// ...
} Data;
typedef struct Array_ {
Data * data;
int size;
int reserved;
} Array;
Array* makeArray(int startSize)
{
Array
* a
= malloc(sizeof(Array
)); a
->data
= malloc(sizeof(Data
)*startSize
); a->reserved = startSize;
a->size = 0;
return a;
};
void killArray(Array * a)
{
}
Data * getData(Array* a)
{
return a->data;
}
int sizeData(Array* a)
{
return a->size;
}
void addData(Array* a, Data d)
{
if (a->size == a->reserved) // Full
{
a
->data
= realloc(a
->data
,sizeof(Data
)*a
->reserved
*2); a->reserved *= 2;
}
a->data[a->size++] = d;
}
int main(int argc, const char * argv[])
{
int i;
Array * a = makeArray(2);
for(i = 0; i < 20; ++i)
{
Data d;
d.x = i;
d.y = 2*i;
d.z = 3*i;
addData(a,d);
}
for(i = 0; i < sizeData(a); ++i)
{
printf("%3d %3d %3d\n",getData
(a
)[i
].
x,getData
(a
)[i
].
y,getData
(a
)[i
].
z); }
killArray(a);
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnR5cGVkZWYgc3RydWN0IERhdGFfIHsKICAgIGludCB4LHksejsKICAgIC8vIC4uLgp9IERhdGE7Cgp0eXBlZGVmIHN0cnVjdCBBcnJheV8gewogICAgRGF0YSAqIGRhdGE7CiAgICBpbnQgICAgc2l6ZTsKICAgIGludCAgICByZXNlcnZlZDsKfSBBcnJheTsKCkFycmF5KiBtYWtlQXJyYXkoaW50IHN0YXJ0U2l6ZSkKewogICAgQXJyYXkgKiBhID0gbWFsbG9jKHNpemVvZihBcnJheSkpOwogICAgYS0+ZGF0YSA9IG1hbGxvYyhzaXplb2YoRGF0YSkqc3RhcnRTaXplKTsKICAgIGEtPnJlc2VydmVkID0gc3RhcnRTaXplOwogICAgYS0+c2l6ZSA9IDA7CiAgICByZXR1cm4gYTsKfTsKCnZvaWQga2lsbEFycmF5KEFycmF5ICogYSkKewogICAgZnJlZShhLT5kYXRhKTsKICAgIGZyZWUoYSk7Cn0KCgpEYXRhICogZ2V0RGF0YShBcnJheSogYSkKewogICAgcmV0dXJuIGEtPmRhdGE7Cn0KCmludCBzaXplRGF0YShBcnJheSogYSkKewogICAgcmV0dXJuIGEtPnNpemU7Cn0KCnZvaWQgYWRkRGF0YShBcnJheSogYSwgRGF0YSBkKQp7CiAgICBpZiAoYS0+c2l6ZSA9PSBhLT5yZXNlcnZlZCkgLy8gRnVsbAogICAgewogICAgICAgIGEtPmRhdGEgPSByZWFsbG9jKGEtPmRhdGEsc2l6ZW9mKERhdGEpKmEtPnJlc2VydmVkKjIpOwogICAgICAgIGEtPnJlc2VydmVkICo9IDI7CiAgICB9CiAgICBhLT5kYXRhW2EtPnNpemUrK10gPSBkOwp9CgoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCnsKICAgIGludCBpOwogICAgQXJyYXkgKiBhID0gbWFrZUFycmF5KDIpOwogICAgZm9yKGkgPSAwOyBpIDwgMjA7ICsraSkKICAgIHsKICAgICAgICBEYXRhIGQ7CiAgICAgICAgZC54ID0gaTsKICAgICAgICBkLnkgPSAyKmk7CiAgICAgICAgZC56ID0gMyppOwogICAgICAgIGFkZERhdGEoYSxkKTsKICAgIH0KICAgIGZvcihpID0gMDsgaSA8IHNpemVEYXRhKGEpOyArK2kpCiAgICB7CiAgICAgICAgcHJpbnRmKCIlM2QgJTNkICUzZFxuIixnZXREYXRhKGEpW2ldLngsZ2V0RGF0YShhKVtpXS55LGdldERhdGEoYSlbaV0ueik7CiAgICB9CgogICAga2lsbEFycmF5KGEpOwoKICAgIHJldHVybiAwOwp9Cgo=