Add a dictionary traversal that also returns key
authorLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Wed, 17 Sep 2025 06:37:49 +0000 (08:37 +0200)
committerLukáš Jiřiště <gymnazium.jiriste@gmail.com>
Wed, 17 Sep 2025 06:40:37 +0000 (08:40 +0200)
ft_struct/ft_dict_traversal.c
inc/ft_struct.h

index ccc3df43055b6e5b618eca4ef1d1b5fdfbcf0f1f..cea55db183405912b88a3d79cd3e55d5cdc7a200 100644 (file)
@@ -6,14 +6,23 @@ t_ft_stat             ft_dict_traversal_init(t_dict_traversal *traversal, t_dict *dict)
        return (ft_rbtree_traversal_init(&traversal->traversal, &dict->tree, inorder));
 }
 
-void   *ft_dict_traverse(t_dict_traversal *traversal)
+t_dict_entry   ft_dict_traverse_full(t_dict_traversal *traversal)
 {
-       void    *return_composite;
+       t_dict_entry    dict_entry;
+
+       dict_entry.key = ft_rbtree_traverse(&traversal->traversal);
+       if (!dict_entry.key)
+       {
+               dict_entry.el = NULL;
+               return (dict_entry);
+       }
+       dict_entry.el = (char *)dict_entry.key + traversal->key_size;
+       return (dict_entry);
+}
 
-       return_composite = ft_rbtree_traverse(&traversal->traversal);
-       if (!return_composite)
-               return (NULL);
-       return ((char *)return_composite + traversal->key_size);
+void   *ft_dict_traverse(t_dict_traversal *traversal)
+{
+       return (ft_dict_traverse_full(traversal).el);
 }
 
 void   ft_dict_traversal_free(t_dict_traversal *traversal)
index f1bfbf457aa9b3165b5c088bcfd998df21e22beb..3f072d8f71036f5d66a3574bb378332a763631d2 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <marvin@42.fr>                    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/06/20 16:59:43 by ljiriste          #+#    #+#             */
-/*   Updated: 2025/08/14 14:41:41 by ljiriste         ###   ########.fr       */
+/*   Updated: 2025/09/17 08:36:29 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -131,6 +131,12 @@ t_ft_stat  ft_dict_insert(t_dict *dict, void *key, void *element);
 void           *ft_dict_access(t_dict *dict, void *key);
 void           ft_dict_delete(t_dict *dict, void *key, t_free_fun free_key, t_free_fun free_el);
 
+typedef struct s_dict_entry
+{
+       void    *key;
+       void    *el;
+}                      t_dict_entry;
+
 typedef struct s_dict_traversal
 {
        size_t                          key_size;
@@ -138,6 +144,7 @@ typedef struct s_dict_traversal
 }                                              t_dict_traversal;
 
 t_ft_stat              ft_dict_traversal_init(t_dict_traversal *traversal, t_dict *dict);
+t_dict_entry   ft_dict_traverse_full(t_dict_traversal *traversal);
 void                   *ft_dict_traverse(t_dict_traversal *traversal);
 void                   ft_dict_traversal_free(t_dict_traversal *traversal);