Added script front-end for primer-design code
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / interpolation / accel.c
1 /* interpolation/accel.c
2  * 
3  * Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
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 /* Author:  G. Jungman
21  */
22 #include <config.h>
23 #include <stdlib.h>
24 #include <gsl/gsl_errno.h>
25 #include <gsl/gsl_interp.h>
26
27 gsl_interp_accel *
28 gsl_interp_accel_alloc (void)
29 {
30   gsl_interp_accel *a = (gsl_interp_accel *) malloc (sizeof (gsl_interp_accel));
31   if (a == 0)
32     {
33       GSL_ERROR_NULL("could not allocate space for gsl_interp_accel", GSL_ENOMEM);
34     }
35
36   a->cache = 0;
37   a->hit_count = 0;
38   a->miss_count = 0;
39
40   return a;
41 }
42
43 int
44 gsl_interp_accel_reset (gsl_interp_accel * a)
45 {
46   a->cache = 0;
47   a->hit_count = 0;
48   a->miss_count = 0;
49
50   return GSL_SUCCESS;
51 }
52
53 #ifndef HIDE_INLINE_STATIC
54 size_t
55 gsl_interp_accel_find (gsl_interp_accel * a, const double xa[], size_t len, double x)
56 {
57   size_t x_index = a->cache;
58
59   if (x < xa[x_index])
60     {
61       a->miss_count++;
62       a->cache = gsl_interp_bsearch (xa, x, 0, x_index);
63     }
64   else if (x > xa[x_index + 1])
65     {
66       a->miss_count++;
67       a->cache = gsl_interp_bsearch (xa, x, x_index, len - 1);
68     }
69   else
70     {
71       a->hit_count++;
72     }
73
74   return a->cache;
75 }
76 #endif
77
78 void
79 gsl_interp_accel_free (gsl_interp_accel * a)
80 {
81   free (a);
82 }