source: libcfa/src/fstream.hfa @ 9c2ac95

Last change on this file since 9c2ac95 was a1a1f37d, checked in by Peter A. Buhr <pabuhr@…>, 4 months ago

change order of ungetc parameters to harmonize with C ungetc

  • Property mode set to 100644
File size: 4.9 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
[a1a1f37d]12// Last Modified On : Fri Jul 12 05:45:50 2024
13// Update Count     : 275
[86bd7c1f]14//
15
[53a6c2a]16#pragma once
[51b7345]17
[e474cf09]18#include "bits/weakso_locks.hfa"                                                // mutex_lock
[58b6d1b]19#include "iostream.hfa"
[51b7345]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];
[502a107]36        multiple_acquisition_lock lock$;                                        // used by trait is_lock for mutex statement
[53ba273]37}; // ofstream
[90c3b1c]38
[b431515]39// Satisfies ostream
40
[9ebd778]41// private
[f5d9c37]42bool getNL$( ofstream & );
[d0cfcbe1]43bool setNL$( ofstream &, bool );
[f5d9c37]44bool getANL$( ofstream & );
[d0cfcbe1]45bool setANL$( ofstream &, bool );
[f5d9c37]46
[6c5d92f]47bool sepPrt$( ofstream & );
48void sepReset$( ofstream & );
49void sepReset$( ofstream &, bool );
50const char * sepGetCur$( ofstream & );
51void sepSetCur$( ofstream &, const char [] );
[f5d9c37]52
[6c5d92f]53bool getPrt$( ofstream & );
[d0cfcbe1]54bool setPrt$( ofstream &, bool );
[9ebd778]55
[7ce2483]56void lock( ofstream & );
57void unlock( ofstream & );
58
[9ebd778]59// public
[200fcb3]60void nlOn( ofstream & );
61void nlOff( ofstream & );
[9ebd778]62
[f5d9c37]63void sep( ofstream & );
64void nosep( ofstream & );
65bool sepOn( ofstream & );
66bool sepOff( ofstream & );
[09687aa]67const char * sepGet( ofstream & );
[e3fea42]68void sepSet( ofstream &, const char [] );
[09687aa]69const char * sepGetTuple( ofstream & );
[e3fea42]70void sepSetTuple( ofstream &, const char [] );
[6152c81]71
[b431515]72void ends( ofstream & );
73int fmt( ofstream &, const char format[], ... ) __attribute__(( format(printf, 2, 3) ));
74
75bool fail( ofstream & );
[00e9be9]76void clear( ofstream & );
[09687aa]77int flush( ofstream & );
[f451177]78void open( ofstream &, const char name[], const char mode[] ); // FIX ME: use default = "w"
[e3fea42]79void open( ofstream &, const char name[] );
[09687aa]80void close( ofstream & );
[c8371b5]81
[e3fea42]82ofstream & write( ofstream &, const char data[], size_t size );
[b431515]83
84void ?{}( ofstream & );
[f451177]85void ?{}( ofstream &, const char name[], const char mode[] ); // FIX ME: use default = "w"
[b431515]86void ?{}( ofstream &, const char name[] );
87void ^?{}( ofstream & );
[09687aa]88
[f451177]89// private
90static inline ofstream & nl$( ofstream & os ) { return nl( os ); } // remember basic_ostream nl
91// public
92ofstream & nl( ofstream & os );                                                 // override basic_ostream nl
93
[a87d40b]94extern ofstream & sout, & stdout, & serr, & stderr;             // aliases
[65240bb]95extern ofstream & exit, & abort;
96
[51b7345]97
[8d321f9]98// *********************************** ifstream ***********************************
[5cb2b8c]99
[51b7345]100
[53ba273]101struct ifstream {
[6c5d92f]102        void * file$;
103        bool nlOnOff$;
[502a107]104        multiple_acquisition_lock lock$;                                        // used by trait is_lock for mutex statement
[53ba273]105}; // ifstream
[6ba0659]106
[b431515]107// Satisfies istream
108
[7ce2483]109// private
[c8371b5]110bool getANL$( ifstream & );
[d0cfcbe1]111bool setANL$( ifstream &, bool );
[c8371b5]112
[7ce2483]113void lock( ifstream & );
114void unlock( ifstream & );
115
[09687aa]116// public
[0efb269]117void nlOn( ifstream & );
118void nlOff( ifstream & );
[f451177]119int fmt( ifstream &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) ));
[a1a1f37d]120ifstream & ungetc( char c, ifstream & is );
[e0dc038]121bool eof( ifstream & is );
[f451177]122
[b431515]123bool fail( ifstream & is );
[00e9be9]124void clear( ifstream & );
[f451177]125void open( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r"
[e3fea42]126void open( ifstream & is, const char name[] );
[09687aa]127void close( ifstream & is );
[00e9be9]128ifstream & read( ifstream & is, char data[], size_t size );
[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 );
[51b7345]134
[a87d40b]135extern ifstream & sin, & stdin;                                                 // aliases
[51b7345]136
[91e52be]137
[8d321f9]138// *********************************** exceptions ***********************************
[91e52be]139
140
[77bc259]141ExceptionDecl( 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
[77bc259]148);
[91e52be]149
[874b16e]150void ?{}( open_failure & this, ofstream & );
151void ?{}( open_failure & this, ifstream & );
[91e52be]152
[77bc259]153ExceptionDecl( close_failure,
[ba0d2ea]154        union {
155                ofstream * ostream;
156                ifstream * istream;
157        };
158        // TEMPORARY: need polymorphic exceptions
159        int tag;                                                                                        // 1 => ostream; 0 => istream
[77bc259]160);
[ba0d2ea]161
[874b16e]162void ?{}( close_failure & this, ofstream & );
163void ?{}( close_failure & this, ifstream & );
[ba0d2ea]164
[77bc259]165ExceptionDecl( write_failure,
[ba0d2ea]166        union {
167                ofstream * ostream;
168                ifstream * istream;
169        };
170        // TEMPORARY: need polymorphic exceptions
171        int tag;                                                                                        // 1 => ostream; 0 => istream
[77bc259]172);
[ba0d2ea]173
[874b16e]174void ?{}( write_failure & this, ofstream & );
175void ?{}( write_failure & this, ifstream & );
[ba0d2ea]176
[77bc259]177ExceptionDecl( read_failure,
[ba0d2ea]178        union {
179                ofstream * ostream;
180                ifstream * istream;
181        };
182        // TEMPORARY: need polymorphic exceptions
183        int tag;                                                                                        // 1 => ostream; 0 => istream
[77bc259]184);
[ba0d2ea]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.