diff --git a/src/dualplot.cpp b/src/dualplot.cpp index 9cd5ad16701867fa4afc59203db07ec41f21f496..eebe5dc10eadb28e8e5f5d62d70a5e0e4197159c 100644 --- a/src/dualplot.cpp +++ b/src/dualplot.cpp @@ -31,37 +31,45 @@ CRange::CRange(void) { - // initialize as infinite - flag = 1; - inf = 0; - sup = 0; - valid = 1; + inf = -INFINITY; + sup = +INFINITY; } CRange::CRange( double infin, double supin ) { - flag = 0; + if( infin > supin ) + raise string( "invalid plot range" ); + if( infin == supin ) + raise string( "empty plot range" ); inf = infin; sup = supin; - test(); } -CRange::CRange(int flagin) -{ - flag = flagin; - inf = 0; - sup = 0; - valid = 1; -} - - -char RangeDecode( const string& resp, CRange *rval ); - CRange::CRange( const string& text ) { CRange rval; char ok; + double r1, r2; + if ( resp=="" ) { + return 'd'; + } else if ( resp=="*" ) { + *rval = CRange(1); + return 'v'; + } else if ( resp=="-" ) { + *rval = CRange(2); + return 'v'; + } + string s1, s2; + mystd::string_extract_word(string(resp), &s1, &s2); + if (!mystd::any2dbl(s1,&r1) && !mystd::any2dbl(s2,&r2)) { + *rval = CRange(r1, r2); + if (!rval->test()) return 'h'; + return 'v'; + } + return 'h'; + ok = RangeDecode( text, &rval ); + if (ok!='v') { flag = 1; inf = 0; @@ -121,25 +129,22 @@ bool CRange::empty() const bool CRange::finite() const { - return (!this->infinite() && !this->empty()); + return inf!=-INFINITY && sup!=+INFINITY; } bool CRange::contained(double val) const { - if (this->infinite()) - return 1; - else if (this->empty()) - return 0; - else - return ((inf<val || (!(flag&4) && inf==val)) && - (sup>val || (!(flag&8) && sup==val))); + return inf <= val && val <= sup; } double CRange::relval(int logflag, double v) const { - if (flag&1 || flag&2) return 0; + if ( !finite() ) + raise string( "undefined range" ); if (logflag) { - if(inf<0 || v<0) return 0; + if(inf<0 || v<0) + // return 0; + raise string( "negative value in log range" ); return (double) (log(v/(double)inf) / log((double)sup/(double)inf)); } else { @@ -147,58 +152,17 @@ double CRange::relval(int logflag, double v) const } } -bool CRange::test(void) -{ - return valid = (inf<=sup || flag&1 || flag&2); -} - -const char * CRange::helptext = - "a floating-point range:\n" - " -> <x> <y> for a closed interval (x y)\n" - " -> - for an empty range\n" - " -> * for an infinite range\n"; - -char RangeDecode( const string& resp, CRange *rval ) +string CRange::str(void) const { - double r1, r2; - if ( resp=="" ) { - return 'd'; - } else if ( resp=="*" ) { - *rval = CRange(1); - return 'v'; - } else if ( resp=="-" ) { - *rval = CRange(2); - return 'v'; - } - string s1, s2; - mystd::string_extract_word(string(resp), &s1, &s2); - if (!mystd::any2dbl(s1,&r1) && !mystd::any2dbl(s2,&r2)) { - *rval = CRange(r1, r2); - if (!rval->test()) return 'h'; - return 'v'; - } - return 'h'; -} + ret = ""; + if( inf==-INFINITY ) + ret += "*"; + else + ret += strg(inf); -CRange CRange::Ask( const string& quest ) -{ - return Ask(quest, 0, CRange()); -} -CRange CRange::Ask( const string& quest, const CRange& Def ) -{ - return Ask(quest, 1, Def); -} -CRange CRange::Ask( const string& quest, const bool defflag, - const CRange& Def) -{ - *this = myask( quest, defflag, Def, helptext, RangeDecode ); - return *this; -} -string CRange::str(void) const -{ if (!valid) return "<invalid range>"; else if (finite()) @@ -211,33 +175,19 @@ string CRange::str(void) const return "-"; } -ostream& operator<< (ostream &s, const CRange& R) -{ - if (!R.valid) - return s << "<invalid range>"; - else if (R.finite()) - return s << ((R.flag&4) ? ")" : "(") - << R.inf << " " << R.sup - << ((R.flag&8) ? "(" : ")"); - else if (R.infinite()) - return s << "*"; - else - return s << "-"; -} - //**************************************************************************// //* CAxis *// //**************************************************************************// -void CAxis::Ask(const string& quest) +void CAxis::Ask( const string& quest ) { string def, in, in1, in2; CRange newR; while(1) { def = (log ? "log " : "") + R.str(); // out = quest + " [" + def + "] ?"; so gehts leider(?) nicht - in = sask(quest, def); + in = sask( quest, def ); if (in==def) return; @@ -256,8 +206,6 @@ void CAxis::Ask(const string& quest) if (in!="") { newR = CRange(in); - if (!newR.valid) - continue; if (log && newR.inf<=0) { printf("! log scale requires range above 0\n"); continue; diff --git a/src/dualplot.h b/src/dualplot.h index 8d87090835ffa3bf476280d030e4141da87c2a9a..ad5b0b5add30343da5f330acff1134fe4eda0cb3 100644 --- a/src/dualplot.h +++ b/src/dualplot.h @@ -21,18 +21,9 @@ class CRange { void Round(int logflag, double relmargin, double digits); - CRange Ask( const string& quest); - CRange Ask( const string& quest, const CRange& Def); - CRange Ask( const string& quest, bool defflag, const CRange& Def); string str(void) const; - friend ostream& operator<< (ostream &s, const CRange& R); - - private: - static const char* helptext; }; -inline string strg(const CRange& R) { return R.str(); }; - class CAxis { public: