libft
Loading...
Searching...
No Matches
vec_append.c
Go to the documentation of this file.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* vec_append.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: tspoof <tspoof@student.hive.fi> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2022/12/12 22:48:37 by tspoof #+# #+# */
9/* Updated: 2022/12/15 19:47:14 by tspoof ### ########.fr */
10/* */
11/* ************************************************************************** */
12
13#include "vec.h"
14
15// Appends src memory to end of dst memory.
16// Resizes the dst memory if needed.
17int vec_append(t_vec *dst, t_vec *src)
18{
19 size_t alloc_size_min;
20 int ret;
21
22 if (!dst || !src)
23 return (-1);
24 ret = 1;
25 alloc_size_min = dst->len * dst->elem_size + src->len * src->elem_size;
26 if (dst->alloc_size * 2 < alloc_size_min)
27 ret = vec_resize(dst, dst->len + src->len);
28 else if (dst->alloc_size < alloc_size_min)
29 ret = vec_resize(dst, (dst->alloc_size / dst->elem_size) * 2);
30 if (ret == -1)
31 return (-1);
32 ft_memcpy(&dst->memory[dst->elem_size * dst->len],
33 src->memory,
34 src->len * src->elem_size);
35 dst->len = dst->len + src->len;
36 return (1);
37}
void * ft_memcpy(void *dst, const void *src, size_t n)
Copies memory to destination.
Definition ft_memcpy.c:15
Definition vec.h:20
size_t alloc_size
Definition vec.h:23
size_t len
Definition vec.h:24
unsigned char * memory
Definition vec.h:21
size_t elem_size
Definition vec.h:22
int vec_resize(t_vec *src, size_t target_len)
Resizes vector.
Definition vec_resize.c:17
int vec_append(t_vec *dst, t_vec *src)
Appends vector to a vector.
Definition vec_append.c:17