Mercurial > octave
view libinterp/corefcn/pr-flt-fmt.h @ 32660:f53ac65ffba6
maint: New method rwdata() as clearer alternative to fortran_vec().
* etc/NEWS.10.md: Announce new method and recommend its use in future code.
* doc/interpreter/external.txi: Update Octave manual to use rwdata.
* liboctave/array/Array.h (rwdata): New function prototype.
* liboctave/array/Array.h (fortran_vec): Make inline function that calls rwdata().
* liboctave/array/DiagArray2.h (rwdata): New function prototype.
* liboctave/array/DiagArray2.h (fortran_vec): Make inline function that calls rwdata().
* examples/code/fortrandemo.cc, libgui/graphics/QtHandlesUtils.cc,
libinterp/corefcn/Cell.cc, libinterp/corefcn/__dsearchn__.cc,
libinterp/corefcn/__ichol__.cc, libinterp/corefcn/__ilu__.cc,
libinterp/corefcn/__lin_interpn__.cc, libinterp/corefcn/__magick_read__.cc,
libinterp/corefcn/__pchip_deriv__.cc, libinterp/corefcn/amd.cc,
libinterp/corefcn/data.cc, libinterp/corefcn/dot.cc,
libinterp/corefcn/ellipj.cc, libinterp/corefcn/filter.cc,
libinterp/corefcn/gcd.cc, libinterp/corefcn/gl-render.cc,
libinterp/corefcn/graphics.cc, libinterp/corefcn/graphics.in.h,
libinterp/corefcn/kron.cc, libinterp/corefcn/ls-mat4.cc,
libinterp/corefcn/ls-mat5.cc, libinterp/corefcn/mex.cc,
libinterp/corefcn/oct-map.cc, libinterp/corefcn/oct-stream.cc,
libinterp/corefcn/ordqz.cc, libinterp/corefcn/ordschur.cc,
libinterp/corefcn/perms.cc, libinterp/corefcn/psi.cc,
libinterp/corefcn/quadcc.cc, libinterp/corefcn/qz.cc,
libinterp/corefcn/rand.cc, libinterp/corefcn/sqrtm.cc,
libinterp/corefcn/strfind.cc, libinterp/corefcn/symrcm.cc,
libinterp/corefcn/tril.cc, libinterp/corefcn/typecast.cc,
libinterp/corefcn/xdiv.cc, libinterp/dldfcn/__delaunayn__.cc,
libinterp/dldfcn/__glpk__.cc, libinterp/dldfcn/__ode15__.cc,
libinterp/dldfcn/__voronoi__.cc, libinterp/dldfcn/audioread.cc,
libinterp/dldfcn/convhulln.cc, libinterp/octave-value/ov-base-int.cc,
libinterp/octave-value/ov-bool-mat.cc, libinterp/octave-value/ov-ch-mat.cc,
libinterp/octave-value/ov-cx-diag.cc, libinterp/octave-value/ov-cx-mat.cc,
libinterp/octave-value/ov-flt-cx-diag.cc,
libinterp/octave-value/ov-flt-cx-mat.cc,
libinterp/octave-value/ov-flt-re-diag.cc,
libinterp/octave-value/ov-flt-re-mat.cc, libinterp/octave-value/ov-intx.h,
libinterp/octave-value/ov-java.cc, libinterp/octave-value/ov-perm.cc,
libinterp/octave-value/ov-re-diag.cc, libinterp/octave-value/ov-re-mat.cc,
libinterp/octave-value/ov-str-mat.cc, liboctave/array/Array-base.cc,
liboctave/array/Array-util.cc, liboctave/array/CColVector.cc,
liboctave/array/CDiagMatrix.cc, liboctave/array/CMatrix.cc,
liboctave/array/CNDArray.cc, liboctave/array/CRowVector.cc,
liboctave/array/CSparse.cc, liboctave/array/DiagArray2.h,
liboctave/array/MArray.cc, liboctave/array/PermMatrix.cc,
liboctave/array/Range.h, liboctave/array/Sparse.cc,
liboctave/array/boolSparse.cc, liboctave/array/dColVector.cc,
liboctave/array/dDiagMatrix.cc, liboctave/array/dMatrix.cc,
liboctave/array/dNDArray.cc, liboctave/array/dRowVector.cc,
liboctave/array/dSparse.cc, liboctave/array/fCColVector.cc,
liboctave/array/fCDiagMatrix.cc, liboctave/array/fCMatrix.cc,
liboctave/array/fCNDArray.cc, liboctave/array/fCRowVector.cc,
liboctave/array/fColVector.cc, liboctave/array/fMatrix.cc,
liboctave/array/fNDArray.cc, liboctave/array/fRowVector.cc,
liboctave/array/idx-vector.cc, liboctave/numeric/CollocWt.cc,
liboctave/numeric/DASPK.cc, liboctave/numeric/DASRT.cc,
liboctave/numeric/DASSL.cc, liboctave/numeric/EIG.cc,
liboctave/numeric/LSODE.cc, liboctave/numeric/Quad.cc,
liboctave/numeric/aepbalance.cc, liboctave/numeric/bsxfun-defs.cc,
liboctave/numeric/chol.cc, liboctave/numeric/eigs-base.cc,
liboctave/numeric/fEIG.cc, liboctave/numeric/gepbalance.cc,
liboctave/numeric/gsvd.cc, liboctave/numeric/hess.cc, liboctave/numeric/lu.cc,
liboctave/numeric/oct-convn.cc, liboctave/numeric/oct-rand.cc,
liboctave/numeric/qr.cc, liboctave/numeric/qrp.cc, liboctave/numeric/schur.cc,
liboctave/numeric/sparse-dmsolve.cc, liboctave/numeric/sparse-lu.cc,
liboctave/numeric/sparse-qr.cc, liboctave/numeric/svd.cc,
liboctave/operators/mx-inlines.cc, liboctave/operators/mx-op-defs.h,
liboctave/util/oct-base64.cc, liboctave/util/oct-binmap.h,
liboctave/util/str-vec.cc:
Replace calls to fortran_vec() with calls to rwdata().
author | Rik <rik@octave.org> |
---|---|
date | Wed, 27 Dec 2023 16:55:14 -0800 |
parents | 4b601ca024d5 |
children |
line wrap: on
line source
//////////////////////////////////////////////////////////////////////// // // Copyright (C) 1993-2024 The Octave Project Developers // // See the file COPYRIGHT.md in the top-level directory of this // distribution or <https://octave.org/copyright/>. // // This file is part of Octave. // // Octave is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Octave is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Octave; see the file COPYING. If not, see // <https://www.gnu.org/licenses/>. // //////////////////////////////////////////////////////////////////////// #if ! defined (octave_pr_flt_fmt_h) #define octave_pr_flt_fmt_h 1 #include "octave-config.h" #include <iomanip> #include <iosfwd> template <typename T> class pr_engineering_float; template <typename T> class pr_formatted_float; template <typename T> class pr_rational_float; extern OCTINTERP_API int output_precision (); extern OCTINTERP_API void set_output_prec (int prec); class OCTINTERP_API float_format { public: float_format (int w = 0, int p = output_precision (), int f = 0) : m_fw (w), m_ex (0), m_prec (p), m_fmt (f), m_up (0), m_sp (0) { } float_format (int w, int e, int p, int f) : m_fw (w), m_ex (e), m_prec (p), m_fmt (f), m_up (0), m_sp (0) { } float_format (const float_format&) = default; float_format& operator = (const float_format&) = default; ~float_format () = default; float_format& scientific () { m_fmt = std::ios::scientific; return *this; } float_format& fixed () { m_fmt = std::ios::fixed; return *this; } float_format& general () { m_fmt = 0; return *this; } float_format& uppercase () { m_up = std::ios::uppercase; return *this; } float_format& lowercase () { m_up = 0; return *this; } float_format& precision (int p) { m_prec = p; return *this; } float_format& width (int w) { m_fw = w; return *this; } float_format& exponent_width (int w) { m_ex = w; return *this; } float_format& trailing_zeros (bool tz = true) { m_sp = (tz ? std::ios::showpoint : 0); return *this; } std::ios::fmtflags format_flags () const { return static_cast<std::ios::fmtflags> (m_fmt | m_up | m_sp); } int format () const { return m_fmt; } bool is_scientific () const { return m_fmt == std::ios::scientific; } bool is_fixed () const { return m_fmt == std::ios::fixed; } bool is_general () const { return m_fmt == 0; } bool is_uppercase () const { return m_up == std::ios::uppercase; } bool is_lowercase () const { return m_up == 0; } int precision () const { return m_prec; } int width () const { return m_fw; } int exponent_width () const { return m_ex; } bool show_trailing_zeros () const { return m_sp == std::ios::showpoint; } template <typename T> friend std::ostream& operator << (std::ostream& os, const pr_engineering_float<T>& pef); template <typename T> friend std::ostream& operator << (std::ostream& os, const pr_formatted_float<T>& pff); template <typename T> friend std::ostream& operator << (std::ostream& os, const pr_rational_float<T>& prf); private: // Field width. Zero means as wide as necessary. int m_fw; // Exponent Field width. Zero means as wide as necessary. int m_ex; // Precision. int m_prec; // Format. int m_fmt; // E or e. int m_up; // Show trailing zeros. int m_sp; }; class OCTINTERP_API float_display_format { public: float_display_format () = default; float_display_format (double scale, const float_format& real_fmt, const float_format& imag_fmt = float_format ()) : m_scale (scale), m_real_fmt (real_fmt), m_imag_fmt (imag_fmt) { } explicit float_display_format (const float_format& real_fmt, const float_format& imag_fmt = float_format ()) : m_scale (1.0), m_real_fmt (real_fmt), m_imag_fmt (imag_fmt) { } float_display_format (const float_display_format&) = default; float_display_format& operator = (const float_display_format&) = default; ~float_display_format () = default; double scale_factor () const { return m_scale; } float_format real_format () const { return m_real_fmt; } float_format imag_format () const { return m_imag_fmt; } void set_precision (int prec) { m_real_fmt.precision (prec); m_imag_fmt.precision (prec); } private: double m_scale = 1.0; float_format m_real_fmt; float_format m_imag_fmt; }; #endif