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.
17
int
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
}
ft_memcpy
void * ft_memcpy(void *dst, const void *src, size_t n)
Copies memory to destination.
Definition
ft_memcpy.c:15
s_vec
Definition
vec.h:20
s_vec::alloc_size
size_t alloc_size
Definition
vec.h:23
s_vec::len
size_t len
Definition
vec.h:24
s_vec::memory
unsigned char * memory
Definition
vec.h:21
s_vec::elem_size
size_t elem_size
Definition
vec.h:22
vec.h
vec_resize
int vec_resize(t_vec *src, size_t target_len)
Resizes vector.
Definition
vec_resize.c:17
vec_append
int vec_append(t_vec *dst, t_vec *src)
Appends vector to a vector.
Definition
vec_append.c:17
src
vec_append.c
Generated by
1.9.7