~vbursian/research-assistant/intervers

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
////////////////////////////////////////////////////////////////////////////////
/*! @file PairSetFunction.h   Таблично заданная зависимость.
- Part of RANet - Research Assistant Net Library (based on ANSI C++).
- Copyright(C) 2010, Viktor E. Bursian, St.Petersburg, Russia.
                     Viktor.Bursian@mail.ioffe.ru
*///////////////////////////////////////////////////////////////////////////////
#ifndef PairSetFunction_H
#define PairSetFunction_H
#include "Curves.h"
#include <list>
namespace RA {
//------------------------------------------------------------------------------

ANNOUNCE_CLASS(sPairSetFunction)

//--------------------------------------------------------- sPairSetFunction ---

class RANet_EXPORT  sPairSetFunction : public sDependence
{
  STORABLE(sPairSetFunction)
  NODE(sPairSetFunction)
  //! @todo{?} private? что это за хрень и как оно работает?
  private: //classes
    ANNOUNCE_CLASS(sDataPoint)
  public: //classes
    ANNOUNCE_CLASS(sTracer)
    class sTracer : public sCurve::sTracer
    {
      public:
                                  sTracer (pcsPairSetFunction  host_curve
                                          ,rcsScales           scales    );
        virtual                   ~sTracer () {};
      public:
        virtual bool              NextPoint ();
        virtual bool              NextLineSegment ();
      protected:
        pcsPairSetFunction        PairSetFunction;
      private:
        sPoint                    Scaling;
        sRange                    ArbRange;
        bool                      WrongUnits;
        bool                      SegmentFingerInitiated;
        bool                      PointFingerInitiated;
        list<sDataPoint>::const_iterator
                                  SegmentFinger;
        list<sDataPoint>::const_iterator
                                  PointFinger;
    };

  public:
    virtual                   ~sPairSetFunction ();
                              sPairSetFunction ();
    virtual sNodePtr          Copy () const;
    virtual void              AssignIntrinsicContent (sNodePtr);
    virtual sCurve::psTracer  GetCurveTracer (rcsScales  scales);
//    virtual real              Value (real  X) const;
    virtual void              AddNewPoint (sPoint);
    void                      AddNewPoint (real  x ,real  y)
                                { AddNewPoint(sPoint(x,y)); };

  private: //classes
    class sDataPoint : public sPoint
    {
      public:
                                  sDataPoint ()
                                      :sPoint()
                                    {};
                                  sDataPoint (rcsDataPoint DP)
                                      :sPoint(DP.X,DP.Y)
                                    {};
                                  sDataPoint (rcsPoint P)
                                      :sPoint(P)
                                    {};
        rsPoint                   operator = (rcsDataPoint P)
                                    { X=P.X;  Y=P.Y; return *this; };
        bool                      operator < (rcsDataPoint DP)
                                    { return ( X < DP.X ); };
    };

  private: //fields
    bool                      Sorted;
    list<sDataPoint>          ThePoints;
};

//------------------------------------------------------------------------------
}; //namespace RA
#endif