0c84778bb75da3dfb72dde118b20c812ade7300c
[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  * === LICENSE_END ===
14 *
15 */
16
17 #ifndef __POLY_HH__
18 #define __POLY_HH__
19
20 #include <list>
21 #include "types.hxx"
22 #include "double.hxx"
23
24 namespace types
25 {
26 class EXTERN_AST SinglePoly : public ArrayOf<double>
27 {
28 public :
29     SinglePoly();
30     SinglePoly(double** _pdblCoefR, int _iRank);
31     SinglePoly(double** _pdblCoefR, double** _pdblcoefI, int _iRank);
32
33     virtual                 ~SinglePoly();
34     virtual void            deleteAll();
35     virtual void            deleteImg();
36
37     // FIXME : Should not return NULL;
38     SinglePoly*             clone();
39     SinglePoly*             conjugate();
40
41     bool                    isSinglePoly()
42     {
43         return true;
44     }
45     /*Config management*/
46     void                    whoAmI();
47
48     virtual double          getNullValue();
49     virtual SinglePoly*     createEmpty(int _iDims, int* _piDims, bool _bComplex);
50     virtual double*         allocData(int _iSize);
51     virtual double          copyValue(double _dblData);
52     virtual bool            subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
53
54     bool                    setZeros();
55     int                     getRank();
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()
72     {
73         return L"poly";
74     }
75     /* return type as short string ( s, i, ce, l, ... )*/
76     virtual std::wstring    getShortTypeStr()
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__ */