cvecadv.c 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "cvecadv.h"
  2. void* cvector_copy_func(void** vec_dest_src, void* vec_src, size_t size_object) {
  3. size_t size = 0;
  4. void* vec_dest = *vec_dest_src;
  5. void* src_ptr = NULL;
  6. void* dest_ptr = NULL;
  7. if (vec_src) {
  8. src_ptr = cvector_unpack_vec(vec_src);
  9. size = cvector_sizeof(cvector_get_capacity(vec_src), size_object);
  10. if (vec_dest)
  11. cvector_destroy(vec_dest);
  12. dest_ptr = (void *) malloc(size);
  13. memcpy(dest_ptr, src_ptr, size);
  14. dest_ptr = cvector_pack_vec(dest_ptr);
  15. } else {
  16. if (vec_dest)
  17. cvector_destroy(vec_dest);
  18. return NULL;
  19. }
  20. *vec_dest_src = dest_ptr;
  21. return dest_ptr;
  22. }
  23. void* cvector_concatenation(void** vec_dest_src, void** vec_src_ptr, size_t size_object) {
  24. void* vec_dest = *vec_dest_src;
  25. void* vec_src = *vec_src_ptr;
  26. size_t size_src = cvector_get_size(vec_src);
  27. size_t size_dest = cvector_get_size(vec_dest);
  28. void* dest_vector_start = cvector_unpack_vec(vec_dest);
  29. void* new_vec = NULL;
  30. void* vectorptr = NULL;
  31. if (size_src + size_dest > cvector_get_capacity(vec_dest)) {
  32. new_vec = malloc(cvector_sizeof(size_src + size_dest, size_object));
  33. memcpy(new_vec, dest_vector_start, cvector_sizeof(size_dest, size_object));
  34. cvector_free(vec_dest);
  35. new_vec = cvector_pack_vec(new_vec);
  36. cvector_set_capacity(new_vec, size_dest + size_src);
  37. } else new_vec = vec_dest;
  38. vectorptr = new_vec + size_dest * size_object;
  39. memcpy(vectorptr, vec_src, size_object * size_src);
  40. cvector_set_size(new_vec, size_dest + size_src);
  41. cvector_free(vec_src);
  42. *vec_src_ptr = NULL;
  43. *vec_dest_src = new_vec;
  44. return new_vec;
  45. }