/* ************************************************************************** */
/* */
/* :::::::: */
/* ft_select :+: :+: */
/* +:+ */
/* Author: Noah Loomans +#+ */
/* <nloomans@student.codam.nl> +#+ */
/* #+# #+# */
/* License: GPLv3 ######## odam.nl */
/* */
/* ************************************************************************** */
#include <stddef.h>
#include <libft.h>
#include "error.h"
#include "derive.h"
static t_error malloc_rows(
struct s_state_option ****res,
struct s_derived_dimensions dimensions)
{
size_t row_index;
*res = ft_memalloc(sizeof(**res) * dimensions.rows);
if (*res == NULL)
return (errorf("unable to malloc rows array"));
row_index = 0;
while (row_index < dimensions.rows)
{
(*res)[row_index] = ft_memalloc(sizeof(***res) * dimensions.columns);
if ((*res)[row_index] == NULL)
return (errorf("unable to malloc column in rows array"));
row_index++;
}
return (ERROR_NULL);
}
t_error derive_rows(
struct s_state_option ****res,
struct s_derived_dimensions dimensions,
t_list2_meta options)
{
size_t row_index;
size_t column_index;
t_list2_conn *conn;
t_error error;
error = malloc_rows(res, dimensions);
if (is_error(error))
return (error);
conn = options.first;
column_index = 0;
while (column_index < dimensions.columns)
{
row_index = 0;
while (row_index < dimensions.rows && conn != NULL)
{
(*res)[row_index][column_index] = unpack_option(conn);
conn = conn->next;
row_index++;
}
column_index++;
}
return (ERROR_NULL);
}
void derive_free_rows(
struct s_derived_dimensions dimensions,
struct s_state_option ****rows)
{
size_t row_index;
row_index = 0;
while (row_index < dimensions.rows)
{
ft_memdel((void **)&(*rows)[row_index]);
row_index++;
}
ft_memdel((void **)rows);
}