Select Git revision
-
Michaël El Kharroubi authoredMichaël El Kharroubi authored
vector.c 1.66 KiB
#include <stdio.h>
#include <stdlib.h>
#include "vector.h"
double_vector_t *init_vector(uint_t N)
{
double_vector_t *vec = malloc(sizeof(double_vector_t));
vec->components = malloc(N * sizeof(double));
vec->N = N;
if (vec == NULL)
{
perror("Can't allocate memory");
exit(EXIT_FAILURE);
}
return vec;
}
double_vector_t *iota(uint_t N)
{
double_vector_t *vec = init_vector(N);
for (uint_t i = 0; i < N; i++)
{
vec->components[i] = i;
}
return vec;
}
double_vector_t *apply_function(double_vector_t *vec, double_function_t f)
{
double_vector_t *res = init_vector(vec->N);
for (uint_t i = 0; i < vec->N; i++)
{
res->components[i] = f(vec->components[i]);
}
return res;
}
void fill_vector(double_vector_t *vec, double value)
{
for (uint_t i = 0; i < vec->N; i++)
{
vec->components[i] = value;
}
}
void export_vector(const char *filename, double_vector_t *vec)
{
FILE *output = fopen(filename, "w");
uint_t endianness = 0x01020304;
vector_metadata_t metadata;
// Return the endianness by accessing the first byte in memory
// which should be 1 if big-endian and 4 if little-endian
metadata.endianness = *((byte_t *)(&endianness)) == 4;
metadata.size_of_a_component = sizeof(double);
metadata.number_of_component = vec->N;
fwrite(&metadata, sizeof(vector_metadata_t), 1, output);
fwrite(vec->components,
metadata.size_of_a_component,
metadata.number_of_component,
output);
fclose(output);
}
void destroy_vector(double_vector_t **vec)
{
free((*vec)->components);
free(*vec);
*vec = NULL;
}