Add some t_vec functions and change name
authorLukas Jiriste <ljiriste@student.42prague.com>
Mon, 11 Dec 2023 09:27:36 +0000 (10:27 +0100)
committerLukas Jiriste <ljiriste@student.42prague.com>
Mon, 11 Dec 2023 09:27:36 +0000 (10:27 +0100)
Add functions for inserting and erasing multiple elements.
Rename dir ft_vec to ft_arr and rename ft_vec.h to ft_arr.h for future
implementation of other array structures (matrices).

Makefile
ft_arr/ft_vec_access.c [moved from ft_vec/ft_vec_access.c with 92% similarity]
ft_arr/ft_vec_append.c [moved from ft_vec/ft_vec_append.c with 71% similarity]
ft_arr/ft_vec_erase.c [moved from ft_vec/ft_vec_erase.c with 64% similarity]
ft_arr/ft_vec_free.c [moved from ft_vec/ft_vec_free.c with 92% similarity]
ft_arr/ft_vec_init.c [moved from ft_vec/ft_vec_init.c with 88% similarity]
ft_arr/ft_vec_insert.c [moved from ft_vec/ft_vec_insert.c with 73% similarity]
ft_arr/ft_vec_reserve.c [moved from ft_vec/ft_vec_reserve.c with 89% similarity]
inc/ft_arr.h [moved from inc/ft_vec.h with 61% similarity]
inc/libft.h

index 035bc78abab3dda7febed19aefd689923f11869a..7bd247532cd4cac73e7b185ca41ebee40e2c2346 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -7,7 +7,7 @@ RM := rm -f
 INCDIR = ./inc
 INCLUDE := $(addprefix -I, $(INCDIR))
 
-SRCDIR := ft_gen ft_math ft_str ft_mem ft_io ft_check ft_conv ft_lst ft_vec
+SRCDIR := ft_gen ft_math ft_str ft_mem ft_io ft_check ft_conv ft_lst ft_arr
 
 SRCgen :=      ft_swap.c                               \
 
@@ -85,7 +85,7 @@ SRClst        :=      ft_lst_reverse.c                \
                        ft_lst_sort.c                   \
                        ft_lst_sorted_insert.c  \
 
-SRCvec :=      ft_vec_init.c                   \
+SRCarr :=      ft_vec_init.c                   \
                        ft_vec_reserve.c                \
                        ft_vec_insert.c                 \
                        ft_vec_append.c                 \
similarity index 92%
rename from ft_vec/ft_vec_access.c
rename to ft_arr/ft_vec_access.c
index d47d9790e61fb129cc420b4b9c6c9575f0865f2d..e4121294411490c44b9597a4a1505e359cb539a7 100644 (file)
@@ -6,11 +6,11 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 17:14:49 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/09 17:25:17 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:21:49 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 #include <stddef.h>
 
 void   *ft_vec_access(t_vec *vec, size_t index)
similarity index 71%
rename from ft_vec/ft_vec_append.c
rename to ft_arr/ft_vec_append.c
index f05465fe2c348dea86eae61578e0d7d7b0975d25..fb5e0da74aedaefd0e983ee913dea183121e69cc 100644 (file)
@@ -6,15 +6,18 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 16:39:20 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/09 17:10:27 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:21:49 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 
-t_vec_stat     ft_vec_append(t_vec *vec, const void *element)
+t_arr_stat     ft_vec_append(t_vec *vec, const void *element)
 {
-       if (!vec)
-               return (invalid_input);
-       return (ft_vec_insert(vec, element, vec->size));
+       return (ft_vec_append_range(vec, element, 1));
+}
+
+t_arr_stat     ft_vec_append_range(t_vec *vec, const void *element, size_t count)
+{
+       return (ft_vec_insert_range(vec, element, count, vec->size));
 }
similarity index 64%
rename from ft_vec/ft_vec_erase.c
rename to ft_arr/ft_vec_erase.c
index 6c1cfc834085d03aec6d70d568bd3a8d791233ec..07f67c689bf7825d340aaa21faf85ffcfd5998b0 100644 (file)
@@ -6,21 +6,35 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 17:10:39 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/10 15:01:35 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:24:50 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 #include "libft.h"
 
-t_vec_stat     ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *))
+t_arr_stat     ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *))
 {
-       if (!vec || index == SIZE_MAX)
+       return (ft_vec_erase_range(vec, 1, index, free_el));
+}
+
+t_arr_stat     ft_vec_erase_range(t_vec *vec, size_t count, size_t index, void (*free_el)(void *))
+{
+       void    *p;
+
+       if (!vec || index + count > vec->size || index > SIZE_MAX - count)
                return (invalid_input);
-       --vec->size;
-       ft_memmove(vec->vec + index, vec->vec + vec->el_size * (index + 1),
+       vec->size -= count;
+       ft_memmove(vec->vec + index, vec->vec + vec->el_size * (index + count),
                        vec->el_size * (vec->size - index));
        if (free_el)
-               free_el(vec->vec + vec->size * vec->el_size);
+       {
+               p = vec->vec + vec->size * vec->el_size;
+               while (p < vec->vec + (vec->size + count) * vec->el_size)
+               {
+                       free_el(p);
+                       p += vec->el_size;
+               }
+       }
        return (success);
 }
similarity index 92%
rename from ft_vec/ft_vec_free.c
rename to ft_arr/ft_vec_free.c
index d39f0baa7f712fb3b2f5dbefdd83de660972e696..632d04207413929de5c740b408032238772582be 100644 (file)
@@ -6,11 +6,11 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 17:37:13 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/10 11:52:49 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:21:49 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 #include <stdlib.h>
 
 void   ft_vec_free(t_vec *vec, void (*free_el)(void *))
similarity index 88%
rename from ft_vec/ft_vec_init.c
rename to ft_arr/ft_vec_init.c
index 573130820403b62119261a794ea7a41bf16832ed..ca58f03808da947d0e29b6259ff3f97c6c1d6a05 100644 (file)
@@ -6,15 +6,15 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 16:04:26 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/09 17:49:19 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:21:49 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 #include "libft.h"
 #include <stddef.h>
 
-t_vec_stat     ft_vec_init(t_vec *vec, size_t el_size)
+t_arr_stat     ft_vec_init(t_vec *vec, size_t el_size)
 {
        if (el_size == 0 || !vec)
                return (invalid_input);
similarity index 73%
rename from ft_vec/ft_vec_insert.c
rename to ft_arr/ft_vec_insert.c
index 39efe99369aafac5139a31b4d3933a6b2878a987..86a7ca668fc73af9f9db50e91df40d3df254dd43 100644 (file)
@@ -6,14 +6,14 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 16:50:57 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/09 18:19:13 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:23:44 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 #include "libft.h"
 
-static t_vec_stat      ft_vec_enlarge(t_vec *vec)
+static t_arr_stat      ft_vec_enlarge(t_vec *vec)
 {
        if (vec->capacity == SIZE_MAX)
                return (alloc_fail);
@@ -35,19 +35,26 @@ static t_vec_stat   ft_vec_enlarge(t_vec *vec)
        return (success);
 }
 
-t_vec_stat     ft_vec_insert(t_vec *vec, void const *element, size_t index)
+t_arr_stat     ft_vec_insert(t_vec *vec, void const *element, size_t index)
 {
-       if (!element || !vec || index == SIZE_MAX)
+       return (ft_vec_insert_range(vec, element, 1, index));
+}
+
+t_arr_stat ft_vec_insert_range(t_vec *vec, void const *element, size_t count, size_t index)
+{
+       if (count == 0)
+               return (success);
+       if (!element || !vec || index > SIZE_MAX - count)
                return (invalid_input);
-       while (vec->size == vec->capacity || index >= vec->capacity)
+       while (vec->size == vec->capacity || index + count > vec->capacity)
        {
                if (ft_vec_enlarge(vec))
                        return (alloc_fail);
        }
        if (index < vec->size)
-               ft_memmove(vec->vec + vec->el_size * (index + 1),
+               ft_memmove(vec->vec + vec->el_size * (index + count),
                        vec->vec + vec->el_size * index, vec->el_size * (vec->size - index));
-       ft_memcpy(vec->vec + vec->el_size * index, element, vec->el_size);
+       ft_memcpy(vec->vec + vec->el_size * index, element, vec->el_size * count);
        if (index > vec->size)
                vec->size = index;
        ++vec->size;
similarity index 89%
rename from ft_vec/ft_vec_reserve.c
rename to ft_arr/ft_vec_reserve.c
index 6db8ce7d4f8d6a29a6643619d7e5f1e29385a253..11607852b9ce869351ebd838ccc90b49ad0d026a 100644 (file)
@@ -6,15 +6,15 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 16:17:46 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/09 18:11:38 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:21:49 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#include "ft_vec.h"
+#include "ft_arr.h"
 #include "libft.h"
 #include <stdlib.h>
 
-t_vec_stat     ft_vec_reserve(t_vec *vec, size_t capacity)
+t_arr_stat     ft_vec_reserve(t_vec *vec, size_t capacity)
 {
        void    *tmp;
 
similarity index 61%
rename from inc/ft_vec.h
rename to inc/ft_arr.h
index 830b210bb85b9a562200ee9f1f6a73e5a6c5a631..b2478ce391fd2b63b760ee2caa8b402d6975ba53 100644 (file)
@@ -1,17 +1,17 @@
 /* ************************************************************************** */
 /*                                                                            */
 /*                                                        :::      ::::::::   */
-/*   ft_vec.h                                           :+:      :+:    :+:   */
+/*   ft_arr.h                                           :+:      :+:    :+:   */
 /*                                                    +:+ +:+         +:+     */
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/12/09 13:58:15 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/10 11:54:16 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:22:24 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
-#ifndef FT_VEC_H
-# define FT_VEC_H
+#ifndef FT_ARR_H
+# define FT_ARR_H
 
 # include <stddef.h>
 
 #  define V_DEFAULT_CAPACITY 8
 # endif
 
-typedef enum e_vec_stat
+typedef enum e_arr_stat
 {
        success,
        alloc_fail,
        invalid_size,
        invalid_input,
-}                      t_vec_stat;
+}                      t_arr_stat;
 
 // It should be possible to remove el_size with the use of macros
 typedef struct s_vec
@@ -36,14 +36,15 @@ typedef struct s_vec
        void    *vec;
 }                      t_vec;
 
-t_vec_stat     ft_vec_init(t_vec *vec, size_t  el_size);
+t_arr_stat     ft_vec_init(t_vec *vec, size_t el_size);
 void           ft_vec_free(t_vec *vec, void (*free_el)(void *));
-
-t_vec_stat     ft_vec_reserve(t_vec *vec, size_t capacity);
-t_vec_stat     ft_vec_append(t_vec *vec, const void *element);
-t_vec_stat     ft_vec_insert(t_vec *vec, const void *element, size_t index);
-t_vec_stat     ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *));
-
+t_arr_stat     ft_vec_reserve(t_vec *vec, size_t capacity);
+t_arr_stat     ft_vec_insert(t_vec *vec, const void *element, size_t index);
+t_arr_stat     ft_vec_append(t_vec *vec, const void *element);
+t_arr_stat     ft_vec_insert_range(t_vec *vec, const void *element, size_t count, size_t index);
+t_arr_stat     ft_vec_append_range(t_vec *vec, const void *element, size_t count);
+t_arr_stat     ft_vec_erase(t_vec *vec, size_t index, void (*free_el)(void *));
+t_arr_stat     ft_vec_erase_range(t_vec *vec, size_t count, size_t index, void (*free_el)(void *));
 void           *ft_vec_access(t_vec *vec, size_t index);
 
 #endif
index 1c4eb1a6c670f0e146994d67a9a79f4e8b94283f..33d09625a043184ee34496462cd8bed636c93eb9 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2023/08/15 12:58:15 by ljiriste          #+#    #+#             */
-/*   Updated: 2023/12/09 17:27:06 by ljiriste         ###   ########.fr       */
+/*   Updated: 2023/12/11 10:17:16 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -21,6 +21,6 @@
 # include "ft_mem.h"
 # include "ft_io.h"
 # include "ft_lst.h"
-# include "ft_vec.h"
+# include "ft_arr.h"
 
 #endif