Mercurial > hg > octave-lyh
diff src/oct-stream.cc @ 3340:585a8809fd9b
[project @ 1999-11-05 07:02:30 by jwe]
author | jwe |
---|---|
date | Fri, 05 Nov 1999 07:02:36 +0000 |
parents | 9c782a34b545 |
children | 14cfc9475fe4 |
line wrap: on
line diff
--- a/src/oct-stream.cc +++ b/src/oct-stream.cc @@ -210,7 +210,7 @@ for (int i = 0; i < n; i++) { - scanf_format_elt *elt = list (i); + scanf_format_elt *elt = list(i); delete elt; } } @@ -235,7 +235,7 @@ if (num_elts == list.length ()) list.resize (2 * num_elts); - list (num_elts++) = elt; + list(num_elts++) = elt; } else delete [] text; @@ -405,7 +405,7 @@ for (int i = 0; i < n; i++) { - scanf_format_elt *elt = list (i); + scanf_format_elt *elt = list(i); cerr << elt->width << "\t" << elt->discard << "\t" @@ -424,7 +424,7 @@ { for (int i = 0; i < n; i++) { - scanf_format_elt *elt = list (i); + scanf_format_elt *elt = list(i); switch (elt->type) { @@ -452,7 +452,7 @@ { for (int i = 0; i < n; i++) { - scanf_format_elt *elt = list (i); + scanf_format_elt *elt = list(i); switch (elt->type) { @@ -532,7 +532,7 @@ for (int i = 0; i < n; i++) { - printf_format_elt *elt = list (i); + printf_format_elt *elt = list(i); delete elt; } } @@ -557,7 +557,7 @@ if (num_elts == list.length ()) list.resize (2 * num_elts); - list (num_elts++) = elt; + list(num_elts++) = elt; } else delete [] text; @@ -716,7 +716,7 @@ for (int i = 0; i < n; i++) { - printf_format_elt *elt = list (i); + printf_format_elt *elt = list(i); cerr << elt->args<< "\t" << elt->type << "\t" @@ -2178,6 +2178,43 @@ error (msg); } +octave_stream::octave_stream (octave_base_stream *bs = 0) + : rep (bs) +{ + if (rep) + rep->count = 1; +} + +octave_stream::~octave_stream (void) +{ + if (rep && --rep->count == 0) + delete rep; +} + +octave_stream::octave_stream (const octave_stream& s) + : rep (s.rep) +{ + if (rep) + rep->count++; +} + +octave_stream& +octave_stream::operator = (const octave_stream& s) +{ + if (rep != s.rep) + { + if (rep && --rep->count == 0) + delete rep; + + rep = s.rep; + + if (rep) + rep->count++; + } + + return *this; +} + int octave_stream::flush (void) { @@ -2343,6 +2380,24 @@ return retval; } +bool +octave_stream::is_open (void) const +{ + bool retval = false; + + if (stream_ok ("is_open")) + retval = rep->is_open (); + + return retval; +} + +void +octave_stream::close (void) +{ + if (stream_ok ("close")) + rep->close (); +} + octave_value octave_stream::read (const Matrix& size, oct_data_conv::data_type dt, int skip, @@ -2454,7 +2509,7 @@ } string -octave_stream::name (void) +octave_stream::name (void) const { string retval; @@ -2465,7 +2520,7 @@ } int -octave_stream::mode (void) +octave_stream::mode (void) const { int retval = 0; @@ -2476,7 +2531,7 @@ } oct_mach_info::float_format -octave_stream::float_format (void) +octave_stream::float_format (void) const { oct_mach_info::float_format retval = oct_mach_info::unknown; @@ -2577,21 +2632,21 @@ } octave_value -octave_stream_list::insert (octave_base_stream *obs) +octave_stream_list::insert (const octave_stream& os) { - return (instance_ok ()) ? instance->do_insert (obs) : octave_value (-1.0); + return (instance_ok ()) ? instance->do_insert (os) : octave_value (-1.0); } -octave_stream * +octave_stream octave_stream_list::lookup (int fid) { - return (instance_ok ()) ? instance->do_lookup (fid) : 0; + return (instance_ok ()) ? instance->do_lookup (fid) : octave_stream (); } -octave_stream * +octave_stream octave_stream_list::lookup (const octave_value& fid) { - return (instance_ok ()) ? instance->do_lookup (fid) : 0; + return (instance_ok ()) ? instance->do_lookup (fid) : octave_stream (); } int @@ -2645,64 +2700,57 @@ } octave_value -octave_stream_list::do_insert (octave_base_stream *obs) +octave_stream_list::do_insert (const octave_stream& os) { + octave_value retval; + int stream_number = -1; - octave_stream *os = 0; - - if (obs) + // Insert item in first open slot, increasing size of list if + // necessary. + + for (int i = 0; i < curr_len; i++) { - os = new octave_stream (obs); - - // Insert item in first open slot, increasing size of list if - // necessary. - - for (int i = 0; i < curr_len; i++) + octave_stream tmp = list(i); + + if (! tmp) { - octave_stream *tmp = list (i); - - if (! tmp) - { - list (i) = os; - stream_number = i; - break; - } - } - - if (stream_number < 0) - { - int total_len = list.length (); - - if (curr_len == total_len) - list.resize (total_len * 2); - - list (curr_len) = os; - stream_number = curr_len; - curr_len++; + list(i) = os; + stream_number = i; + break; } } - else - ::error ("octave_stream_list: attempt to insert invalid stream"); + + if (stream_number < 0) + { + int total_len = list.length (); + + if (curr_len == total_len) + list.resize (total_len * 2); + + list(curr_len) = os; + stream_number = curr_len; + curr_len++; + } return octave_value (os, stream_number); } -octave_stream * +octave_stream octave_stream_list::do_lookup (int fid) const { - octave_stream *retval = 0; + octave_stream retval; if (fid >= 0 && fid < curr_len) - retval = list (fid); + retval = list(fid); return retval; } -octave_stream * +octave_stream octave_stream_list::do_lookup (const octave_value& fid) const { - octave_stream *retval = 0; + octave_stream retval; int i = get_file_number (fid); @@ -2721,12 +2769,12 @@ if (fid > 2 && fid < curr_len) { - octave_stream *os = list (fid); + octave_stream os = list(fid); if (os) { - delete os; - list (fid) = 0; + os.close (); + list(fid) = octave_stream (); retval = 0; } } @@ -2752,19 +2800,13 @@ { // Do flush stdout and stderr. - list (0) -> flush (); - list (1) -> flush (); + list(0) . flush (); + list(1) . flush (); // But don't delete them or stdin. for (int i = 3; i < curr_len; i++) - { - octave_stream *os = list (i); - - delete os; - - list (i) = 0; - } + list(i) = octave_stream (); } string_vector @@ -2772,15 +2814,15 @@ { string_vector retval; - octave_stream *os = do_lookup (fid); + octave_stream os = do_lookup (fid); if (os) { retval.resize (3); - retval(0) = os->name (); - retval(1) = octave_stream::mode_as_string (os->mode ()); - retval(2) = oct_mach_info::float_format_as_string (os->float_format ()); + retval(0) = os.name (); + retval(1) = octave_stream::mode_as_string (os.mode ()); + retval(2) = oct_mach_info::float_format_as_string (os.float_format ()); } else ::error ("invalid file id"); @@ -2820,16 +2862,16 @@ for (int i = 0; i < curr_len; i++) { - octave_stream *os = list (i); + octave_stream os = list(i); if (os) { - string mode = octave_stream::mode_as_string (os->mode ()); + string mode = octave_stream::mode_as_string (os.mode ()); string arch = - oct_mach_info::float_format_as_string (os->float_format ()); - - string name = os->name (); + oct_mach_info::float_format_as_string (os.float_format ()); + + string name = os.name (); buf << " " << setiosflags (ios::right) @@ -2863,7 +2905,7 @@ for (int i = 3; i < curr_len; i++) { - if (list (i)) + if (list(i)) retval (0, num_open++) = i; } @@ -2885,9 +2927,9 @@ for (int i = 3; i < curr_len; i++) { - octave_stream *os = list (i); - - if (os && os->name () == nm) + octave_stream os = list(i); + + if (os && os.name () == nm) { retval = i; break;