#include <stdio.h>
#include <stdlib.h>
#define RES 5
struct A {
int x;
int y;
};
struct vector_a {
struct A* tab;
size_t len;
size_t cap;
};
void init(struct vector_a*);
void resize(struct vector_a*);
void add(struct vector_a*, struct A);
void display(struct vector_a*);
void clean(struct vector_a*);
int main()
{
struct vector_a v;
struct A a[3] = {{10, 12}, {11, 3}, {8, 9}};
int i;
init(&v);
for(i = 0; i < 3; ++i) {
add(&v, a[i]);
}
display(&v);
clean(&v);
add(&v, a[1]);
display(&v);
clean(&v);
return 0;
}
void init(struct vector_a* v) {
v->tab = NULL;
v->len = 0;
v->cap = 0;
resize(v);
}
void resize(struct vector_a* v) {
if(!v->tab) {
v
->tab
= (struct A
*)malloc(RES
*sizeof(struct A
)); v->cap = RES;
} else {
v
->tab
= (struct A
*)realloc(v
->tab
, (RES
+v
->cap
)*sizeof(struct A
)); v->cap += RES;
}
}
void add(struct vector_a* v, struct A a) {
if(!(v->cap-v->len)) {
resize(v);
}
v->tab[v->len++] = a;
}
void display(struct vector_a* v) {
int i;
for(i = 0; i < v->len; ++i) {
printf("%d\t%d\n", v
->tab
[i
].
x, v
->tab
[i
].
y); }
}
void clean(struct vector_a* v) {
memset(v
, 0, sizeof(struct vector_a
)); }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KIAojZGVmaW5lIFJFUyA1CiAKc3RydWN0IEEgewogICAgaW50IHg7CiAgICBpbnQgeTsKfTsKIApzdHJ1Y3QgdmVjdG9yX2EgewogICAgc3RydWN0IEEqIHRhYjsKICAgIHNpemVfdCBsZW47CiAgICBzaXplX3QgY2FwOwp9OwogCnZvaWQgaW5pdChzdHJ1Y3QgdmVjdG9yX2EqKTsKdm9pZCByZXNpemUoc3RydWN0IHZlY3Rvcl9hKik7CnZvaWQgYWRkKHN0cnVjdCB2ZWN0b3JfYSosIHN0cnVjdCBBKTsKdm9pZCBkaXNwbGF5KHN0cnVjdCB2ZWN0b3JfYSopOwp2b2lkIGNsZWFuKHN0cnVjdCB2ZWN0b3JfYSopOwogCmludCBtYWluKCkKewogICAgCiAgICBzdHJ1Y3QgdmVjdG9yX2EgdjsKICAgIHN0cnVjdCBBIGFbM10gPSB7ezEwLCAxMn0sIHsxMSwgM30sIHs4LCA5fX07CiAgICBpbnQgaTsKICAgIGluaXQoJnYpOwogICAgZm9yKGkgPSAwOyBpIDwgMzsgKytpKSB7CiAgICAgICAgYWRkKCZ2LCBhW2ldKTsKICAgIH0KICAgIGRpc3BsYXkoJnYpOwogICAgY2xlYW4oJnYpOwogICAgcHJpbnRmKCJcblxuIik7CiAgICBhZGQoJnYsIGFbMV0pOwogICAgZGlzcGxheSgmdik7CiAgICBjbGVhbigmdik7CiAgICByZXR1cm4gMDsKfQogCnZvaWQgaW5pdChzdHJ1Y3QgdmVjdG9yX2EqIHYpIHsKICAgIHYtPnRhYiA9IE5VTEw7CiAgICB2LT5sZW4gPSAwOwogICAgdi0+Y2FwID0gMDsKICAgIHJlc2l6ZSh2KTsKfQogCnZvaWQgcmVzaXplKHN0cnVjdCB2ZWN0b3JfYSogdikgewogICAgaWYoIXYtPnRhYikgewogICAgICAgIHYtPnRhYiA9IChzdHJ1Y3QgQSopbWFsbG9jKFJFUypzaXplb2Yoc3RydWN0IEEpKTsKICAgICAgICB2LT5jYXAgPSBSRVM7CiAgICB9IGVsc2UgewogICAgICAgIHYtPnRhYiA9IChzdHJ1Y3QgQSopcmVhbGxvYyh2LT50YWIsIChSRVMrdi0+Y2FwKSpzaXplb2Yoc3RydWN0IEEpKTsKICAgICAgICB2LT5jYXAgKz0gUkVTOwogICAgfQp9CiAKdm9pZCBhZGQoc3RydWN0IHZlY3Rvcl9hKiB2LCBzdHJ1Y3QgQSBhKSB7CiAgICBpZighKHYtPmNhcC12LT5sZW4pKSB7CiAgICAgICAgcmVzaXplKHYpOwogICAgfQogICAgdi0+dGFiW3YtPmxlbisrXSA9IGE7Cn0KIAp2b2lkIGRpc3BsYXkoc3RydWN0IHZlY3Rvcl9hKiB2KSB7CiAgICBpbnQgaTsKICAgIGZvcihpID0gMDsgaSA8IHYtPmxlbjsgKytpKSB7CiAgICAgICAgcHJpbnRmKCIlZFx0JWRcbiIsIHYtPnRhYltpXS54LCB2LT50YWJbaV0ueSk7CiAgICB9Cn0KIAp2b2lkIGNsZWFuKHN0cnVjdCB2ZWN0b3JfYSogdikgewogICAgZnJlZSh2LT50YWIpOwogICAgbWVtc2V0KHYsIDAsIHNpemVvZihzdHJ1Y3QgdmVjdG9yX2EpKTsKfQ==