Added MACS source
[htsworkflow.git] / htswanalysis / MACS / lib / gsl / gsl-1.11 / block / fwrite_source.c
1 /* block/fwrite_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 int
21 FUNCTION (gsl_block, fread) (FILE * stream, TYPE(gsl_block) * b)
22 {
23   size_t n = b->size ;
24
25   ATOMIC * data = b->data ;
26
27   size_t items = fread (data, MULTIPLICITY * sizeof (ATOMIC), n, stream);
28   
29   if (items != n)
30     {
31       GSL_ERROR ("fread failed", GSL_EFAILED);
32     }
33       
34 return 0;
35 }
36
37 int
38 FUNCTION (gsl_block, fwrite) (FILE * stream, const TYPE(gsl_block) * b)
39 {
40   size_t n = b->size ;
41
42   ATOMIC * data = b->data ;
43   
44   size_t items = fwrite (data, MULTIPLICITY * sizeof (ATOMIC), n, stream);
45   
46   if (items != n)
47     {
48       GSL_ERROR ("fwrite failed", GSL_EFAILED);
49     }
50
51   return 0;
52 }
53
54 int
55 FUNCTION (gsl_block, raw_fread) (FILE * stream, ATOMIC * data, 
56                                  const size_t n, const size_t stride)
57 {
58   if (stride == 1)
59     {
60       size_t items = fread (data, MULTIPLICITY * sizeof (ATOMIC), n, stream);
61
62       if (items != n)
63         {
64           GSL_ERROR ("fread failed", GSL_EFAILED);
65         }
66     }
67   else
68     {
69       size_t i;
70
71       for (i = 0; i < n; i++)
72         {
73           size_t item = fread (data + MULTIPLICITY * i * stride,
74                                MULTIPLICITY * sizeof (ATOMIC), 1, stream);
75           if (item != 1)
76             {
77               GSL_ERROR ("fread failed", GSL_EFAILED);
78             }
79         }
80     }
81
82   return GSL_SUCCESS;
83 }
84
85 int
86 FUNCTION (gsl_block, raw_fwrite) (FILE * stream, const ATOMIC * data,
87                                   const size_t n, const size_t stride)
88 {
89
90   if (stride == 1)
91     {
92       size_t items = fwrite (data, MULTIPLICITY * sizeof (ATOMIC), n, stream);
93
94       if (items != n)
95         {
96           GSL_ERROR ("fwrite failed", GSL_EFAILED);
97         }
98     }
99   else
100     {
101       size_t i;
102
103       for (i = 0; i < n; i++)
104         {
105           size_t item = fwrite (data + MULTIPLICITY * i * stride,
106                                 MULTIPLICITY * sizeof (ATOMIC),
107                                 1, stream);
108           if (item != 1)
109             {
110               GSL_ERROR ("fwrite failed", GSL_EFAILED);
111             }
112         }
113     }
114
115   return GSL_SUCCESS;
116 }