ov-flt-cx-mat.h

Go to the documentation of this file.
00001 /*
00002 
00003 Copyright (C) 1996-2012 John W. Eaton
00004 Copyright (C) 2009-2010 VZLU Prague
00005 
00006 This file is part of Octave.
00007 
00008 Octave is free software; you can redistribute it and/or modify it
00009 under the terms of the GNU General Public License as published by the
00010 Free Software Foundation; either version 3 of the License, or (at your
00011 option) any later version.
00012 
00013 Octave is distributed in the hope that it will be useful, but WITHOUT
00014 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00015 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00016 for more details.
00017 
00018 You should have received a copy of the GNU General Public License
00019 along with Octave; see the file COPYING.  If not, see
00020 <http://www.gnu.org/licenses/>.
00021 
00022 */
00023 
00024 #if !defined (octave_float_complex_matrix_h)
00025 #define octave_float_complex_matrix_h 1
00026 
00027 #include <cstdlib>
00028 
00029 #include <iosfwd>
00030 #include <string>
00031 
00032 #include "mx-base.h"
00033 #include "oct-alloc.h"
00034 #include "str-vec.h"
00035 
00036 #include "error.h"
00037 #include "oct-stream.h"
00038 #include "ov-base.h"
00039 #include "ov-base-mat.h"
00040 #include "ov-typeinfo.h"
00041 
00042 #include "MatrixType.h"
00043 
00044 class octave_value_list;
00045 
00046 class tree_walker;
00047 
00048 // Complex matrix values.
00049 
00050 class
00051 OCTINTERP_API
00052 octave_float_complex_matrix : public octave_base_matrix<FloatComplexNDArray>
00053 {
00054 public:
00055 
00056   octave_float_complex_matrix (void)
00057     : octave_base_matrix<FloatComplexNDArray> () { }
00058 
00059   octave_float_complex_matrix (const FloatComplexNDArray& m)
00060     : octave_base_matrix<FloatComplexNDArray> (m) { }
00061 
00062   octave_float_complex_matrix (const FloatComplexMatrix& m)
00063     : octave_base_matrix<FloatComplexNDArray> (m) { }
00064 
00065   octave_float_complex_matrix (const FloatComplexMatrix& m, const MatrixType& t)
00066     : octave_base_matrix<FloatComplexNDArray> (m, t) { }
00067 
00068   octave_float_complex_matrix (const Array<FloatComplex>& m)
00069     : octave_base_matrix<FloatComplexNDArray> (FloatComplexNDArray (m)) { }
00070 
00071   octave_float_complex_matrix (const FloatComplexDiagMatrix& d)
00072     : octave_base_matrix<FloatComplexNDArray> (FloatComplexMatrix (d)) { }
00073 
00074   octave_float_complex_matrix (const FloatComplexRowVector& v)
00075     : octave_base_matrix<FloatComplexNDArray> (FloatComplexMatrix (v)) { }
00076 
00077   octave_float_complex_matrix (const FloatComplexColumnVector& v)
00078     : octave_base_matrix<FloatComplexNDArray> (FloatComplexMatrix (v)) { }
00079 
00080   octave_float_complex_matrix (const octave_float_complex_matrix& cm)
00081     : octave_base_matrix<FloatComplexNDArray> (cm) { }
00082 
00083   ~octave_float_complex_matrix (void) { }
00084 
00085   octave_base_value *clone (void) const { return new octave_float_complex_matrix (*this); }
00086   octave_base_value *empty_clone (void) const { return new octave_float_complex_matrix (); }
00087 
00088   octave_base_value *try_narrowing_conversion (void);
00089 
00090   builtin_type_t builtin_type (void) const { return btyp_float_complex; }
00091 
00092   bool is_complex_matrix (void) const { return true; }
00093 
00094   bool is_complex_type (void) const { return true; }
00095 
00096   bool is_single_type (void) const { return true; }
00097 
00098   bool is_float_type (void) const { return true; }
00099 
00100   double double_value (bool = false) const;
00101 
00102   float float_value (bool = false) const;
00103 
00104   double scalar_value (bool frc_str_conv = false) const
00105     { return double_value (frc_str_conv); }
00106 
00107   float float_scalar_value (bool frc_str_conv = false) const
00108     { return float_value (frc_str_conv); }
00109 
00110   Matrix matrix_value (bool = false) const;
00111 
00112   FloatMatrix float_matrix_value (bool = false) const;
00113 
00114   Complex complex_value (bool = false) const;
00115 
00116   FloatComplex float_complex_value (bool = false) const;
00117 
00118   ComplexMatrix complex_matrix_value (bool = false) const;
00119 
00120   FloatComplexMatrix float_complex_matrix_value (bool = false) const;
00121 
00122   ComplexNDArray complex_array_value (bool = false) const { return matrix; }
00123 
00124   FloatComplexNDArray float_complex_array_value (bool = false) const;
00125 
00126   boolNDArray bool_array_value (bool warn = false) const;
00127 
00128   charNDArray char_array_value (bool frc_str_conv = false) const;
00129 
00130   SparseMatrix sparse_matrix_value (bool = false) const;
00131 
00132   SparseComplexMatrix sparse_complex_matrix_value (bool = false) const;
00133 
00134   octave_value diag (octave_idx_type k = 0) const;
00135 
00136   void increment (void) { matrix += FloatComplex (1.0); }
00137 
00138   void decrement (void) { matrix -= FloatComplex (1.0); }
00139 
00140   void changesign (void) { matrix.changesign (); }
00141 
00142   bool save_ascii (std::ostream& os);
00143 
00144   bool load_ascii (std::istream& is);
00145 
00146   bool save_binary (std::ostream& os, bool& save_as_floats);
00147 
00148   bool load_binary (std::istream& is, bool swap,
00149                     oct_mach_info::float_format fmt);
00150 
00151 #if defined (HAVE_HDF5)
00152   bool save_hdf5 (hid_t loc_id, const char *name, bool save_as_floats);
00153 
00154   bool load_hdf5 (hid_t loc_id, const char *name);
00155 #endif
00156 
00157   int write (octave_stream& os, int block_size,
00158              oct_data_conv::data_type output_type, int skip,
00159              oct_mach_info::float_format flt_fmt) const
00160     {
00161       // Yes, for compatibility, we drop the imaginary part here.
00162       return os.write (matrix_value (true), block_size, output_type,
00163                        skip, flt_fmt);
00164     }
00165 
00166   void print_raw (std::ostream& os, bool pr_as_read_syntax = false) const;
00167 
00168   mxArray *as_mxArray (void) const;
00169 
00170   octave_value map (unary_mapper_t umap) const;
00171 
00172 private:
00173 
00174   DECLARE_OCTAVE_ALLOCATOR
00175 
00176   DECLARE_OV_TYPEID_FUNCTIONS_AND_DATA
00177 };
00178 
00179 #endif
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Defines