tgrekov-pipex
HIVE pipex May 2024
Loading...
Searching...
No Matches
dedupe.c
Go to the documentation of this file.
1/* ************************************************************************** */
2/* */
3/* ::: :::::::: */
4/* dedupe.c :+: :+: :+: */
5/* +:+ +:+ +:+ */
6/* By: tgrekov <tgrekov@student.hive.fi> +#+ +:+ +#+ */
7/* +#+#+#+#+#+ +#+ */
8/* Created: 2024/04/22 06:05:01 by tgrekov #+# #+# */
9/* Updated: 2024/05/20 12:27:49 by tgrekov ### ########.fr */
10/* */
11/* ************************************************************************** */
12
20#include <stdlib.h>
21#include <libft.h>
22#include "utils.h"
23
35void **dedupe(void **arr,
36 int (*compare)(void *, void *),
37 void *(*copy)(void *))
38{
39 int len;
40 void **arr2;
41 void **arr3;
42 int i;
43 int i2;
44
45 len = arr_len(arr);
46 arr2 = ft_calloc(len + 1, sizeof(void *));
47 if (!arr2)
48 return (err("malloc()", 0));
49 i = 0;
50 i2 = 0;
51 while (arr[i])
52 {
53 if (!arr_has(arr2, arr[i++], compare))
54 {
55 arr2[i2] = copy(arr[i - 1]);
56 if (arr[i - 1] && !arr2[i2++])
57 return (arr_free(arr2));
58 }
59 }
60 arr3 = arr_cut(arr2, i2);
61 free(arr2);
62 return (arr3);
63}
void ** arr_cut(void **arr, int len)
Create new null-terminated array containing first len elements of arr.
Definition arr_cut.c:32
void ** arr_free(void **arr)
Free each element in a null-terminated array, and then the array itself.
Definition arr_free.c:29
int arr_has(void **arr, void *content, int(*compare)(void *, void *))
Check null-terminated array arr for entry content using comparison function compare.
Definition arr_has.c:30
int arr_len(void **arr)
Count number of elements in a null-terminated array.
Definition arr_len.c:26
void ** dedupe(void **arr, int(*compare)(void *, void *), void *(*copy)(void *))
Create new null-terminated array containing only unique values from arr, checked with compare,...
Definition dedupe.c:35
void * err(const char *str, void *retval)
Wrapper around perror() that always returns retval.
Definition err.c:29
void * ft_calloc(size_t count, size_t size)
Allocates count * size bytes with malloc and returns a pointer to the result.
Definition ft_calloc.c:34
static void * copy(void *str)
Duplicate a path string and append a forward slash.
Definition get_paths.c:53
static int compare(void *a, void *b)
Compare path string a against path string b, which will always have a trailing forward slash.
Definition get_paths.c:31