/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* ast_functions3.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: maiboyer +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/12/30 17:59:28 by maiboyer #+# #+# */ /* Updated: 2024/09/19 15:34:10 by rparodi ### ########.fr */ /* */ /* ************************************************************************** */ #include "me/mem/mem.h" #include "me/types.h" #include "me/vec/vec_ast.h" #include t_error vec_ast_push_front(t_vec_ast *vec, t_ast_node element) { t_usize i; if (vec->len == 0) return (vec_ast_push(vec, element)); i = vec->len - 1; if (vec->capacity < vec->len + 1 && \ vec_ast_reserve(vec, 3 * vec->len / 2 + 1)) return (ERROR); while (i > 0) { vec->buffer[i + 1] = vec->buffer[i]; i--; } vec->buffer[1] = vec->buffer[0]; vec->buffer[0] = element; vec->len++; return (NO_ERROR); } t_error vec_ast_pop_front(t_vec_ast *vec, t_ast_node *value) { t_usize i; if (vec->len <= 1) return (vec_ast_pop(vec, value)); i = 0; *value = vec->buffer[0]; vec->len--; while (i < vec->len) { vec->buffer[i] = vec->buffer[i + 1]; i++; } mem_set_zero(&vec->buffer[i], sizeof(*vec->buffer)); return (NO_ERROR); } void vec_ast_reverse(t_vec_ast *vec) { t_ast_node temporary; t_usize i; i = 0; while (i < vec->len / 2) { temporary = vec->buffer[vec->len - 1 - i]; vec->buffer[vec->len - 1 - i] = vec->buffer[i]; vec->buffer[i] = temporary; i++; } } t_error vec_ast_back(t_vec_ast *vec, t_ast_node **out) { t_ast_node *temporary; if (out == NULL) out = &temporary; if (vec->len != 0) return (*out = &vec->buffer[vec->len - 1], true); return (false); }