source: libcfa/src/fstream.hfa @ 00e9be9

ADTarm-ehast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 00e9be9 was 00e9be9, checked in by Peter A. Buhr <pabuhr@…>, 3 years ago

add stream function clear, change eof to return bool

  • Property mode set to 100644
File size: 4.2 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
[00e9be9]12// Last Modified On : Wed Apr 28 20:37:57 2021
13// Update Count     : 230
[86bd7c1f]14//
15
[53a6c2a]16#pragma once
[51b7345]17
[e474cf09]18#include "bits/weakso_locks.hfa"                                                // mutex_lock
[58b6d1b]19#include "iostream.hfa"
[91e52be]20#include <exception.hfa>
[51b7345]21
[65240bb]22
[8d321f9]23// *********************************** ofstream ***********************************
[65240bb]24
25
[b431515]26enum { ofstream_sepSize = 16 };
[53ba273]27struct ofstream {
[6c5d92f]28        void * file$;
29        bool sepDefault$;
30        bool sepOnOff$;
31        bool nlOnOff$;
32        bool prt$;                                                                                      // print text
33        bool sawNL$;
34        const char * sepCur$;
[b431515]35        char separator$[ofstream_sepSize];
36        char tupleSeparator$[ofstream_sepSize];
[6c5d92f]37        multiple_acquisition_lock lock$;
38        bool acquired$;
[53ba273]39}; // ofstream
[90c3b1c]40
[b431515]41// Satisfies ostream
42
[9ebd778]43// private
[6c5d92f]44bool sepPrt$( ofstream & );
45void sepReset$( ofstream & );
46void sepReset$( ofstream &, bool );
47const char * sepGetCur$( ofstream & );
48void sepSetCur$( ofstream &, const char [] );
49bool getNL$( ofstream & );
50void setNL$( ofstream &, bool );
51bool getANL$( ofstream & );
52bool getPrt$( ofstream & );
53void setPrt$( ofstream &, bool );
[9ebd778]54
55// public
[09687aa]56void sepOn( ofstream & );
57void sepOff( ofstream & );
[93c2e0a]58bool sepDisable( ofstream & );
59bool sepEnable( ofstream & );
[200fcb3]60void nlOn( ofstream & );
61void nlOff( ofstream & );
[9ebd778]62
[09687aa]63const char * sepGet( ofstream & );
[e3fea42]64void sepSet( ofstream &, const char [] );
[09687aa]65const char * sepGetTuple( ofstream & );
[e3fea42]66void sepSetTuple( ofstream &, const char [] );
[6152c81]67
[b431515]68void ends( ofstream & );
69int fmt( ofstream &, const char format[], ... ) __attribute__(( format(printf, 2, 3) ));
70
71bool fail( ofstream & );
[00e9be9]72void clear( ofstream & );
[09687aa]73int flush( ofstream & );
[f451177]74void open( ofstream &, const char name[], const char mode[] ); // FIX ME: use default = "w"
[e3fea42]75void open( ofstream &, const char name[] );
[09687aa]76void close( ofstream & );
[e3fea42]77ofstream & write( ofstream &, const char data[], size_t size );
[b431515]78
79void acquire( ofstream & );
80void release( ofstream & );
[e474cf09]81
82struct osacquire {
83        ofstream & os;
84};
[b431515]85void ?{}( osacquire & acq, ofstream & );
[e474cf09]86void ^?{}( osacquire & acq );
[829c907]87
[b431515]88void ?{}( ofstream & );
[f451177]89void ?{}( ofstream &, const char name[], const char mode[] ); // FIX ME: use default = "w"
[b431515]90void ?{}( ofstream &, const char name[] );
91void ^?{}( ofstream & );
[09687aa]92
[f451177]93// private
94static inline ofstream & nl$( ofstream & os ) { return nl( os ); } // remember basic_ostream nl
95// public
96ofstream & nl( ofstream & os );                                                 // override basic_ostream nl
97
[a87d40b]98extern ofstream & sout, & stdout, & serr, & stderr;             // aliases
[65240bb]99extern ofstream & exit, & abort;
100
[51b7345]101
[8d321f9]102// *********************************** ifstream ***********************************
[5cb2b8c]103
[51b7345]104
[53ba273]105struct ifstream {
[6c5d92f]106        void * file$;
107        bool nlOnOff$;
108        multiple_acquisition_lock lock$;
109        bool acquired$;
[53ba273]110}; // ifstream
[6ba0659]111
[b431515]112// Satisfies istream
113
[09687aa]114// public
[0efb269]115void nlOn( ifstream & );
116void nlOff( ifstream & );
117bool getANL( ifstream & );
[e474cf09]118void ends( ifstream & );
[f451177]119int fmt( ifstream &, const char format[], ... ) __attribute__(( format(scanf, 2, 3) ));
120
[b431515]121bool fail( ifstream & is );
[00e9be9]122void clear( ifstream & );
123bool eof( ifstream & is );
[f451177]124void open( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r"
[e3fea42]125void open( ifstream & is, const char name[] );
[09687aa]126void close( ifstream & is );
[00e9be9]127ifstream & read( ifstream & is, char data[], size_t size );
[09687aa]128ifstream & ungetc( ifstream & is, char c );
[f451177]129
[e474cf09]130void acquire( ifstream & is );
131void release( ifstream & is );
132
133struct isacquire {
134        ifstream & is;
135};
136void ?{}( isacquire & acq, ifstream & is );
137void ^?{}( isacquire & acq );
[09687aa]138
139void ?{}( ifstream & is );
[f451177]140void ?{}( ifstream & is, const char name[], const char mode[] ); // FIX ME: use default = "r"
[e3fea42]141void ?{}( ifstream & is, const char name[] );
[4cae032]142void ^?{}( ifstream & is );
[51b7345]143
[a87d40b]144extern ifstream & sin, & stdin;                                                 // aliases
[51b7345]145
[91e52be]146
[8d321f9]147// *********************************** exceptions ***********************************
[91e52be]148
149
[ecfd758]150EHM_EXCEPTION(Open_Failure)(
[91e52be]151        union {
152                ofstream * ostream;
153                ifstream * istream;
154        };
[8d321f9]155        // TEMPORARY: need polymorphic exceptions
156        int tag;                                                                                        // 1 => ostream; 0 => istream
[91e52be]157);
158
[b431515]159void ?{}( Open_Failure & this, ofstream & );
160void ?{}( Open_Failure & this, ifstream & );
[91e52be]161
[86bd7c1f]162// Local Variables: //
[d3b7937]163// mode: c //
[86bd7c1f]164// tab-width: 4 //
165// End: //
Note: See TracBrowser for help on using the repository browser.