//////////////////////////////////////////////////////////////////////////////// /*! @file Functions.h - Part of RANet - Research Assistant Net Library. - Copyright(C) 2010-2014, Viktor E. Bursian, St.Petersburg, Russia. Viktor.Bursian@mail.ioffe.ru */////////////////////////////////////////////////////////////////////////////// #ifndef Functions_H #define Functions_H #include "Curves.h" #include "BasicMath.h" #include "PhysValue.h" namespace RA { //------------------------------------------------------------------------------ ANNOUNCE_ABSTRACT_CLASS(sFunction) ANNOUNCE_ABSTRACT_CLASS(sDataFunction) ANNOUNCE_ABSTRACT_CLASS(sAnalyticFunction) //---------------------------------------------------------------- sFunction --- class RANet_EXPORT sFunction : public sCurve ,/*virtual*/ public sMathValue { ABSTRACT_STORABLE(sFunction) public: virtual ~sFunction () {} protected: sFunction (); public: virtual sString Text (eTextFormat format=Plain ,eTextDetalization detalization=Casual) const; virtual sPhysRange AbscissaRange () const =0; virtual sUnits OrdinateUnits () const =0; virtual sPhysValue Value (rcsPhysValue x) const =0; }; //------------------------------------------------------------ sDataFunction --- class RANet_EXPORT sDataFunction : public sFunction { ABSTRACT_STORABLE(sDataFunction) public: virtual ~sDataFunction () {} protected: sDataFunction (); explicit sDataFunction (rcsPhysPair multiplier); // sDataFunction (rcsDataFunction); public: virtual psMathValue Replica () const; virtual sBoundaries Boundaries (); virtual sBoundaries Boundaries () const; virtual sString Text (eTextFormat ,eTextDetalization); virtual sString Text (eTextFormat format=Plain ,eTextDetalization detalization=Casual) const; virtual int NumberOfPoints () const; virtual sPhysRange AbscissaRange () const; virtual sUnits OrdinateUnits () const; virtual sPhysValue Value (rcsPhysValue x) const; sPhysPair Multiplier () const { return TheMultiplier; } virtual void SetMultiplier (sPhysPair multiplier) { TheMultiplier = multiplier; } protected: virtual sBoundaries CalculateBoundaries () const; protected://fields sPhysPair TheMultiplier; bool RecalculateBoundaries; sBoundaries LastBoundaries; }; //-------------------------------------------------------- sAnalyticFunction --- class RANet_EXPORT sAnalyticFunction : public sFunction { ABSTRACT_STORABLE(sAnalyticFunction) //......................................... sAnalyticFunction::sTracer ... public: //classes ANNOUNCE_CLASS(sTracer) class RANet_EXPORT sTracer : public sCurve::sTracer { public: sTracer (pcsAnalyticFunction host_curve ,rcsScales scales ); virtual ~sTracer () {} public: virtual bool NextPoint (); virtual bool NextLineSegment (); protected: pcsAnalyticFunction TheFunction; private: sScales Scales; int Step; int LastPointNo; int PointNo; int LineSegmentNo; }; //........................................................................ public: virtual ~sAnalyticFunction () {} protected: sAnalyticFunction (); public: virtual sString Hint () { return sString(); } virtual sCurve::psTracer GetCurveTracer (rcsScales scales) const; protected: protected://fields }; //------------------------------------------------------------------------------ } //namespace RA #endif