* Bug 16365 fixed: median(m,'r'|'c') was wrong after 5dc990
[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() override;
34     virtual void            deleteImg() override;
35
36     SinglePoly*             clone() override;
37     SinglePoly*             conjugate();
38
39     bool                    isSinglePoly() override
40     {
41         return true;
42     }
43
44     bool                    hasComplexCoef();
45     /*Config management*/
46     void                    whoAmI() override;
47
48     virtual double          getNullValue() override;
49     virtual SinglePoly*     createEmpty(int _iDims, int* _piDims, bool _bComplex) override;
50     virtual double*         allocData(int _iSize) override;
51     virtual double          copyValue(double _dblData) override;
52     virtual bool            subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
53
54     bool                    setZeros();
55     int                     getRank();
56     double                  getDegree();
57     bool                    setRank(int _iRank, bool bSave = false);
58     bool                    setCoef(Double *_poPow);
59     bool                    setCoef(const double *_pdblCoefR, const double *_pdblCoefI);
60     bool                    evaluate(double _dblInR, double _dblInI, double *_pdblOutR, double *_pdblOutI);
61     void                    updateRank(void);
62
63     void                    toStringRealImg(const std::wstring& _szVar, std::list<std::wstring>* _pListCoef, int iLineLen);
64
65     bool                    toString(std::wostringstream& ostr) override;
66
67     bool                    operator==(const InternalType& it) override;
68     bool                    operator!=(const InternalType& it) override;
69
70     /* return type as string ( double, int, cell, list, ... )*/
71     virtual std::wstring    getTypeStr() const override
72     {
73         return L"poly";
74     }
75     /* return type as short string ( s, i, ce, l, ... )*/
76     virtual std::wstring    getShortTypeStr() const override
77     {
78         return L"p";
79     }
80 protected :
81     inline ScilabType       getType(void) override
82     {
83         return ScilabSinglePolynom;
84     }
85     inline ScilabId         getId(void) override
86     {
87         return IdSinglePolynom;
88     }
89
90 private :
91     void                    toStringInternal(double *_pdblVal, double *_pdblImg, const std::wstring& _szVar, std::list<std::wstring>* _pListCoef, int iLineLen);
92
93 };
94
95 SinglePoly* operator*(const SinglePoly& lhs, const SinglePoly& rhs);
96
97 }
98
99 #endif /* !__POLY_HH__ */