GNU Octave  4.2.1
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
Classes | Namespaces | Macros | Typedefs | Functions
oct-stream.cc File Reference
#include <cassert>
#include <cctype>
#include <cstring>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <sstream>
#include <string>
#include "Array.h"
#include "Cell.h"
#include "byte-swap.h"
#include "lo-ieee.h"
#include "lo-mappers.h"
#include "lo-utils.h"
#include "oct-locbuf.h"
#include "quit.h"
#include "singleton-cleanup.h"
#include "str-vec.h"
#include "error.h"
#include "errwarn.h"
#include "input.h"
#include "interpreter.h"
#include "octave.h"
#include "oct-stdstrm.h"
#include "oct-stream.h"
#include "ov.h"
#include "ovl.h"
#include "utils.h"
Include dependency graph for oct-stream.cc:

Go to the source code of this file.

Classes

class  octave::delimited_stream
 
class  printf_format_elt
 
class  printf_format_list
 
class  printf_value_cache
 
class  scanf_format_elt
 
class  scanf_format_list
 
class  octave::textscan
 
class  octave::textscan_format_elt
 
class  octave::textscan_format_list
 
class  ultimate_element_type< T >
 
class  ultimate_element_type< octave_int< T > >
 

Namespaces

 octave
 Octave interface to the compression and uncompression libraries.
 

Macros

#define BEGIN_C_CONVERSION()
 
#define BEGIN_CHAR_CLASS_CONVERSION()
 
#define BEGIN_S_CONVERSION()
 
#define DO_LITERAL_CONVERSION()
 
#define DO_PCT_CONVERSION()
 
#define DO_WHITESPACE_CONVERSION()
 
#define FILL_TABLE_ROW(T, V)
 
#define FINISH_CHARACTER_CONVERSION()
 
#define INSTANTIATE_WRITE(T)
 
#define TABLE_ELT(T, U, V, W)   conv_fptr_table[oct_data_conv::T][oct_data_conv::U] = convert_and_copy<V, W>
 

Typedefs

typedef octave_value(* conv_fptr )(std::list< void * > &input_buf_list, octave_idx_type input_buf_elts, octave_idx_type elts_read, octave_idx_type nr, octave_idx_type nc, bool swap, bool do_float_fmt_conv, bool do_NA_conv, octave::mach_info::float_format from_flt_fmt)
 

Functions

template<typename SRC_T , typename DST_T >
static octave_value convert_and_copy (std::list< void * > &input_buf_list, octave_idx_type input_buf_elts, octave_idx_type elts_read, octave_idx_type nr, octave_idx_type nc, bool swap, bool do_float_fmt_conv, bool do_NA_conv, octave::mach_info::float_format from_flt_fmt)
 
template<typename T , typename V >
static void convert_chars (const void *data, void *conv_data, octave_idx_type n_elts)
 
template<typename T >
static bool convert_data (const T *data, void *conv_data, octave_idx_type n_elts, oct_data_conv::data_type output_type, octave::mach_info::float_format flt_fmt)
 
template<typename T , typename V >
static void convert_ints (const T *data, void *conv_data, octave_idx_type n_elts, bool swap)
 
static int convert_to_valid_int (const octave_value &tc, int &conv_err)
 
template<typename T >
int do_printf_conv (std::ostream &os, const char *fmt, int nsa, int sa_1, int sa_2, T arg, const std::string &who)
 
static size_t do_printf_string (std::ostream &os, const printf_format_elt *elt, int nsa, int sa_1, int sa_2, const std::string &arg, const std::string &who)
 
template<typename T >
void do_scanf_conv (std::istream &is, const scanf_format_elt &fmt, T valptr, Matrix &mval, double *data, octave_idx_type &idx, octave_idx_type &conversion_count, octave_idx_type nr, octave_idx_type max_size, bool discard)
 
template void do_scanf_conv (std::istream &, const scanf_format_elt &, double *, Matrix &, double *, octave_idx_type &, octave_idx_type &, octave_idx_type, octave_idx_type, bool)
 
static OCTAVE_NORETURN void err_invalid_file_id (int fid, const std::string &who)
 
static std::string expand_char_class (const std::string &s)
 
static octave_idx_type get_size (double d, const std::string &who)
 
static void get_size (const Array< double > &size, octave_idx_type &nr, octave_idx_type &nc, bool &one_elt_size_spec, const std::string &who)
 
static Cell init_inf_nan (void)
 
static bool is_nan_or_inf (const octave_value &val)
 
template<typename T >
static bool is_old_NA (T)
 
template<>
bool is_old_NA< double > (double val)
 
template<typename T >
std::istream & octave_scan (std::istream &is, const scanf_format_elt &fmt, T *valptr)
 
template<>
std::istream & octave_scan (std::istream &is, const scanf_format_elt &, char *valptr)
 
template<>
std::istream & octave_scan (std::istream &is, const scanf_format_elt &fmt, double *valptr)
 
template<typename T >
std::istream & octave_scan_1 (std::istream &is, const scanf_format_elt &fmt, T *valptr)
 
static bool ok_for_signed_int_conv (const octave_value &val)
 
static bool ok_for_unsigned_int_conv (const octave_value &val)
 
static double pown (double x, unsigned int n)
 
template<typename T >
static T replace_old_NA (T val)
 
template<>
double replace_old_NA< double > (double val)
 
static std::string switch_to_g_format (const printf_format_elt *elt)
 

Macro Definition Documentation

#define BEGIN_C_CONVERSION ( )
Value:
is.unsetf (std::ios::skipws); \
\
int width = elt->width ? elt->width : 1; \
\
std::string tmp (width, '\0'); \
\
int c = std::istream::traits_type::eof (); \
int n = 0; \
while (is && n < width \
&& (c = is.get ()) != std::istream::traits_type::eof ()) \
tmp[n++] = static_cast<char> (c); \
if (n > 0 && c == std::istream::traits_type::eof ()) \
is.clear (); \
\
tmp.resize (n)
while(ischar(s=fgets(fid))) fputs(stdout
if(nargin< 2) print_usage()
Definition: cellfun.cc:405
double tmp
Definition: data.cc:6300
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
Definition: lu.cc:138
write the output to stdout if nargout is
Definition: load-save.cc:1576
If this string is the system will ring the terminal sometimes it is useful to be able to print the original representation of the string
Definition: utils.cc:854

Definition at line 4422 of file oct-stream.cc.

Referenced by octave_base_stream::do_oscanf(), and octave_base_stream::do_scanf().

#define BEGIN_CHAR_CLASS_CONVERSION ( )

Definition at line 4492 of file oct-stream.cc.

Referenced by octave_base_stream::do_oscanf(), and octave_base_stream::do_scanf().

#define BEGIN_S_CONVERSION ( )

Definition at line 4443 of file oct-stream.cc.

Referenced by octave_base_stream::do_oscanf(), and octave_base_stream::do_scanf().

#define DO_LITERAL_CONVERSION ( )
Value:
do \
{ \
int c = std::istream::traits_type::eof (); \
\
int n = strlen (fmt); \
int i = 0; \
while (i < n && is && (c = is.get ()) != std::istream::traits_type::eof ()) \
{ \
if (c == static_cast<unsigned char> (fmt[i])) \
{ \
i++; \
continue; \
} \
{ \
is.putback (c); \
break; \
} \
} \
if (i != n) \
is.setstate (std::ios::failbit); \
} \
while (0)
while(ischar(s=fgets(fid))) fputs(stdout
if(nargin< 2) print_usage()
Definition: cellfun.cc:405
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
Definition: lu.cc:138
T::size_type strlen(const typename T::value_type *str)
Definition: oct-string.cc:75
=val(i)}if ode{val(i)}occurs in table i
Definition: lookup.cc:239
else
Definition: cellfun.cc:437
write the output to stdout if nargout is
Definition: load-save.cc:1576

Definition at line 4377 of file oct-stream.cc.

Referenced by octave_base_stream::do_oscanf(), and octave_base_stream::do_scanf().

#define DO_PCT_CONVERSION ( )
Value:
do \
{ \
int c = is.get (); \
if (c != std::istream::traits_type::eof ()) \
{ \
if (c != '%') \
{ \
is.putback (c); \
is.setstate (std::ios::failbit); \
} \
} \
is.setstate (std::ios::failbit); \
} \
while (0)
while(ischar(s=fgets(fid))) fputs(stdout
if(nargin< 2) print_usage()
Definition: cellfun.cc:405
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
Definition: lu.cc:138
write the output to stdout if nargout is
Definition: load-save.cc:1576

Definition at line 4404 of file oct-stream.cc.

Referenced by octave_base_stream::do_oscanf(), and octave_base_stream::do_scanf().

#define DO_WHITESPACE_CONVERSION ( )
Value:
do \
{ \
int c = std::istream::traits_type::eof (); \
while (is && (c = is.get ()) != std::istream::traits_type::eof () \
&& isspace (c)) \
{ /* skip whitespace */ } \
if (c != std::istream::traits_type::eof ()) \
is.putback (c); \
} \
while (0)
while(ischar(s=fgets(fid))) fputs(stdout
if(nargin< 2) print_usage()
Definition: cellfun.cc:405
the sparsity preserving column transformation such that that defines the pivoting threshold can be given in which case it defines the c
Definition: lu.cc:138
write the output to stdout if nargout is
Definition: load-save.cc:1576

Definition at line 4363 of file oct-stream.cc.

Referenced by octave_base_stream::do_oscanf(), and octave_base_stream::do_scanf().

#define FILL_TABLE_ROW (   T,
  V 
)
Value:
TABLE_ELT (T, dt_int8, V, int8NDArray); \
TABLE_ELT (T, dt_uint8, V, uint8NDArray); \
TABLE_ELT (T, dt_int16, V, int16NDArray); \
TABLE_ELT (T, dt_uint16, V, uint16NDArray); \
TABLE_ELT (T, dt_int32, V, int32NDArray); \
TABLE_ELT (T, dt_uint32, V, uint32NDArray); \
TABLE_ELT (T, dt_int64, V, int64NDArray); \
TABLE_ELT (T, dt_uint64, V, uint64NDArray); \
TABLE_ELT (T, dt_single, V, FloatNDArray); \
TABLE_ELT (T, dt_double, V, NDArray); \
TABLE_ELT (T, dt_char, V, charNDArray); \
TABLE_ELT (T, dt_schar, V, charNDArray); \
TABLE_ELT (T, dt_uchar, V, charNDArray); \
TABLE_ELT (T, dt_logical, V, boolNDArray);
F77_RET_T const F77_INT const F77_INT const F77_INT const F77_DBLE const F77_DBLE F77_INT F77_DBLE * V
#define TABLE_ELT(T, U, V, W)
Definition: oct-stream.cc:6342

Definition at line 6345 of file oct-stream.cc.

Referenced by octave_stream::finalize_read().

#define FINISH_CHARACTER_CONVERSION ( )

Definition at line 4539 of file oct-stream.cc.

Referenced by octave_base_stream::do_scanf().

#define INSTANTIATE_WRITE (   T)
Value:
template \
octave_idx_type \
octave_stream::write (const Array<T>& data, octave_idx_type block_size, \
oct_data_conv::data_type output_type, \
octave::mach_info::float_format flt_fmt
Definition: load-save.cc:723
N Dimensional Array with copy-on-write semantics.
Definition: Array.h:126

Definition at line 6957 of file oct-stream.cc.

#define TABLE_ELT (   T,
  U,
  V,
  W 
)    conv_fptr_table[oct_data_conv::T][oct_data_conv::U] = convert_and_copy<V, W>

Definition at line 6342 of file oct-stream.cc.

Typedef Documentation

typedef octave_value(* conv_fptr)(std::list< void * > &input_buf_list, octave_idx_type input_buf_elts, octave_idx_type elts_read, octave_idx_type nr, octave_idx_type nc, bool swap, bool do_float_fmt_conv, bool do_NA_conv, octave::mach_info::float_format from_flt_fmt)

Definition at line 6337 of file oct-stream.cc.

Function Documentation

template<typename SRC_T , typename DST_T >
static octave_value convert_and_copy ( std::list< void * > &  input_buf_list,
octave_idx_type  input_buf_elts,
octave_idx_type  elts_read,
octave_idx_type  nr,
octave_idx_type  nc,
bool  swap,
bool  do_float_fmt_conv,
bool  do_NA_conv,
octave::mach_info::float_format  from_flt_fmt 
)
static
template<typename T , typename V >
static void convert_chars ( const void *  data,
void *  conv_data,
octave_idx_type  n_elts 
)
static

Definition at line 6674 of file oct-stream.cc.

References V.

template<typename T >
static bool convert_data ( const T *  data,
void *  conv_data,
octave_idx_type  n_elts,
oct_data_conv::data_type  output_type,
octave::mach_info::float_format  flt_fmt 
)
static
template<typename T , typename V >
static void convert_ints ( const T *  data,
void *  conv_data,
octave_idx_type  n_elts,
bool  swap 
)
static

Definition at line 6686 of file oct-stream.cc.

References V, and val.

static int convert_to_valid_int ( const octave_value tc,
int conv_err 
)
static
template<typename T >
int do_printf_conv ( std::ostream &  os,
const char *  fmt,
int  nsa,
int  sa_1,
int  sa_2,
arg,
const std::string who 
)

Definition at line 5472 of file oct-stream.cc.

References error(), octave_format(), and retval.

Referenced by octave_base_stream::do_numeric_printf_conv().

static size_t do_printf_string ( std::ostream &  os,
const printf_format_elt elt,
int  nsa,
int  sa_1,
int  sa_2,
const std::string arg,
const std::string who 
)
static
template<typename T >
void do_scanf_conv ( std::istream &  is,
const scanf_format_elt fmt,
valptr,
Matrix mval,
double data,
octave_idx_type idx,
octave_idx_type conversion_count,
octave_idx_type  nr,
octave_idx_type  max_size,
bool  discard 
)

Definition at line 4329 of file oct-stream.cc.

References Array< T >::fortran_vec(), octave_scan(), and Matrix::resize().

Referenced by octave_base_stream::do_scanf().

template void do_scanf_conv ( std::istream &  ,
const scanf_format_elt ,
double ,
Matrix ,
double ,
octave_idx_type ,
octave_idx_type ,
octave_idx_type  ,
octave_idx_type  ,
bool   
)
static OCTAVE_NORETURN void err_invalid_file_id ( int  fid,
const std::string who 
)
static

Definition at line 7351 of file oct-stream.cc.

References error().

Referenced by octave_stream_list::do_lookup(), and octave_stream_list::do_remove().

static std::string expand_char_class ( const std::string s)
static

Definition at line 435 of file oct-stream.cc.

References c, octave_value::length(), retval, and string.

Referenced by scanf_format_list::finish_conversion().

static octave_idx_type get_size ( double  d,
const std::string who 
)
static
static void get_size ( const Array< double > &  size,
octave_idx_type nr,
octave_idx_type nc,
bool one_elt_size_spec,
const std::string who 
)
static

Definition at line 142 of file oct-stream.cc.

References error(), get_size(), octave::math::isinf(), Array< T >::numel(), and size.

static Cell init_inf_nan ( void  )
static

Definition at line 1196 of file oct-stream.cc.

References retval.

static bool is_nan_or_inf ( const octave_value val)
static
template<typename T >
static bool is_old_NA ( )
inlinestatic

Definition at line 6216 of file oct-stream.cc.

Referenced by convert_and_copy().

template<>
bool is_old_NA< double > ( double  val)
inline

Definition at line 6223 of file oct-stream.cc.

References __lo_ieee_is_old_NA(), and val.

template<typename T >
std::istream& octave_scan ( std::istream &  is,
const scanf_format_elt fmt,
T *  valptr 
)

Definition at line 4260 of file oct-stream.cc.

References is, octave_scan_1(), string, tmp, and scanf_format_elt::width.

Referenced by octave_base_stream::do_oscanf(), and do_scanf_conv().

template<>
std::istream& octave_scan ( std::istream &  is,
const scanf_format_elt ,
char *  valptr 
)

Definition at line 4286 of file oct-stream.cc.

template<>
std::istream& octave_scan ( std::istream &  is,
const scanf_format_elt fmt,
double valptr 
)

Definition at line 4294 of file oct-stream.cc.

References is, and panic_impossible.

template<typename T >
std::istream& octave_scan_1 ( std::istream &  is,
const scanf_format_elt fmt,
T *  valptr 
)

Definition at line 4173 of file oct-stream.cc.

References octave_value_list::clear(), is, scanf_format_elt::type, and value().

Referenced by octave_scan().

static bool ok_for_signed_int_conv ( const octave_value val)
static
static bool ok_for_unsigned_int_conv ( const octave_value val)
static
static double pown ( double  x,
unsigned int  n 
)
static

Definition at line 1181 of file oct-stream.cc.

References d, retval, and x.

Referenced by octave::textscan::read_double().

template<typename T >
static T replace_old_NA ( val)
inlinestatic

Definition at line 6230 of file oct-stream.cc.

References val.

Referenced by convert_and_copy().

template<>
double replace_old_NA< double > ( double  val)
inline

Definition at line 6237 of file oct-stream.cc.

References __lo_ieee_replace_old_NA(), and val.

static std::string switch_to_g_format ( const printf_format_elt elt)
static