Added script front-end for primer-design code
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / vector / subvector_source.c
1 /* vector/subvector_source.c
2  * 
3  * Copyright (C) 1996, 1997, 1998, 1999, 2000, 2007 Gerard Jungman, 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 QUALIFIED_VIEW(_gsl_vector, view)
21 FUNCTION(gsl_vector, subvector) (QUALIFIED_TYPE(gsl_vector) * v, size_t offset, size_t n)
22 {
23   QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW;
24
25   if (n == 0)
26     {
27       GSL_ERROR_VAL ("vector length n must be positive integer", 
28                      GSL_EINVAL, view);
29     }
30
31   if (offset + (n - 1) >= v->size)
32     {
33       GSL_ERROR_VAL ("view would extend past end of vector", 
34                      GSL_EINVAL, view);
35     }
36
37   {
38     TYPE(gsl_vector) s = NULL_VECTOR;
39
40     s.data = v->data +  MULTIPLICITY * v->stride * offset ;
41     s.size = n;
42     s.stride = v->stride;
43     s.block = v->block;
44     s.owner = 0;
45
46     view.vector = s;
47     return view;
48   }
49 }
50
51 QUALIFIED_VIEW(_gsl_vector, view)
52 FUNCTION(gsl_vector, subvector_with_stride) (QUALIFIED_TYPE(gsl_vector) * v, size_t offset, size_t stride, size_t n)
53 {
54   QUALIFIED_VIEW(_gsl_vector,view) view = NULL_VECTOR_VIEW;
55
56   if (n == 0)
57     {
58       GSL_ERROR_VAL ("vector length n must be positive integer", 
59                      GSL_EINVAL, view);
60     }
61
62   if (stride == 0)
63     {
64       GSL_ERROR_VAL ("stride must be positive integer", 
65                      GSL_EINVAL, view);
66     }
67
68   if (offset + (n - 1) * stride >= v->size)
69     {
70       GSL_ERROR_VAL ("view would extend past end of vector", 
71                      GSL_EINVAL, view);
72     }
73
74   {
75     TYPE(gsl_vector) s = NULL_VECTOR;
76
77     s.data = v->data + MULTIPLICITY * v->stride * offset ;
78     s.size = n;
79     s.stride = v->stride * stride;
80     s.block = v->block;
81     s.owner = 0;
82     
83     view.vector = s;
84     return view;
85   }
86 }