GNU Octave  4.0.0
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
Macros | Functions
data-conv.cc File Reference
#include <cctype>
#include <cstdlib>
#include <iostream>
#include <limits>
#include <vector>
#include "byte-swap.h"
#include "data-conv.h"
#include "lo-error.h"
#include "lo-ieee.h"
#include "oct-locbuf.h"
Include dependency graph for data-conv.cc:

Go to the source code of this file.

Macros

#define FIND_SIZED_FLOAT_TYPE(VAL, BITS)
 
#define FIND_SIZED_INT_TYPE(VAL, BITS, TQ, Q)
 
#define GET_SIZED_INT_TYPE(T, U)
 
#define LS_DO_READ(TYPE, swap, data, size, len, stream)
 
#define LS_DO_WRITE(TYPE, data, size, len, stream)
 

Functions

void do_double_format_conversion (void *data, octave_idx_type len, oct_mach_info::float_format from_fmt, oct_mach_info::float_format to_fmt)
 
void do_float_format_conversion (void *data, octave_idx_type len, oct_mach_info::float_format from_fmt, oct_mach_info::float_format to_fmt)
 
void do_float_format_conversion (void *data, size_t sz, octave_idx_type len, oct_mach_info::float_format from_fmt, oct_mach_info::float_format to_fmt)
 
static void gripe_unrecognized_float_fmt (void)
 
static void IEEE_big_double_to_IEEE_little_double (void *d, octave_idx_type len)
 
static void IEEE_big_float_to_IEEE_little_float (void *d, octave_idx_type len)
 
static void IEEE_little_double_to_IEEE_big_double (void *d, octave_idx_type len)
 
static void IEEE_little_float_to_IEEE_big_float (void *d, octave_idx_type len)
 
static void init_sized_type_lookup_table (oct_data_conv::data_type table[3][4])
 
void read_doubles (std::istream &is, double *data, save_type type, octave_idx_type len, bool swap, oct_mach_info::float_format fmt)
 
void read_floats (std::istream &is, float *data, save_type type, octave_idx_type len, bool swap, oct_mach_info::float_format fmt)
 
static std::string strip_spaces (const std::string &str)
 
void write_doubles (std::ostream &os, const double *data, save_type type, octave_idx_type len)
 
void write_floats (std::ostream &os, const float *data, save_type type, octave_idx_type len)
 

Macro Definition Documentation

#define FIND_SIZED_FLOAT_TYPE (   VAL,
  BITS 
)
Value:
do \
{ \
int sz = BITS / std::numeric_limits<unsigned char>::digits; \
if (sizeof (float) == sz) \
else if (sizeof (double) == sz) \
else \
} \
while (0)

Definition at line 78 of file data-conv.cc.

Referenced by init_sized_type_lookup_table().

#define FIND_SIZED_INT_TYPE (   VAL,
  BITS,
  TQ,
  Q 
)
Value:
do \
{ \
int sz = BITS / std::numeric_limits<unsigned char>::digits; \
if (sizeof (TQ char) == sz) \
VAL = oct_data_conv::dt_ ## Q ## char; \
else if (sizeof (TQ short) == sz) \
VAL = oct_data_conv::dt_ ## Q ## short; \
else if (sizeof (TQ int) == sz) \
VAL = oct_data_conv::dt_ ## Q ## int; \
else if (sizeof (TQ long) == sz) \
VAL = oct_data_conv::dt_ ## Q ## long; \
else \
} \
while (0)
F77_RET_T const octave_idx_type const octave_idx_type const octave_idx_type double const octave_idx_type double const octave_idx_type double * Q
Definition: qz.cc:114

Definition at line 60 of file data-conv.cc.

Referenced by init_sized_type_lookup_table().

#define GET_SIZED_INT_TYPE (   T,
 
)
Value:
do \
{ \
switch (sizeof (T)) \
{ \
case 1: \
retval = dt_ ## U ## int8; \
break; \
\
case 2: \
retval = dt_ ## U ## int16; \
break; \
\
case 4: \
retval = dt_ ## U ## int32; \
break; \
\
case 8: \
retval = dt_ ## U ## int64; \
break; \
\
default: \
retval = dt_unknown; \
break; \
} \
} \
while (0)

Definition at line 149 of file data-conv.cc.

Referenced by oct_data_conv::string_to_data_type().

#define LS_DO_READ (   TYPE,
  swap,
  data,
  size,
  len,
  stream 
)
Value:
do \
{ \
if (len > 0) \
{ \
OCTAVE_LOCAL_BUFFER (TYPE, ptr, len); \
std::streamsize n_bytes = size * static_cast<std::streamsize> (len); \
stream.read (reinterpret_cast<char *> (ptr), n_bytes); \
if (swap) \
swap_bytes< size > (ptr, len); \
for (octave_idx_type i = 0; i < len; i++) \
data[i] = ptr[i]; \
} \
} \
while (0)
size_t size(T const (&)[z])
Definition: help.cc:103
#define OCTAVE_LOCAL_BUFFER(T, buf, size)
Definition: oct-locbuf.h:197

Definition at line 583 of file data-conv.cc.

Referenced by read_doubles(), and read_floats().

#define LS_DO_WRITE (   TYPE,
  data,
  size,
  len,
  stream 
)
Value:
do \
{ \
if (len > 0) \
{ \
char tmp_type = type; \
stream.write (&tmp_type, 1); \
OCTAVE_LOCAL_BUFFER (TYPE, ptr, len); \
for (octave_idx_type i = 0; i < len; i++) \
ptr[i] = static_cast<TYPE> (data[i]); \
std::streamsize n_bytes = size * static_cast<std::streamsize> (len); \
stream.write (reinterpret_cast<char *> (ptr), n_bytes); \
} \
} \
while (0)
size_t size(T const (&)[z])
Definition: help.cc:103
#define OCTAVE_LOCAL_BUFFER(T, buf, size)
Definition: oct-locbuf.h:197

Definition at line 602 of file data-conv.cc.

Referenced by write_doubles(), and write_floats().

Function Documentation

void do_double_format_conversion ( void *  data,
octave_idx_type  len,
oct_mach_info::float_format  from_fmt,
oct_mach_info::float_format  to_fmt 
)
void do_float_format_conversion ( void *  data,
octave_idx_type  len,
oct_mach_info::float_format  from_fmt,
oct_mach_info::float_format  to_fmt 
)
void do_float_format_conversion ( void *  data,
size_t  sz,
octave_idx_type  len,
oct_mach_info::float_format  from_fmt,
oct_mach_info::float_format  to_fmt 
)

Definition at line 755 of file data-conv.cc.

References do_double_format_conversion(), and do_float_format_conversion().

static void gripe_unrecognized_float_fmt ( void  )
static

Definition at line 621 of file data-conv.cc.

Referenced by do_double_format_conversion(), and do_float_format_conversion().

static void IEEE_big_double_to_IEEE_little_double ( void *  d,
octave_idx_type  len 
)
static

Definition at line 637 of file data-conv.cc.

References d, and swap_bytes< 8 >().

Referenced by do_double_format_conversion().

static void IEEE_big_float_to_IEEE_little_float ( void *  d,
octave_idx_type  len 
)
static

Definition at line 643 of file data-conv.cc.

References d, and swap_bytes< 4 >().

Referenced by do_float_format_conversion().

static void IEEE_little_double_to_IEEE_big_double ( void *  d,
octave_idx_type  len 
)
static

Definition at line 649 of file data-conv.cc.

References d, and swap_bytes< 8 >().

Referenced by do_double_format_conversion().

static void IEEE_little_float_to_IEEE_big_float ( void *  d,
octave_idx_type  len 
)
static

Definition at line 655 of file data-conv.cc.

References d, and swap_bytes< 4 >().

Referenced by do_float_format_conversion().

static void init_sized_type_lookup_table ( oct_data_conv::data_type  table[3][4])
static

Definition at line 115 of file data-conv.cc.

References FIND_SIZED_FLOAT_TYPE, and FIND_SIZED_INT_TYPE.

Referenced by oct_data_conv::string_to_data_type().

void read_doubles ( std::istream &  is,
double data,
save_type  type,
octave_idx_type  len,
bool  swap,
oct_mach_info::float_format  fmt 
)
void read_floats ( std::istream &  is,
float data,
save_type  type,
octave_idx_type  len,
bool  swap,
oct_mach_info::float_format  fmt 
)
static std::string strip_spaces ( const std::string &  str)
static

Definition at line 132 of file data-conv.cc.

Referenced by oct_data_conv::string_to_data_type().

void write_doubles ( std::ostream &  os,
const double data,
save_type  type,
octave_idx_type  len 
)
void write_floats ( std::ostream &  os,
const float data,
save_type  type,
octave_idx_type  len 
)