ff3b2824f1aa14f54488c06b4a39f9416d439f4e
[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 *  This file must be used under the terms of the CeCILL.
6 *  This source file is licensed as described in the file COPYING, which
7 *  you should have received as part of this distribution.  The terms
8 *  are also available at
9 *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10 *
11 */
12
13 #ifndef __POLY_HH__
14 #define __POLY_HH__
15
16 #include <list>
17 #include "types.hxx"
18 #include "double.hxx"
19
20 namespace types
21 {
22 class EXTERN_AST SinglePoly : public ArrayOf<double>
23 {
24 public :
25     SinglePoly();
26     SinglePoly(double** _pdblCoefR, int _iRank);
27     SinglePoly(double** _pdblCoefR, double** _pdblcoefI, int _iRank);
28
29     virtual                 ~SinglePoly();
30     virtual void            deleteAll();
31     virtual void            deleteImg();
32
33     // FIXME : Should not return NULL;
34     SinglePoly*             clone();
35     SinglePoly*             conjugate();
36
37     bool                    isSinglePoly()
38     {
39         return true;
40     }
41     /*Config management*/
42     void                    whoAmI();
43
44     virtual double          getNullValue();
45     virtual SinglePoly*     createEmpty(int _iDims, int* _piDims, bool _bComplex);
46     virtual double*         allocData(int _iSize);
47     virtual double          copyValue(double _dblData);
48     virtual bool            subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims);
49
50     bool                    setZeros();
51     int                     getRank();
52     bool                    setRank(int _iRank, bool bSave = false);
53     bool                    setCoef(Double *_poPow);
54     bool                    setCoef(const double *_pdblCoefR, const double *_pdblCoefI);
55     bool                    evaluate(double _dblInR, double _dblInI, double *_pdblOutR, double *_pdblOutI);
56     void                    updateRank(void);
57
58     void                    toStringReal(std::wstring _szVar, std::list<std::wstring>* _pListExp , std::list<std::wstring>* _pListCoef);
59     void                    toStringImg(std::wstring _szVar, std::list<std::wstring>* _pListExp , std::list<std::wstring>* _pListCoef);
60
61     bool                    toString(std::wostringstream& ostr);
62
63     bool                    operator==(const InternalType& it);
64     bool                    operator!=(const InternalType& it);
65
66     /* return type as string ( double, int, cell, list, ... )*/
67     virtual std::wstring    getTypeStr()
68     {
69         return L"poly";
70     }
71     /* return type as short string ( s, i, ce, l, ... )*/
72     virtual std::wstring    getShortTypeStr()
73     {
74         return L"p";
75     }
76 protected :
77     inline ScilabType       getType(void)
78     {
79         return ScilabSinglePolynom;
80     }
81     inline ScilabId         getId(void)
82     {
83         return IdSinglePolynom;
84     }
85
86 private :
87     void                    toStringInternal(double *_pdblVal, std::wstring _szVar, std::list<std::wstring>* _pListExp , std::list<std::wstring>* _pListCoef);
88
89 };
90
91 SinglePoly* operator*(const SinglePoly& lhs, const SinglePoly& rhs);
92
93 }
94
95 #endif /* !__POLY_HH__ */