| [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 | // iostream --
 | 
|---|
| [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
 | 
|---|
| [53a6c2a] | 12 | // Last Modified On : Fri Jul  7 08:35:59 2017
 | 
|---|
 | 13 | // Update Count     : 118
 | 
|---|
| [86bd7c1f] | 14 | //
 | 
|---|
 | 15 | 
 | 
|---|
| [53a6c2a] | 16 | #pragma once
 | 
|---|
| [51b73452] | 17 | 
 | 
|---|
| [d3b7937] | 18 | #include "iterator"
 | 
|---|
| [e56cfdb0] | 19 | 
 | 
|---|
| [4040425] | 20 | trait ostream( dtype ostype ) {
 | 
|---|
| [9ebd778] | 21 |         // private
 | 
|---|
| [3849857] | 22 |         _Bool sepPrt( ostype * );                                                       // return separator state (on/off)
 | 
|---|
 | 23 |         void sepReset( ostype * );                                                      // set separator state to default state
 | 
|---|
 | 24 |         void sepReset( ostype *, _Bool );                                       // set separator and default state
 | 
|---|
| [829c907] | 25 |         const char * sepGetCur( ostype * );                                     // get current separator string
 | 
|---|
 | 26 |         void sepSetCur( ostype *, const char * );                       // set current separator string
 | 
|---|
| [53a6c2a] | 27 |         _Bool getNL( ostype * );                                                        // check newline
 | 
|---|
 | 28 |         void setNL( ostype *, _Bool );                                          // saw newline
 | 
|---|
| [9ebd778] | 29 |         // public
 | 
|---|
 | 30 |         void sepOn( ostype * );                                                         // turn separator state on
 | 
|---|
 | 31 |         void sepOff( ostype * );                                                        // turn separator state off
 | 
|---|
 | 32 |         _Bool sepDisable( ostype * );                                           // set default state to off, and return previous state
 | 
|---|
 | 33 |         _Bool sepEnable( ostype * );                                            // set default state to on, and return previous state
 | 
|---|
 | 34 | 
 | 
|---|
| [bb82c03] | 35 |         const char * sepGet( ostype * );                                        // get separator string
 | 
|---|
| [829c907] | 36 |         void sepSet( ostype *, const char * );                          // set separator to string (15 character maximum)
 | 
|---|
 | 37 |         const char * sepGetTuple( ostype * );                           // get tuple separator string
 | 
|---|
 | 38 |         void sepSetTuple( ostype *, const char * );                     // set tuple separator to string (15 character maximum)
 | 
|---|
| [3849857] | 39 | 
 | 
|---|
| [86bd7c1f] | 40 |         int fail( ostype * );
 | 
|---|
| [6ba0659] | 41 |         int flush( ostype * );
 | 
|---|
| [90c3b1c] | 42 |         void open( ostype * os, const char * name, const char * mode );
 | 
|---|
 | 43 |         void close( ostype * os );
 | 
|---|
 | 44 |         ostype * write( ostype *, const char *, unsigned long int );
 | 
|---|
| [829c907] | 45 |         int fmt( ostype *, const char fmt[], ... );
 | 
|---|
| [86f384b] | 46 | }; // ostream
 | 
|---|
| [90c3b1c] | 47 | 
 | 
|---|
| [4040425] | 48 | trait writeable( otype T ) {
 | 
|---|
| [cf16f94] | 49 |         forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
 | 
|---|
| [86f384b] | 50 | }; // writeable
 | 
|---|
| [51b73452] | 51 | 
 | 
|---|
| [4e06c1e] | 52 | // implement writable for intrinsic types
 | 
|---|
| [51b73452] | 53 | 
 | 
|---|
| [cf16f94] | 54 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
 | 
|---|
| [1630f18] | 55 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, signed char );
 | 
|---|
 | 56 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned char );
 | 
|---|
| [90c3b1c] | 57 | 
 | 
|---|
 | 58 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
 | 
|---|
 | 59 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
 | 
|---|
| [cf16f94] | 60 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
 | 
|---|
| [784deab] | 61 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
 | 
|---|
 | 62 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long int );
 | 
|---|
 | 63 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long long int );
 | 
|---|
 | 64 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
 | 
|---|
 | 65 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
 | 
|---|
| [90c3b1c] | 66 | 
 | 
|---|
| [d3b7937] | 67 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
 | 
|---|
| [cf16f94] | 68 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
 | 
|---|
| [784deab] | 69 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
 | 
|---|
| [90c3b1c] | 70 | 
 | 
|---|
| [d3b7937] | 71 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
 | 
|---|
 | 72 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
 | 
|---|
 | 73 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
 | 
|---|
| [90c3b1c] | 74 | 
 | 
|---|
| [cf16f94] | 75 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
 | 
|---|
 | 76 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
 | 
|---|
 | 77 | 
 | 
|---|
| [c443d1d] | 78 | // tuples
 | 
|---|
 | 79 | forall( dtype ostype, otype T, ttype Params | ostream( ostype ) | writeable( T ) | { ostype * ?|?( ostype *, Params ); } ) ostype * ?|?( ostype * os, T arg, Params rest );
 | 
|---|
 | 80 | 
 | 
|---|
| [4e06c1e] | 81 | // manipulators
 | 
|---|
| [c443d1d] | 82 | forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
 | 
|---|
| [cf16f94] | 83 | forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
 | 
|---|
| [53a6c2a] | 84 | forall( dtype ostype | ostream( ostype ) ) ostype * sep( ostype * );
 | 
|---|
 | 85 | forall( dtype ostype | ostream( ostype ) ) ostype * sepTuple( ostype * );
 | 
|---|
| [90c3b1c] | 86 | forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
 | 
|---|
 | 87 | forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
 | 
|---|
| [53ba273] | 88 | forall( dtype ostype | ostream( ostype ) ) ostype * sepDisable( ostype * );
 | 
|---|
 | 89 | forall( dtype ostype | ostream( ostype ) ) ostype * sepEnable( ostype * );
 | 
|---|
| [e56cfdb0] | 90 | 
 | 
|---|
 | 91 | // writes the range [begin, end) to the given stream
 | 
|---|
| [4040425] | 92 | forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
 | 
|---|
| [e56cfdb0] | 93 | void write( iterator_type begin, iterator_type end, os_type *os );
 | 
|---|
 | 94 | 
 | 
|---|
| [4040425] | 95 | forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
 | 
|---|
| [e56cfdb0] | 96 | void write_reverse( iterator_type begin, iterator_type end, os_type *os );
 | 
|---|
| [51b73452] | 97 | 
 | 
|---|
| [6ba0659] | 98 | //---------------------------------------
 | 
|---|
| [51b73452] | 99 | 
 | 
|---|
| [4040425] | 100 | trait istream( dtype istype ) {
 | 
|---|
| [86bd7c1f] | 101 |         int fail( istype * );
 | 
|---|
 | 102 |         int eof( istype * );
 | 
|---|
| [90c3b1c] | 103 |         void open( istype * is, const char * name, const char * mode );
 | 
|---|
 | 104 |         void close( istype * is );
 | 
|---|
 | 105 |         istype * read( istype *, char *, unsigned long int );
 | 
|---|
| [6ba0659] | 106 |         istype * ungetc( istype *, char );
 | 
|---|
| [829c907] | 107 |         int fmt( istype *, const char fmt[], ... );
 | 
|---|
| [86f384b] | 108 | }; // istream
 | 
|---|
| [51b73452] | 109 | 
 | 
|---|
| [4040425] | 110 | trait readable( otype T ) {
 | 
|---|
| [cf16f94] | 111 |         forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
 | 
|---|
| [86f384b] | 112 | }; // readable
 | 
|---|
| [51b73452] | 113 | 
 | 
|---|
| [90c3b1c] | 114 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
 | 
|---|
 | 115 | 
 | 
|---|
 | 116 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * );
 | 
|---|
 | 117 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * );
 | 
|---|
 | 118 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * );
 | 
|---|
 | 119 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * );
 | 
|---|
 | 120 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * );
 | 
|---|
 | 121 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * );
 | 
|---|
 | 122 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * );
 | 
|---|
 | 123 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * );
 | 
|---|
 | 124 | 
 | 
|---|
 | 125 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * );
 | 
|---|
 | 126 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * );
 | 
|---|
 | 127 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * );
 | 
|---|
 | 128 | 
 | 
|---|
 | 129 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * );
 | 
|---|
 | 130 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * );
 | 
|---|
 | 131 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
 | 
|---|
 | 132 | 
 | 
|---|
| [53ba273] | 133 | struct _Istream_cstrUC { char * s; };
 | 
|---|
 | 134 | _Istream_cstrUC cstr( char * );
 | 
|---|
 | 135 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrUC );
 | 
|---|
| [51b73452] | 136 | 
 | 
|---|
| [53ba273] | 137 | struct _Istream_cstrC { char * s; int size; };
 | 
|---|
 | 138 | _Istream_cstrC cstr( char *, int size );
 | 
|---|
 | 139 | forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_cstrC );
 | 
|---|
| [51b73452] | 140 | 
 | 
|---|
| [86bd7c1f] | 141 | // Local Variables: //
 | 
|---|
| [d3b7937] | 142 | // mode: c //
 | 
|---|
| [86bd7c1f] | 143 | // tab-width: 4 //
 | 
|---|
 | 144 | // End: //
 | 
|---|