Scippy

SCIP

Solving Constraint Integer Programs

fileio.c
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the program and library */
4/* SCIP --- Solving Constraint Integer Programs */
5/* */
6/* Copyright (c) 2002-2024 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file fileio.c
26 * @ingroup OTHER_CFILES
27 * @brief wrapper functions to map file i/o to standard or zlib file i/o
28 * @author Tobias Achterberg
29 */
30
31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33#include <stdio.h>
34#include <stdarg.h>
35
36#include "scip/pub_fileio.h"
37
38
39#define BUFFER_LEN 8192
40
41#ifdef SCIP_WITH_ZLIB
42
43/* file i/o using zlib */
44#include <zlib.h>
45
46SCIP_FILE* SCIPfopen(const char *path, const char *mode)
47{
48 return (SCIP_FILE*)gzopen(path, mode);
49}
50
51SCIP_FILE* SCIPfdopen(int fildes, const char *mode)
52{
53 return (SCIP_FILE*)gzdopen(fildes, mode);
54}
55
56size_t SCIPfread(void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
57{
58 int nbytesread;
59
60 nbytesread = gzread((gzFile)stream, ptr, (unsigned int) (size * nmemb));
61 /* An error occured if nbytesread < 0. To be compatible with fread(), we return 0, which signifies an error there. */
62 if ( nbytesread < 0 )
63 return 0;
64
65 return (size_t) nbytesread; /*lint !e571*/
66}
67
68size_t SCIPfwrite(const void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
69{
70 return (size_t) gzwrite((gzFile)stream, ptr, (unsigned int) (size * nmemb)); /*lint !e571*/
71}
72
73int SCIPfprintf(SCIP_FILE *stream, const char *format, ...)
74{
75 char buffer[BUFFER_LEN];
76 va_list ap;
77 int n;
78
79 va_start(ap, format); /*lint !e826*/
80#if defined(_MSC_VER) && _MSC_VER < 1900
81 n = _vsnprintf(buffer, BUFFER_LEN, format, ap);
82#else
83 n = vsnprintf(buffer, BUFFER_LEN, format, ap);
84#endif
85 va_end(ap);
86 if( n < 0 || n > BUFFER_LEN)
87 buffer[BUFFER_LEN-1] = '\0';
88
89 return gzputs((gzFile)stream, buffer);
90}
91
92int SCIPfputc(int c, SCIP_FILE *stream)
93{
94 return gzputc((gzFile)stream, c);
95}
96
97int SCIPfputs(const char *s, SCIP_FILE *stream)
98{
99 return gzputs((gzFile)stream, s);
100}
101
102int SCIPfgetc(SCIP_FILE *stream)
103{
104 return gzgetc((gzFile)stream);
105}
106
107char* SCIPfgets(char *s, int size, SCIP_FILE *stream)
108{
109 if( size > 0 )
110 s[0] = '\0';
111 return gzgets((gzFile)stream, s, size);
112}
113
114int SCIPfflush(SCIP_FILE *stream)
115{
116 return gzflush((gzFile)stream, Z_SYNC_FLUSH);
117}
118
119int SCIPfseek(SCIP_FILE *stream, long offset, int whence)
120{
121 return (int) gzseek((gzFile)stream, offset, whence);
122}
123
124void SCIPrewind(SCIP_FILE *stream)
125{
126 (void) gzrewind((gzFile)stream);
127}
128
129long SCIPftell(SCIP_FILE *stream)
130{
131 return gztell((gzFile)stream);
132}
133
134int SCIPfeof(SCIP_FILE *stream)
135{
136 return gzeof((gzFile)stream);
137}
138
139int SCIPfclose(SCIP_FILE *fp)
140{
141 return gzclose((gzFile)fp);
142}
143
144
145#else
146
147#ifdef _MSC_VER
148#define fdopen _fdopen
149#endif
150
151/* file i/o using standard i/o */
152
153SCIP_FILE* SCIPfopen(const char *path, const char *mode)
154{
155 return (SCIP_FILE*)fopen(path, mode);
156}
157
158SCIP_FILE* SCIPfdopen(int fildes, const char *mode)
159{
160 return (SCIP_FILE*)fdopen(fildes, mode);
161}
162
163size_t SCIPfread(void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
164{
165 return fread(ptr, size, nmemb, (FILE*)stream);
166}
167
168size_t SCIPfwrite(const void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
169{
170 return fwrite(ptr, size, nmemb, (FILE*)stream);
171}
172
173int SCIPfprintf(SCIP_FILE *stream, const char *format, ...)
174{
175 va_list ap;
176 int retval;
177
178 va_start(ap, format); /*lint !e826*/
179 retval = vfprintf((FILE*)stream, format, ap);
180 va_end(ap);
181
182 return retval;
183}
184
185int SCIPfputc(int c, SCIP_FILE *stream)
186{
187 return fputc(c, (FILE*)stream);
188}
189
190int SCIPfputs(const char *s, SCIP_FILE *stream)
191{
192 return fputs(s, (FILE*)stream);
193}
194
196{
197 return fgetc((FILE*)stream);
198}
199
200char* SCIPfgets(char *s, int size, SCIP_FILE *stream)
201{
202 if( size > 0 )
203 s[0] = '\0';
204 return fgets(s, size, (FILE*)stream);
205}
206
208{
209 return fflush((FILE*)stream);
210}
211
212int SCIPfseek(SCIP_FILE *stream, long offset, int whence)
213{
214 return fseek((FILE*)stream, offset, whence);
215}
216
218{
219 rewind((FILE*)stream);
220}
221
222long SCIPftell(SCIP_FILE *stream)
223{
224 return ftell((FILE*)stream);
225}
226
227int SCIPfeof(SCIP_FILE *stream)
228{
229 return feof((FILE*)stream);
230}
231
233{
234 return fclose((FILE*)fp);
235}
236
237
238#endif
SCIP_FILE * SCIPfopen(const char *path, const char *mode)
Definition: fileio.c:153
size_t SCIPfwrite(const void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
Definition: fileio.c:168
int SCIPfgetc(SCIP_FILE *stream)
Definition: fileio.c:195
int SCIPfprintf(SCIP_FILE *stream, const char *format,...)
Definition: fileio.c:173
int SCIPfseek(SCIP_FILE *stream, long offset, int whence)
Definition: fileio.c:212
#define BUFFER_LEN
Definition: fileio.c:39
int SCIPfeof(SCIP_FILE *stream)
Definition: fileio.c:227
void SCIPrewind(SCIP_FILE *stream)
Definition: fileio.c:217
size_t SCIPfread(void *ptr, size_t size, size_t nmemb, SCIP_FILE *stream)
Definition: fileio.c:163
long SCIPftell(SCIP_FILE *stream)
Definition: fileio.c:222
int SCIPfputc(int c, SCIP_FILE *stream)
Definition: fileio.c:185
int SCIPfclose(SCIP_FILE *fp)
Definition: fileio.c:232
char * SCIPfgets(char *s, int size, SCIP_FILE *stream)
Definition: fileio.c:200
int SCIPfputs(const char *s, SCIP_FILE *stream)
Definition: fileio.c:190
SCIP_FILE * SCIPfdopen(int fildes, const char *mode)
Definition: fileio.c:158
int SCIPfflush(SCIP_FILE *stream)
Definition: fileio.c:207
wrapper functions to map file i/o to standard or zlib file i/o
struct SCIP_File SCIP_FILE
Definition: pub_fileio.h:43