226d35672eb0175656c4d24aa5c291e3811d3b9d
[scilab.git] / scilab / modules / ast / includes / types / singlepoly.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #ifndef __POLY_HH__
17 #define __POLY_HH__
18
19 #include <list>
20 #include "types.hxx"
21 #include "double.hxx"
22
23 namespace types
24 {
25 class EXTERN_AST SinglePoly : public ArrayOf<double>
26 {
27 public :
28     SinglePoly();
29     SinglePoly(double** _pdblCoefR, int _iRank);
30     SinglePoly(double** _pdblCoefR, double** _pdblcoefI, int _iRank);
31
32     virtual                 ~SinglePoly();
33     virtual void            deleteAll();
34     virtual void            deleteImg();
35
36     // FIXME : Should not return NULL;
37     SinglePoly*             clone();
38     SinglePoly*             conjugate();
39
40     bool                    isSinglePoly()
41     {
42         return true;
43     }
44     /*Config management*/
45     void                    whoAmI();
46
47     virtual double          getNullValue();
48     virtual SinglePoly*     createEmpty(int _iDims, int* _piDims, bool _bComplex);
49     virtual double*         allocData(int _iSize);
50     virtual double          copyValue(double _dblData);
51     virtual bool            subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
52
53     bool                    setZeros();
54     int                     getRank();
55     double                  getDegree();
56     bool                    setRank(int _iRank, bool bSave = false);
57     bool                    setCoef(Double *_poPow);
58     bool                    setCoef(const double *_pdblCoefR, const double *_pdblCoefI);
59     bool                    evaluate(double _dblInR, double _dblInI, double *_pdblOutR, double *_pdblOutI);
60     void                    updateRank(void);
61
62     void                    toStringReal(const std::wstring& _szVar, std::list<std::wstring>* _pListExp , std::list<std::wstring>* _pListCoef);
63     void                    toStringImg(const std::wstring& _szVar, std::list<std::wstring>* _pListExp , std::list<std::wstring>* _pListCoef);
64
65     bool                    toString(std::wostringstream& ostr);
66
67     bool                    operator==(const InternalType& it);
68     bool                    operator!=(const InternalType& it);
69
70     /* return type as string ( double, int, cell, list, ... )*/
71     virtual std::wstring    getTypeStr() const
72     {
73         return L"poly";
74     }
75     /* return type as short string ( s, i, ce, l, ... )*/
76     virtual std::wstring    getShortTypeStr() const
77     {
78         return L"p";
79     }
80 protected :
81     inline ScilabType       getType(void)
82     {
83         return ScilabSinglePolynom;
84     }
85     inline ScilabId         getId(void)
86     {
87         return IdSinglePolynom;
88     }
89
90 private :
91     void                    toStringInternal(double *_pdblVal, const std::wstring& _szVar, std::list<std::wstring>* _pListExp , std::list<std::wstring>* _pListCoef);
92
93 };
94
95 SinglePoly* operator*(const SinglePoly& lhs, const SinglePoly& rhs);
96
97 }
98
99 #endif /* !__POLY_HH__ */