new matrix allocation mechanism

This commit is contained in:
Florian Stecker
2019-02-08 13:35:02 +01:00
parent 3d8378aa16
commit 870ae7d2d2
6 changed files with 152 additions and 154 deletions

24
draw.c
View File

@@ -13,22 +13,22 @@ vector_t cross(vector_t a, vector_t b)
vector_t apply(DrawingContext *ctx, gsl_matrix *m, vector_t x)
{
gsl_vector *tmp = getTempVector(ctx);
gsl_vector *tmp2 = getTempVector(ctx);
gsl_vector *tmp = getTempVector(ctx->ws);
gsl_vector *tmp2 = getTempVector(ctx->ws);
vector_t out;
LOOP(i) gsl_vector_set(tmp, i, x.x[i]);
gsl_blas_dgemv(CblasNoTrans, 1.0, m, tmp, 0.0, tmp2);
LOOP(i) out.x[i] = gsl_vector_get(tmp2, i);
releaseTempVectors(ctx, 2);
releaseTempVectors(ctx->ws, 2);
}
int fixedPoints(DrawingContext *ctx, const char *word, vector_t *out)
{
gsl_matrix *tmp = getTempMatrix(ctx);
gsl_matrix *ev = getTempMatrix(ctx);
gsl_matrix **gen = getTempMatrices(ctx, 3);
gsl_matrix *tmp = getTempMatrix(ctx->ws);
gsl_matrix *ev = getTempMatrix(ctx->ws);
gsl_matrix **gen = getTempMatrices(ctx->ws, 3);
initializeTriangleGenerators(gen, ctx->cartan);
@@ -42,16 +42,16 @@ int fixedPoints(DrawingContext *ctx, const char *word, vector_t *out)
LOOP(i) LOOP(j) out[i].x[j] = gsl_matrix_get(ev, j, i);
releaseTempMatrices(ctx, 5);
releaseTempMatrices(ctx->ws, 5);
return count;
}
void transformFrameStd(DrawingContext *ctx, vector_t *x, gsl_matrix *out)
{
gsl_matrix *tmp = getTempMatrix(ctx);
gsl_vector *fourth = getTempVector(ctx);
gsl_vector *lambda = getTempVector(ctx);
gsl_matrix *tmp = getTempMatrix(ctx->ws);
gsl_vector *fourth = getTempVector(ctx->ws);
gsl_vector *lambda = getTempVector(ctx->ws);
int s;
LOOP(i) LOOP(j) gsl_matrix_set(out, j, i, x[i].x[j]);
@@ -63,8 +63,8 @@ void transformFrameStd(DrawingContext *ctx, vector_t *x, gsl_matrix *out)
gsl_matrix_fprintf(stdout, out, "%f");
releaseTempMatrices(ctx, 1);
releaseTempVectors(ctx, 2);
releaseTempMatrices(ctx->ws, 1);
releaseTempVectors(ctx->ws, 2);
}
// level 1: the elementary drawing functions, drawPoint, drawSegment2d