From 89f8dc531e0b91e745da15b02ee125b7e0affb72 Mon Sep 17 00:00:00 2001 From: Harry Moffat Date: Sat, 14 Mar 2009 00:27:10 +0000 Subject: [PATCH] Added in a static global variable that controls cropping. --- Cantera/src/base/PrintCtrl.cpp | 33 ++++++++++++++++++++++-- Cantera/src/base/PrintCtrl.h | 46 +++++++++++++++++++++++++++++++++- 2 files changed, 76 insertions(+), 3 deletions(-) diff --git a/Cantera/src/base/PrintCtrl.cpp b/Cantera/src/base/PrintCtrl.cpp index e3792d90d..973b248b2 100644 --- a/Cantera/src/base/PrintCtrl.cpp +++ b/Cantera/src/base/PrintCtrl.cpp @@ -26,12 +26,19 @@ using namespace std; namespace Cantera { - PrintCtrl::PrintCtrl(std::ostream &coutProxy, int Ndec) : + + // Storage for the global crop flag + PrintCtrl::CROP_TYPE_GLOBAL PrintCtrl::GlobalCrop = GCT_NOPREF; + + + PrintCtrl::PrintCtrl(std::ostream &coutProxy, int Ndec, + CROP_TYPE ctlocal) : m_cout(coutProxy), m_Ndec(Ndec), m_precision(12), m_wMin(9), - m_wMax(19) + m_wMax(19), + m_cropCntrl(ctlocal) { } @@ -139,6 +146,9 @@ namespace Cantera { * This routine will return 0.0 */ double PrintCtrl::cropAbs10(const double d, int Ndec) const { + if (!doCrop()) { + return d; + } if (Ndec < -301 || Ndec > 301) { return d; } @@ -171,6 +181,9 @@ namespace Cantera { * This routine will return 1.03E-15 */ double PrintCtrl::cropSigDigits(const double d, int nSig) const { + if (!doCrop()) { + return d; + } if (nSig <=0) nSig = 1; if (nSig >=9) nSig = 9; double sgn = 1.0; @@ -244,5 +257,21 @@ namespace Cantera { return nold; } + bool PrintCtrl::doCrop() const { + bool retn = ((m_cropCntrl == CT_ON) || (m_cropCntrl == CT_ON_GLOBALOBEY)); + if (m_cropCntrl == CT_ON_GLOBALOBEY) { + if (GlobalCrop == GCT_NOCROP) { + retn = false; + } + } else if (m_cropCntrl == CT_OFF_GLOBALOBEY) { + if (GlobalCrop == GCT_CROP) { + retn = true; + } + } + return retn; + } + void PrintCtrl:: setCropCntrl(CROP_TYPE ctlocal) { + m_cropCntrl = ctlocal; + } } diff --git a/Cantera/src/base/PrintCtrl.h b/Cantera/src/base/PrintCtrl.h index f82e9a541..cce65457f 100644 --- a/Cantera/src/base/PrintCtrl.h +++ b/Cantera/src/base/PrintCtrl.h @@ -54,6 +54,34 @@ namespace Cantera { class PrintCtrl { public: + //! enum for cropping control + enum CROP_TYPE { + //! Turn off cropping always + CT_OFF=0, + //! Turn off cropping, unless the global toggle is turned on + CT_OFF_GLOBALOBEY, + //! Turn on cropping unless the global toggle is turned off + CT_ON_GLOBALOBEY, + //! Turn on cropping always + CT_ON + }; + + //! enum for global cropping control + enum CROP_TYPE_GLOBAL { + //! no preference for global cropping + GCT_NOPREF = 0, + //! global toggle for turning on cropping + GCT_CROP, + //! global toggle for turning off cropping + GCT_NOCROP + }; + + //! static enum for turning on and off cropping + /*! + * The default is to not have a preference for cropping + */ + static CROP_TYPE_GLOBAL GlobalCrop; + //! Constructor /*! * This also serves to initialize the ticks within the object @@ -62,8 +90,10 @@ namespace Cantera { * to use for all IO from ths object. * @param Ndec value of Ndec. Defaults to -1000, i.e., * no decade cropping + * @param ctlocal The default is to turn on cropping all the time. */ - PrintCtrl(std::ostream &coutProxy = std::cout, int Ndec = -1000); + PrintCtrl(std::ostream &coutProxy = std::cout, int Ndec = -1000, + CROP_TYPE ctlocal = CT_ON); //! Print a double using scientific notation /*! @@ -172,9 +202,21 @@ namespace Cantera { * @return returns the old default */ int setWmax(int wMax); + + //! Set the cropping control flag + /*! + * @param ctlocal Local enum value for the cropping type + */ + void setCropCntrl(CROP_TYPE ctlocal); private: + + //! private function to figure out cropping logic + /*! + * @return Returns the decision as to whether to crop or not + */ + bool doCrop() const; //! This is the ostream to send all output from the object /*! @@ -209,6 +251,8 @@ namespace Cantera { */ int m_wMax; + //! Local Cropping Control + CROP_TYPE m_cropCntrl; }; }