source: libcfa/src/fstream.hfa@ d9b7b66

Last change on this file since d9b7b66 was f5d9c37, checked in by Peter A. Buhr <pabuhr@…>, 2 years ago

harmonize separator manipulators names with newline names: change from sep, sepTuple, sepEnable, sepDisable, sepOn, sepOff to sepVal, sepTupleVal, sepOn, sepOff, sep, nosep; fix bug printing null string with WD so no separator

  • Property mode set to 100644
File size: 4.7 KB
RevLine 
[86bd7c1f]1//
2// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
3//
4// The contents of this file are covered under the licence agreement in the
5// file "LICENCE" distributed with Cforall.
6//
[bb82c03]7// fstream --
[86bd7c1f]8//
[90c3b1c]9// Author : Peter A. Buhr
[86bd7c1f]10// Created On : Wed May 27 17:56:53 2015
11// Last Modified By : Peter A. Buhr
[f5d9c37]12// Last Modified On : Thu Jun 29 11:08:31 2023
13// Update Count : 251
[86bd7c1f]14//
15
[53a6c2a]16#pragma once
[51b73452]17
[e474cf09]18#include "bits/weakso_locks.hfa" // mutex_lock
[58b6d1b]19#include "iostream.hfa"
[51b73452]20
[65240bb]21
[8d321f9]22// *********************************** ofstream ***********************************
[65240bb]23
24
[b431515]25enum { ofstream_sepSize = 16 };
[53ba273]26struct ofstream {
[6c5d92f]27 void * file$;
28 bool sepDefault$;
29 bool sepOnOff$;
30 bool nlOnOff$;
31 bool prt$; // print text
32 bool sawNL$;
33 const char * sepCur$;
[b431515]34 char separator$[ofstream_sepSize];
35 char tupleSeparator$[ofstream_sepSize];
[6c5d92f]36 multiple_acquisition_lock lock$;
[53ba273]37}; // ofstream
[90c3b1c]38
[b431515]39// Satisfies ostream
40
[9ebd778]41// private
[f5d9c37]42bool getNL$( ofstream & );
43void setNL$( ofstream &, bool );
44bool getANL$( ofstream & );
45
[6c5d92f]46bool sepPrt$( ofstream & );
47void sepReset$( ofstream & );
48void sepReset$( ofstream &, bool );
49const char * sepGetCur$( ofstream & );
50void sepSetCur$( ofstream &, const char [] );
[f5d9c37]51
[6c5d92f]52bool getPrt$( ofstream & );
53void setPrt$( ofstream &, bool );
[9ebd778]54
[7ce2483]55void lock( ofstream & );
56void unlock( ofstream & );
57
[9ebd778]58// public
[200fcb3]59void nlOn( ofstream & );
60void nlOff( ofstream & );
[9ebd778]61
[f5d9c37]62void sep( ofstream & );
63void nosep( ofstream & );
64bool sepOn( ofstream & );
65bool sepOff( ofstream & );
[09687aa]66const char * sepGet( ofstream & );
[e3fea42]67void sepSet( ofstream &, const char [] );
[09687aa]68const char * sepGetTuple( ofstream & );
[e3fea42]69void sepSetTuple( ofstream &, const char [] );
[6152c81]70
[b431515]71void ends( ofstream & );
72int fmt( ofstream &, const char format[], ... ) __attribute__(( format(printf, 2, 3) ));
73
74bool fail( ofstream & );
[00e9be9]75void clear( ofstream & );
[09687aa]76int flush( ofstream & );
[f451177]77void open( ofstream &, const char name[], const char mode[] ); // FIX ME: use default = "w"
[e3fea42]78void open( ofstream &, const char name[] );
[09687aa]79void close( ofstream & );
[c8371b5]80
[e3fea42]81ofstream & write( ofstream &, const char data[], size_t size );
[b431515]82
83void ?{}( ofstream & );
[f451177]84void ?{}( ofstream &, const char name[], const char mode[] ); // FIX ME: use default = "w"
[b431515]85void ?{}( ofstream &, const char name[] );
86void ^?{}( ofstream & );
[09687aa]87
[f451177]88// private
89static inline ofstream & nl$( ofstream & os ) { return nl( os ); } // remember basic_ostream nl
90// public
91ofstream & nl( ofstream & os ); // override basic_ostream nl
92
[a87d40b]93extern ofstream & sout, & stdout, & serr, & stderr; // aliases
[65240bb]94extern ofstream & exit, & abort;
95
[51b73452]96
[8d321f9]97// *********************************** ifstream ***********************************
[5cb2b8c]98
[51b73452]99
[53ba273]100struct ifstream {
[6c5d92f]101 void * file$;
102 bool nlOnOff$;
103 multiple_acquisition_lock lock$;
[53ba273]104}; // ifstream
[6ba0659]105
[b431515]106// Satisfies istream
107
[7ce2483]108// private
[c8371b5]109bool getANL$( ifstream & );
110
[7ce2483]111void lock( ifstream & );
112void unlock( ifstream & );
113
[09687aa]114// public
[0efb269]115void nlOn( ifstream & );
116void nlOff( ifstream & );
[e474cf09]117void ends( ifstream & );
[f451177]118int fmt( ifstream &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) ));
119
[b431515]120bool fail( ifstream & is );
[00e9be9]121void clear( ifstream & );
122bool eof( ifstream & is );
[f451177]123void open( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r"
[e3fea42]124void open( ifstream & is, const char name[] );
[09687aa]125void close( ifstream & is );
[c8371b5]126
[00e9be9]127ifstream & read( ifstream & is, char data[], size_t size );
[09687aa]128ifstream & ungetc( ifstream & is, char c );
[f451177]129
[09687aa]130void ?{}( ifstream & is );
[f451177]131void ?{}( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r"
[e3fea42]132void ?{}( ifstream & is, const char name[] );
[4cae032]133void ^?{}( ifstream & is );
[51b73452]134
[a87d40b]135extern ifstream & sin, & stdin; // aliases
[51b73452]136
[91e52be]137
[8d321f9]138// *********************************** exceptions ***********************************
[91e52be]139
140
[874b16e]141exception open_failure {
[91e52be]142 union {
143 ofstream * ostream;
144 ifstream * istream;
145 };
[8d321f9]146 // TEMPORARY: need polymorphic exceptions
147 int tag; // 1 => ostream; 0 => istream
[f9d8755]148};
[91e52be]149
[874b16e]150void ?{}( open_failure & this, ofstream & );
151void ?{}( open_failure & this, ifstream & );
[91e52be]152
[874b16e]153exception close_failure {
[ba0d2ea]154 union {
155 ofstream * ostream;
156 ifstream * istream;
157 };
158 // TEMPORARY: need polymorphic exceptions
159 int tag; // 1 => ostream; 0 => istream
160};
161
[874b16e]162void ?{}( close_failure & this, ofstream & );
163void ?{}( close_failure & this, ifstream & );
[ba0d2ea]164
[874b16e]165exception write_failure {
[ba0d2ea]166 union {
167 ofstream * ostream;
168 ifstream * istream;
169 };
170 // TEMPORARY: need polymorphic exceptions
171 int tag; // 1 => ostream; 0 => istream
172};
173
[874b16e]174void ?{}( write_failure & this, ofstream & );
175void ?{}( write_failure & this, ifstream & );
[ba0d2ea]176
[874b16e]177exception read_failure {
[ba0d2ea]178 union {
179 ofstream * ostream;
180 ifstream * istream;
181 };
182 // TEMPORARY: need polymorphic exceptions
183 int tag; // 1 => ostream; 0 => istream
184};
185
[874b16e]186void ?{}( read_failure & this, ofstream & );
187void ?{}( read_failure & this, ifstream & );
[ba0d2ea]188
[86bd7c1f]189// Local Variables: //
[d3b7937]190// mode: c //
[86bd7c1f]191// tab-width: 4 //
192// End: //
Note: See TracBrowser for help on using the repository browser.