From 2e03749bb901494f857547cc518ad58eea76a098 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Tue, 2 Apr 2019 11:05:36 +0200 Subject: mg2d: add API for interpolating an initial guess from a provided grid --- ndarray.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'ndarray.c') diff --git a/ndarray.c b/ndarray.c index a733955..504bfb7 100644 --- a/ndarray.c +++ b/ndarray.c @@ -168,6 +168,54 @@ fail: return ret; } +int mg2di_ndarray_wrap(NDArray **result, unsigned int dims, + const size_t * const size, double *data, + const ptrdiff_t * const stride) +{ + NDArray *a; + int ret; + + if (!dims || dims >= INT_MAX) + return -EINVAL; + + a = calloc(1, sizeof(*a)); + if (!a) + return -ENOMEM; + + a->priv = calloc(1, sizeof(*a->priv)); + if (!a->priv) { + free(a); + return -ENOMEM; + } + + a->priv->shape = calloc(dims, sizeof(*a->priv->shape)); + if (!a->priv->shape) { + ret = -ENOMEM; + goto fail; + } + memcpy(a->priv->shape, size, dims * sizeof(*a->priv->shape)); + + a->priv->stride = calloc(dims, sizeof(*a->priv->stride)); + if (!a->priv->stride) { + ret = -ENOMEM; + goto fail; + } + memcpy(a->priv->stride, stride, dims * sizeof(*a->priv->shape)); + + a->dims = dims; + + a->data = data; + a->shape = a->priv->shape; + a->stride = a->priv->stride; + + *result = a; + + return 0; +fail: + mg2di_ndarray_free(&a); + return ret; +} + void mg2di_ndarray_free(NDArray **pa) { NDArray *a = *pa; -- cgit v1.2.3