OpenMD
3.1
Molecular Dynamics in the Open
Loading...
Searching...
No Matches
gzstream.hpp
1
// ============================================================================
2
// gzstream, C++ iostream classes wrapping the zlib compression library.
3
// Copyright (C) 2001 Deepak Bandyopadhyay, Lutz Kettner
4
//
5
// This library is free software; you can redistribute it and/or
6
// modify it under the terms of the GNU Lesser General Public
7
// License as published by the Free Software Foundation; either
8
// version 2.1 of the License, or (at your option) any later version.
9
//
10
// This library is distributed in the hope that it will be useful,
11
// but WITHOUT ANY WARRANTY; without even the implied warranty of
12
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
// Lesser General Public License for more details.
14
//
15
// You should have received a copy of the GNU Lesser General Public
16
// License along with this library; if not, write to the Free Software
17
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18
// ============================================================================
19
//
20
// File : gzstream.h
21
// Revision : $Revision$
22
// Revision_date : $Date$
23
// Author(s) : Deepak Bandyopadhyay, Lutz Kettner
24
//
25
// Standard streambuf implementation following Nicolai Josuttis, "The
26
// Standard C++ Library".
27
// ============================================================================
28
29
#ifndef IO_GZSTREAM_HPP
30
#define IO_GZSTREAM_HPP
31
32
// standard C++ with new header file names and std:: namespace
33
#include <zlib.h>
34
35
#include <fstream>
36
#include <iostream>
37
38
namespace
OpenMD
{
39
40
// ----------------------------------------------------------------------------
41
// Internal classes to implement gzstream. See below for user classes.
42
// ----------------------------------------------------------------------------
43
44
class
gzstreambuf
:
public
std::streambuf {
45
private
:
46
static
const
int
bufferSize = 47 + 256;
// size of data buff
47
// totals 512 bytes under g++ for igzstream at the end.
48
49
gzFile file;
// file handle for compressed file
50
char
buffer[bufferSize];
// data buffer
51
char
opened;
// open/close state of stream
52
int
mode;
// I/O mode
53
54
int
flush_buffer();
55
56
public
:
57
gzstreambuf
() : opened(0) {
58
setp(buffer, buffer + (bufferSize - 1));
59
setg(buffer + 4,
// beginning of putback area
60
buffer + 4,
// read position
61
buffer + 4);
// end position
62
// ASSERT: both input & output capabilities will not be used together
63
}
64
int
is_open() {
return
opened; }
65
gzstreambuf
* open(
const
char
* name,
int
open_mode);
66
gzstreambuf
* close();
67
~gzstreambuf
() { close(); }
68
69
virtual
int
overflow(
int
c = EOF);
70
virtual
int
underflow();
71
virtual
int
sync();
72
};
73
74
class
gzstreambase
:
virtual
public
std::ios {
75
protected
:
76
gzstreambuf
buf;
77
78
public
:
79
gzstreambase
() { init(&buf); }
80
gzstreambase
(
const
char
* name,
int
open_mode);
81
~gzstreambase
();
82
void
open(
const
char
* name,
int
open_mode);
83
void
close();
84
gzstreambuf
* rdbuf() {
return
&buf; }
85
};
86
87
// ----------------------------------------------------------------------------
88
// User classes. Use igzstream and ogzstream analogously to ifstream and
89
// ofstream respectively. They read and write files based on the gz*
90
// function interface of the zlib. Files are compatible with gzip compression.
91
// ----------------------------------------------------------------------------
92
93
class
igzstream
:
public
gzstreambase
,
public
std::istream {
94
public
:
95
igzstream
() : std::istream(&buf) {}
96
igzstream
(
const
char
* name,
int
open_mode = std::ios::in) :
97
gzstreambase
(name, open_mode), std::istream(&buf) {}
98
gzstreambuf
* rdbuf() {
return
gzstreambase::rdbuf(); }
99
void
open(
const
char
* name,
int
open_mode = std::ios::in) {
100
gzstreambase::open(name, open_mode);
101
}
102
};
103
104
class
ogzstream
:
public
gzstreambase
,
public
std::ostream {
105
public
:
106
ogzstream
() : std::ostream(&buf) {}
107
ogzstream
(
const
char
* name,
int
mode = std::ios::out) :
108
gzstreambase
(name, mode), std::ostream(&buf) {}
109
gzstreambuf
* rdbuf() {
return
gzstreambase::rdbuf(); }
110
void
open(
const
char
* name,
int
open_mode = std::ios::out) {
111
gzstreambase::open(name, open_mode);
112
}
113
};
114
}
// namespace OpenMD
115
116
#endif
OpenMD::gzstreambase
Definition
gzstream.hpp:74
OpenMD::gzstreambuf
Definition
gzstream.hpp:44
OpenMD::igzstream
Definition
gzstream.hpp:93
OpenMD::ogzstream
Definition
gzstream.hpp:104
OpenMD
This basic Periodic Table class was originally taken from the data.cpp file in OpenBabel.
Definition
ActionCorrFunc.cpp:60
io
gzstream.hpp
Generated on Wed Jun 26 2024 13:56:40 for OpenMD by
1.11.0