Though compilation is only possible with the -fpermissive flag.
It is not a great idea to use everything (or even most things) in C++,
but it is better to be consistent and it also makes it easier to migrate
a project using Libft from C to C++.
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/09/05 12:00:16 by ljiriste #+# #+# */
-/* Updated: 2024/03/05 09:15:29 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:44:18 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_PRINTF_H
# define FT_PRINTF_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include <stdarg.h>
typedef struct s_flags
t_conv parse_format(const char **format, va_list *args);
void create_padding(t_to_print *tp, t_conv conv);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/06/28 14:47:42 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:22:53 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:47:04 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include <stddef.h>
#include "ft_lst.h"
-t_list *ft_lst_find(t_list *lst, void *content_ref, int (*cmp)())
+t_list *ft_lst_find(t_list *lst, void *content_ref, int (*cmp)(void *, void *))
{
while (lst)
{
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/06/28 14:42:33 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:22:53 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:45:50 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_lst.h"
void ft_lst_foreach_if(t_list *lst, void (*f)(void *),
- void *content_ref, int (*cmp)())
+ void *content_ref, int (*cmp)(void *, void *))
{
while (lst)
{
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/06/28 14:49:53 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:22:53 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:50:14 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
}
void ft_lst_remove_if(t_list **lst, void *content_ref,
- int (*cmp)(), void (*free_fct)(void *))
+ int (*cmp)(void *, void *), void (*free_fct)(void *))
{
t_list *prev;
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/06/28 15:13:29 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:55:45 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:51:49 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_lst.h"
#include "libft.h"
-static void ft_max_to_end(t_list *lst, int (*cmp)(), int size)
+static void ft_max_to_end(t_list *lst, int (*cmp)(void *, void *), int size)
{
int i;
}
// Bubble sort
-void ft_lst_sort(t_list **lst, int (*cmp)())
+void ft_lst_sort(t_list **lst, int (*cmp)(void *, void *))
{
int size;
int i;
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/06/28 15:53:26 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:22:53 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:52:23 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include <stdlib.h>
#include "ft_lst.h"
-static void insert_after(t_list *prev, t_list *new)
+static void insert_after(t_list *prev, t_list *new_el)
{
- if (!new)
+ if (!new_el)
return ;
- new->next = prev->next;
- prev->next = new;
+ new_el->next = prev->next;
+ prev->next = new_el;
return ;
}
-void ft_lst_sorted_insert(t_list **lst, t_list *new, int (*cmp)())
+void ft_lst_sorted_insert(t_list **lst, t_list *new_el, int (*cmp)(void *, void *))
{
t_list *prev;
t_list *cur;
- if (!lst || !new)
+ if (!lst || !new_el)
return ;
if (!*lst)
{
- *lst = new;
+ *lst = new_el;
return ;
}
prev = NULL;
cur = *lst;
while (cur)
{
- if (cmp(new->content, cur->content) <= 0)
+ if (cmp(new_el->content, cur->content) <= 0)
break ;
prev = cur;
cur = cur->next;
}
if (prev)
- insert_after(prev, new);
+ insert_after(prev, new_el);
else
- ft_lstadd_front(lst, new);
+ ft_lstadd_front(lst, new_el);
return ;
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/06/28 17:13:15 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:55:15 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:46:36 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_lst.h"
#include "libft.h"
-void ft_lst_sorted_merge(t_list **lst1, t_list *lst2, int (*cmp)())
+void ft_lst_sorted_merge(t_list **lst1, t_list *lst2, int (*cmp)(void *, void *))
{
t_list *main;
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/08/16 13:33:28 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:22:53 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:51:05 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include <stddef.h>
#include "ft_lst.h"
-void ft_lstadd_back(t_list **lst, t_list *new)
+void ft_lstadd_back(t_list **lst, t_list *new_el)
{
- if (!new)
+ if (!new_el)
return ;
if (*lst == NULL)
{
- *lst = new;
+ *lst = new_el;
return ;
}
- ft_lstlast(*lst)->next = new;
+ ft_lstlast(*lst)->next = new_el;
return ;
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/08/16 13:26:20 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:22:53 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:50:53 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_lst.h"
-void ft_lstadd_front(t_list **lst, t_list *new)
+void ft_lstadd_front(t_list **lst, t_list *new_el)
{
- if (!new)
+ if (!new_el)
return ;
- new->next = *lst;
- *lst = new;
+ new_el->next = *lst;
+ *lst = new_el;
return ;
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/11/26 16:48:32 by ljiriste #+# #+# */
-/* Updated: 2024/11/28 11:13:14 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:54:48 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
return ;
}
-t_ft_stat add_lookahead(t_lr1_item *new, t_lr1_item *item,
+t_ft_stat add_lookahead(t_lr1_item *new_item, t_lr1_item *item,
const t_vec *rules, const t_vec *tokens)
{
t_ft_stat res;
- res = ft_vec_init(&new->lookahead, sizeof(t_token));
+ res = ft_vec_init(&new_item->lookahead, sizeof(t_token));
if (res != success)
return (res);
++item->core.position;
- res = expand_lookahead(&new->lookahead, &item->core, rules, tokens);
- remove_nonterminals(&new->lookahead, tokens);
+ res = expand_lookahead(&new_item->lookahead, &item->core, rules, tokens);
+ remove_nonterminals(&new_item->lookahead, tokens);
--item->core.position;
if (res != success)
{
- ft_vec_free(&new->lookahead, ft_free_token);
+ ft_vec_free(&new_item->lookahead, ft_free_token);
return (res);
}
- if (ft_vec_contains(&new->lookahead, &g_empty_token, void_cmp_token_type))
+ if (ft_vec_contains(&new_item->lookahead, &g_empty_token, void_cmp_token_type))
{
- remove_token(&new->lookahead, &g_empty_token);
- res = add_to_lookahead(&item->lookahead, &new->lookahead);
+ remove_token(&new_item->lookahead, &g_empty_token);
+ res = add_to_lookahead(&item->lookahead, &new_item->lookahead);
}
return (res);
}
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/11/26 16:57:15 by ljiriste #+# #+# */
-/* Updated: 2024/11/28 12:07:50 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:54:02 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef PT_CONSTRUCTOR_H
# define PT_CONSTRUCTOR_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include "libft.h"
typedef struct s_marked_grammar_rule
size_t get_token_position(const t_token *token, const t_vec *tokens);
size_t get_rule_index(const t_grammar_rule *rule, const t_vec *rules);
-t_ft_stat add_lookahead(t_lr1_item *new, t_lr1_item *item,
+t_ft_stat add_lookahead(t_lr1_item *new_item, t_lr1_item *item,
const t_vec *rules, const t_vec *tokens);
t_ft_stat expand_lookahead(
t_vec *lookahead, const t_marked_grammar_rule *rule,
void remove_zeroth_rule(t_vec *rules);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif // PT_CONSTRUCTOR_H
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 13:58:15 by ljiriste #+# #+# */
-/* Updated: 2024/12/17 20:34:11 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:34:00 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
# define V_DEFAULT_CAPACITY 8
# endif
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
typedef t_ft_stat t_arr_stat;
// It should be possible to remove el_size with the use of macros?
t_arr_stat ft_mat_zeros(t_mat *matrix, size_t rows, size_t cols);
t_arr_stat ft_mat_fill(t_mat *mat, void *filler);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 11:55:15 by ljiriste #+# #+# */
-/* Updated: 2024/04/10 12:54:40 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:34:58 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_CHECK_H
# define FT_CHECK_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
int ft_isalnum(int c);
int ft_isalpha(int c);
int ft_isdigit(int c);
int ft_isascii(int c);
int ft_isint(const char *str);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 11:53:15 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:13:41 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:35:22 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
# include <stdint.h>
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
int ft_toupper(int c);
int ft_tolower(int c);
char *ft_uitoa_base(uintmax_t n, const char *base);
char *ft_ctoa(char c);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 12:21:15 by ljiriste #+# #+# */
-/* Updated: 2024/07/21 21:36:48 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:35:37 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_GEN_H
# define FT_GEN_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
void ft_swap_int(int *a, int *b);
void ft_swap(void **a, void **b);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 11:38:28 by ljiriste #+# #+# */
-/* Updated: 2024/03/09 00:00:58 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:35:54 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_IO_H
# define FT_IO_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include <stdarg.h>
void ft_putchar_fd(char c, int fd);
int ft_vdprintf(int fd, const char *format, va_list *args);
char *get_next_line(int fd);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 11:42:15 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:13:44 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:37:34 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_LST_H
# define FT_LST_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
typedef struct s_list
{
struct s_list *next;
} t_list;
t_list *ft_lstnew(void *content);
-void ft_lstadd_front(t_list **lst, t_list *new);
+void ft_lstadd_front(t_list **lst, t_list *new_el);
int ft_lstsize(t_list *lst);
t_list *ft_lstlast(t_list *lst);
-void ft_lstadd_back(t_list **lst, t_list *new);
+void ft_lstadd_back(t_list **lst, t_list *new_el);
void ft_lstdelone(t_list *lst, void (*del)(void *));
void ft_lstclear(t_list **lst, void (*del)(void *));
void ft_lstiter(t_list *lst, void (*f)(void *));
int (*cmp)(), void (*free_fct)(void *));
void ft_lst_reverse(t_list **lst);
void ft_lst_sort(t_list **lst, int (*cmp)());
-void ft_lst_sorted_insert(t_list **lst, t_list *new, int (*cmp)());
+void ft_lst_sorted_insert(t_list **lst, t_list *new_el, int (*cmp)());
void ft_lst_sorted_merge(t_list **lst1, t_list *lst2, int (*cmp)());
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 12:19:15 by ljiriste #+# #+# */
-/* Updated: 2024/02/23 09:01:20 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:37:45 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_MATH_H
# define FT_MATH_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include <stddef.h>
int ft_abs(int n);
int ft_min(int a, int b);
size_t ft_mins(size_t a, size_t b);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 12:45:15 by ljiriste #+# #+# */
-/* Updated: 2023/12/09 15:13:44 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:37:59 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_MEM_H
# define FT_MEM_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include <stddef.h>
void *ft_memset(void *s, int c, size_t n);
void ft_bzero(void *s, size_t n);
int ft_memcmp(const void *s1, const void *s2, size_t n);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/27 21:21:54 by ljiriste #+# #+# */
-/* Updated: 2025/01/13 19:47:16 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 21:07:08 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_PARSE_H
# define FT_PARSE_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include "ft_arr.h"
# include <sys/types.h>
void ft_parse_tree_free(void *node);
void ft_parsing_table_free(t_parsing_table *table);
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif // FT_PARSE_H
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/20 12:40:28 by ljiriste #+# #+# */
-/* Updated: 2024/07/04 10:14:10 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:38:27 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_STAT_H
# define FT_STAT_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
typedef enum e_ft_stat
{
success,
non_specific_failure,
} t_ft_stat;
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif //FT_STAT_H
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/12/09 11:50:15 by ljiriste #+# #+# */
-/* Updated: 2024/08/02 14:02:44 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:38:41 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_STR_H
# define FT_STR_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include <stddef.h>
size_t ft_strlen(const char *s);
char *ft_strmapi(const char *s, char (*f)(unsigned int, char));
void ft_striteri(char *s, void (*f)(unsigned int, char *));
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif
/* By: ljiriste <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/20 16:59:43 by ljiriste #+# #+# */
-/* Updated: 2024/06/21 15:24:34 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:38:56 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef FT_STRUCT_H
# define FT_STRUCT_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include "ft_arr.h"
# include <sys/types.h>
void *ft_stack_pop_forget(t_stack *stack);
void ft_stack_free(t_stack *stack, void (*free_el)(void *));
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif //FT_STRUCT_H
/* By: ljiriste <ljiriste@student.42prague.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/08/15 12:58:15 by ljiriste #+# #+# */
-/* Updated: 2024/06/20 17:21:06 by ljiriste ### ########.fr */
+/* Updated: 2025/03/26 20:39:11 by ljiriste ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef LIBFT_H
# define LIBFT_H
+# ifdef __cplusplus
+extern "C" {
+# endif // __cplusplus
+
# include "ft_gen.h"
# include "ft_math.h"
# include "ft_check.h"
# include "ft_stat.h"
+# ifdef __cplusplus
+}
+# endif // __cplusplus
+
#endif