#include <assert.h>
#include <stdlib.h>
#include <stdio.h>
#include "vector.h"
struct Vector
VectorConstruct(size_t dim)
{
    struct Vector vec = {
        malloc(dim * sizeof(vec.data)),
        dim,
    };
    if (!vec.data) {
        fprintf(stderr, "VectorConstruct(%zu): out of memory\n", dim);
        exit(1);
    }
    return vec;
}
void
VectorDestruct(struct Vector *vec)
{
    free(vec->data);
#   ifndef NDEBUG
    *(double *) &vec->data = 0;
#   endif
}
double *
VectorElementPtr(struct Vector *vec, size_t index)
{
    assert(index < vec->dim);
    return &vec->data[index];
}
double
VectorElement(const struct Vector *vec, size_t index)
{
    assert(index < vec->dim);
    return vec->data[index];
}