Added script front-end for primer-design code
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / permutation / init.c
1 /* permutation/init.c
2  * 
3  * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Brian Gough
4  * 
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 3 of the License, or (at
8  * your option) any later version.
9  * 
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  * 
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19
20 #include <config.h>
21 #include <stdlib.h>
22 #include <gsl/gsl_errno.h>
23 #include <gsl/gsl_permutation.h>
24
25 gsl_permutation *
26 gsl_permutation_alloc (const size_t n)
27 {
28   gsl_permutation * p;
29
30   if (n == 0)
31     {
32       GSL_ERROR_VAL ("permutation length n must be positive integer",
33                         GSL_EDOM, 0);
34     }
35
36   p = (gsl_permutation *) malloc (sizeof (gsl_permutation));
37
38   if (p == 0)
39     {
40       GSL_ERROR_VAL ("failed to allocate space for permutation struct",
41                         GSL_ENOMEM, 0);
42     }
43
44   p->data = (size_t *) malloc (n * sizeof (size_t));
45
46   if (p->data == 0)
47     {
48       free (p);         /* exception in constructor, avoid memory leak */
49
50       GSL_ERROR_VAL ("failed to allocate space for permutation data",
51                         GSL_ENOMEM, 0);
52     }
53
54   p->size = n;
55
56   return p;
57 }
58
59 gsl_permutation *
60 gsl_permutation_calloc (const size_t n)
61 {
62   size_t i;
63
64   gsl_permutation * p =  gsl_permutation_alloc (n);
65
66   if (p == 0)
67     return 0;
68
69   /* initialize permutation to identity */
70
71   for (i = 0; i < n; i++)
72     {
73       p->data[i] = i;
74     }
75
76   return p;
77 }
78
79 void
80 gsl_permutation_init (gsl_permutation * p)
81 {
82   const size_t n = p->size ;
83   size_t i;
84
85   /* initialize permutation to identity */
86
87   for (i = 0; i < n; i++)
88     {
89       p->data[i] = i;
90     }
91 }
92
93 void
94 gsl_permutation_free (gsl_permutation * p)
95 {
96   free (p->data);
97   free (p);
98 }