/ libft / src / ft_vec / vec_addback.c
vec_addback.c
 1  /* ************************************************************************** */
 2  /*                                                                            */
 3  /*                                                        :::      ::::::::   */
 4  /*   vec_addback.c                                      :+:      :+:    :+:   */
 5  /*                                                    +:+ +:+         +:+     */
 6  /*   By: ll-hotel <ll-hotel@student.42lyon.fr>      +#+  +:+       +#+        */
 7  /*                                                +#+#+#+#+#+   +#+           */
 8  /*   Created: 2024/04/01 13:26:10 by ll-hotel          #+#    #+#             */
 9  /*   Updated: 2024/08/20 17:41:39 by ll-hotel         ###   ########.fr       */
10  /*                                                                            */
11  /* ************************************************************************** */
12  
13  #include "ft_basics.h"
14  #include "ft_ptr.h"
15  #include "ft_vec.h"
16  
17  void	*vec_addback(t_vec *vec, void *elem)
18  {
19  	if (vec->size >= vec->allocated_size)
20  	{
21  		vec->allocated_size += 1;
22  		vec->allocated_size *= 1.5;
23  		vec->array = ft_realloc(vec->array, vec->size * vec->elem_size, \
24  				vec->allocated_size * vec->elem_size);
25  	}
26  	if (vec->array == (void *)0)
27  		return (0);
28  	if (vec->elem_size > 8)
29  		ft_memmove(vec_at(vec, vec->size), elem, vec->elem_size);
30  	else
31  		ft_memmove(vec_at(vec, vec->size), &elem, vec->elem_size);
32  	vec->size += 1;
33  	return (vec_at(vec, vec->size - 1));
34  }