xref: /netbsd-src/external/lgpl3/mpc/dist/tests/init_parameters.c (revision 39f28e1e142c5bfb6be935a49cb55e2287fec7ea)
1 /* init_parameters -- Allocate memory for function parameters.
2 
3 Copyright (C) 2012, 2014 INRIA
4 
5 This file is part of GNU MPC.
6 
7 GNU MPC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License as published by the
9 Free Software Foundation; either version 3 of the License, or (at your
10 option) any later version.
11 
12 GNU MPC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for
15 more details.
16 
17 You should have received a copy of the GNU Lesser General Public License
18 along with this program. If not, see http://www.gnu.org/licenses/ .
19 */
20 
21 #include <stdio.h>
22 #include "mpc-tests.h"
23 
24 static void
init_param(mpc_operand_t * p,mpc_param_t t)25 init_param (mpc_operand_t* p, mpc_param_t t)
26 {
27   switch (t)
28     {
29     case NATIVE_INT:
30     case NATIVE_UL:
31     case NATIVE_L:
32     case NATIVE_D:
33       break;
34 
35     case GMP_Z:
36       mpz_init (p->mpz);
37       break;
38     case GMP_Q:
39       mpq_init (p->mpq);
40       break;
41     case GMP_F:
42       mpf_init (p->mpf);
43       break;
44 
45     case MPFR_INEX:
46       break;
47     case MPFR:
48       mpfr_init2 (p->mpfr, 512);
49       break;
50 
51     case MPC_INEX:
52     case MPCC_INEX:
53       break;
54     case MPC:
55       mpc_init2 (p->mpc, 512);
56       break;
57 
58     case MPFR_RND:
59     case MPC_RND:
60       break;
61 
62     default:
63       fprintf (stderr, "init_parameters: unsupported type.\n");
64       exit (1);
65     }
66 }
67 
68 void
init_parameters(mpc_fun_param_t * params)69 init_parameters (mpc_fun_param_t *params)
70 {
71   int in, out;
72   int total = params->nbout + params->nbin;
73 
74   for (out = 0; out < params->nbout; out++)
75     {
76       init_param (&(params->P[out]), params->T[out]);
77       init_param (&(params->P[total + out]), params->T[total + out]);
78     }
79 
80   for (in = params->nbout; in < total; in++)
81     {
82       init_param (&(params->P[in]), params->T[in]);
83     }
84 }
85