#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <err.h>
#include <string.h>
int remove_C(int C_num, int list_size, int *list, double *c_old, double *c_new) {
int i;
// Copy the elements before the node i (removed element)
switch(list[0]){
case 0:
memcpy(c_new
, c_old
+ 3, list
[1] * sizeof(double) * 3); break;
default:
memcpy(c_new
, c_old
, list
[0] * sizeof(double) * 3); break;
}
// Copy the elements before the removed element i
for(i = 1; i < list_size; i++)
memcpy(c_new
+ (list
[i
-1]-i
+1) * 3, c_old
+ (list
[i
] - 1) * 3, (list
[i
] - list
[i
-1] - 1) * sizeof(double) * 3);
// Copy the elements before (after) the removed element i
if(list[list_size] == list_size + C_num)
memcpy(c_new
+ (list
[list_size
- 1] - list_size
) * 3, c_old
+ list
[list_size
- 1] * 3, (list
[list_size
- 1] - list
[list_size
- 2] -1) * sizeof(double) * 3); else
memcpy(c_new
+ (list
[list_size
- 1] - list_size
+ 1) * 3, c_old
+ (list
[list_size
- 1] + 1) * 3, (C_num
+ list_size
- list
[list_size
- 1] - 1) * sizeof(double) * 3);
return c_new[0];
}
int main(void) {
int C_num = 0;
int list_size = 0;
int i, j;
int *list;
double *c_old, *c_new;
c_old
= malloc(sizeof(double) * C_num
); c_new
= malloc(sizeof(double) * C_num
); list
= malloc(sizeof(int) * list_size
);
list_size++;
list
= realloc(list
, sizeof(int) * list_size
); list[list_size -1] = 1;
list_size++;
list
= realloc(list
, sizeof(int) * list_size
); list[list_size -1] = 4;
list_size++;
list
= realloc(list
, sizeof(int) * list_size
); list[list_size -1] = 6;
list_size++;
list
= realloc(list
, sizeof(int) * list_size
); list[list_size - 1] = 8;
C_num += 10;
c_old
= realloc(c_old
, sizeof(double) * C_num
* 3);
for(i = 0; i < C_num; i++)
for(j = 0; j < 3; j++)
c_old[i * 3 + j] = i * 3 + j;
for(i = 0; i < C_num; i++){
for(j = 0; j < 3; j++)
printf("%f ", c_old
[i
* 3 + j
]); }
C_num -= list_size;
c_new
= realloc(c_new
, sizeof(double) * C_num
* 3);
c_new[0] = remove_C(C_num, list_size, list, c_old, c_new);
for(i = 0; i < C_num; i++){
for(j = 0; j < 3; j++)
printf("%f ", c_new
[i
* 3 + j
]); }
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtYXRoLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGVyci5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgoKaW50IHJlbW92ZV9DKGludCBDX251bSwgaW50IGxpc3Rfc2l6ZSwgaW50ICpsaXN0LCBkb3VibGUgKmNfb2xkLCBkb3VibGUgKmNfbmV3KSB7CiAgICAJaW50IGk7CgkKCS8vIENvcHkgdGhlIGVsZW1lbnRzIGJlZm9yZSB0aGUgbm9kZSBpIChyZW1vdmVkIGVsZW1lbnQpCiAgICAJc3dpdGNoKGxpc3RbMF0pewogICAgCQljYXNlIDA6CiAgICAJCQltZW1jcHkoY19uZXcsIGNfb2xkICsgMywgbGlzdFsxXSAqIHNpemVvZihkb3VibGUpICogMyk7CiAgICAJCQlicmVhazsKICAgIAkJZGVmYXVsdDoKICAgIAkJCW1lbWNweShjX25ldywgY19vbGQsIGxpc3RbMF0gKiBzaXplb2YoZG91YmxlKSAqIDMpOwogICAgCQkJYnJlYWs7CiAgICAJfQogICAgICAgIC8vIENvcHkgdGhlIGVsZW1lbnRzIGJlZm9yZSB0aGUgcmVtb3ZlZCBlbGVtZW50IGkKICAgIAlmb3IoaSA9IDE7IGkgPCBsaXN0X3NpemU7IGkrKykKICAgIAkJbWVtY3B5KGNfbmV3ICsgKGxpc3RbaS0xXS1pKzEpICogMywgY19vbGQgKyAobGlzdFtpXSAtIDEpICogMywgKGxpc3RbaV0gLSBsaXN0W2ktMV0gLSAxKSAqIHNpemVvZihkb3VibGUpICogMyk7CiAgICAgCgkvLyBDb3B5IHRoZSBlbGVtZW50cyBiZWZvcmUgKGFmdGVyKSB0aGUgcmVtb3ZlZCBlbGVtZW50IGkgCiAgICAJaWYobGlzdFtsaXN0X3NpemVdID09IGxpc3Rfc2l6ZSArIENfbnVtKQogICAgCQltZW1jcHkoY19uZXcgKyAobGlzdFtsaXN0X3NpemUgLSAxXSAtIGxpc3Rfc2l6ZSkgKiAzLCBjX29sZCArIGxpc3RbbGlzdF9zaXplIC0gMV0gKiAzLCAobGlzdFtsaXN0X3NpemUgLSAxXSAtIGxpc3RbbGlzdF9zaXplIC0gMl0gLTEpICogIHNpemVvZihkb3VibGUpICogMyk7CiAgICAJZWxzZQogICAgCQltZW1jcHkoY19uZXcgKyAobGlzdFtsaXN0X3NpemUgLSAxXSAtIGxpc3Rfc2l6ZSArIDEpICogMywgY19vbGQgKyAobGlzdFtsaXN0X3NpemUgLSAxXSArIDEpICogMywgKENfbnVtICsgbGlzdF9zaXplIC0gbGlzdFtsaXN0X3NpemUgLSAxXSAtIDEpICogc2l6ZW9mKGRvdWJsZSkgKiAzKTsKCgkKCXJldHVybiBjX25ld1swXTsKfQoKaW50IG1haW4odm9pZCkgewogICAgCWludCBDX251bSA9IDA7CiAgICAJaW50IGxpc3Rfc2l6ZSA9IDA7CiAgICAJaW50IGksIGo7CiAgICAJaW50ICpsaXN0OwogICAgCWRvdWJsZSAqY19vbGQsICpjX25ldzsKICAgIAljX29sZCA9IG1hbGxvYyhzaXplb2YoZG91YmxlKSAqIENfbnVtKTsKICAgIAljX25ldyA9IG1hbGxvYyhzaXplb2YoZG91YmxlKSAqIENfbnVtKTsKICAgIAlsaXN0ID0gbWFsbG9jKHNpemVvZihpbnQpICogbGlzdF9zaXplKTsKICAgICAKICAgIAlsaXN0X3NpemUrKzsKICAgIAlsaXN0ID0gcmVhbGxvYyhsaXN0LCBzaXplb2YoaW50KSAqIGxpc3Rfc2l6ZSk7CiAgICAJbGlzdFtsaXN0X3NpemUgLTFdID0gMTsKICAgICAKICAgIAlsaXN0X3NpemUrKzsKICAgIAlsaXN0ID0gcmVhbGxvYyhsaXN0LCBzaXplb2YoaW50KSAqIGxpc3Rfc2l6ZSk7CiAgICAJbGlzdFtsaXN0X3NpemUgLTFdID0gNDsKICAgICAKICAgIAlsaXN0X3NpemUrKzsKICAgIAlsaXN0ID0gcmVhbGxvYyhsaXN0LCBzaXplb2YoaW50KSAqIGxpc3Rfc2l6ZSk7CiAgICAJbGlzdFtsaXN0X3NpemUgLTFdID0gNjsKICAgIAkKICAgIAlsaXN0X3NpemUrKzsKICAgIAlsaXN0ID0gcmVhbGxvYyhsaXN0LCBzaXplb2YoaW50KSAqIGxpc3Rfc2l6ZSk7CiAgICAJbGlzdFtsaXN0X3NpemUgLSAxXSA9IDg7CiAgICAgCiAgICAJQ19udW0gKz0gMTA7CiAgICAJY19vbGQgPSByZWFsbG9jKGNfb2xkLCBzaXplb2YoZG91YmxlKSAqIENfbnVtICogMyk7CiAgICAgCiAgICAJZm9yKGkgPSAwOyBpIDwgQ19udW07IGkrKykKICAgIAkJZm9yKGogPSAwOyBqIDwgMzsgaisrKQogICAgCQkJY19vbGRbaSAqIDMgKyBqXSA9IGkgKiAzICsgajsKICAgICAKICAgICAKICAgIAlmb3IoaSA9IDA7IGkgPCBDX251bTsgaSsrKXsKICAgIAkJZm9yKGogPSAwOyBqIDwgMzsgaisrKQogICAgCQkJcHJpbnRmKCIlZiAiLCBjX29sZFtpICogMyArIGpdKTsKICAgIAkJcHJpbnRmKCJcbiIpOwogICAgCX0KICAgIAlwcmludGYoIlxuIik7CiAgICAgCiAgICAJQ19udW0gLT0gbGlzdF9zaXplOwogICAgCWNfbmV3ID0gcmVhbGxvYyhjX25ldywgc2l6ZW9mKGRvdWJsZSkgKiBDX251bSAqIDMpOwogICAgCQogICAgCWNfbmV3WzBdID0gcmVtb3ZlX0MoQ19udW0sIGxpc3Rfc2l6ZSwgbGlzdCwgY19vbGQsIGNfbmV3KTsKICAgIAkKICAgIAlmb3IoaSA9IDA7IGkgPCBDX251bTsgaSsrKXsKICAgIAkJZm9yKGogPSAwOyBqIDwgMzsgaisrKQogICAgCQkJcHJpbnRmKCIlZiAiLCBjX25ld1tpICogMyArIGpdKTsKICAgIAkJcHJpbnRmKCJcbiIpOwogICAgCX0KICAgIAlwcmludGYoIlxuIik7CiAgICAJZnJlZShjX29sZCk7CiAgICAJZnJlZShjX25ldyk7Cn0K