types::Dollar removed
[scilab.git] / scilab / modules / ast / includes / types / polynom.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 // This code is separated in matrixpoly.hxx
14 // but will be inlined in arrayof.hxx
15 //
16 // If you need additionnal headers, please add it in arrayof.hxx
17
18 //#ifndef __ARRAYOF_HXX__
19 //    #error This file must only be include by arrayof.hxx
20 //#endif
21
22 #ifndef __POLYNOM_HXX__
23 #define __POLYNOM_HXX__
24
25 #include "arrayof.hxx"
26 #include "singlepoly.hxx"
27 #include "double.hxx"
28
29 //disable warnings about exports STL items
30 #ifdef _MSC_VER
31 #pragma warning (disable : 4251)
32 #endif
33
34 namespace types
35 {
36 class EXTERN_AST Polynom : public ArrayOf<SinglePoly*>
37 {
38 public :
39     Polynom();
40     Polynom(const std::wstring& _szVarName, int _iRows, int _iCols);
41     Polynom(const std::wstring& _szVarName, int _iRows, int _iCols, const int *_piRank);
42     Polynom(const std::wstring& _szVarName, int _iDims, int* _piDims);
43     Polynom(const std::wstring& _szVarName, int _iDims, int* _piDims, const int *_piRank);
44
45     virtual                 ~Polynom();
46
47     // FIXME : Should not return NULL
48     InternalType*           clone();
49
50     bool                    setCoef(int _iRows, int _iCols, Double *_pdblCoef);
51     bool                    setCoef(int _iIdx, Double *_pdblCoef);
52
53     virtual void            setComplex(bool _bComplex);
54
55     inline ScilabType       getType(void)
56     {
57         return ScilabPolynom;
58     }
59
60     inline ScilabId         getId(void)
61     {
62         return isScalar() ? isComplex() ? IdScalarPolynomComplex
63                : IdScalarPolynom
64        : isComplex() ? IdPolynomComplex
65                : IdPolynom;
66     }
67
68     bool isComplex(void);
69
70     bool isDollar();
71     inline bool             isPoly()
72     {
73         return true;
74     }
75
76     void                    whoAmI(void);
77     std::wstring&           getVariableName();
78     void                    setVariableName(std::wstring);
79     bool                    getSizes(int *_piSizes);
80     bool                    getRank(int *_piRank);
81     int                     getMaxRank(void);
82     Double*                 evaluate(Double* _pdblValue);
83     void                    updateRank(void);
84     Double*                 getCoef(void);
85     void                    setCoef(Double *_pCoef);
86     Double*                 extractCoef(int _iRank);
87     bool                    insertCoef(int _iRank, Double* _pCoef);
88     void                    setZeros();
89     InternalType*           insert(typed_list* _pArgs, InternalType* _pSource);
90
91     bool                    set(int _iPos, SinglePoly* _pS);
92     bool                    set(int _iRows, int _iCols, SinglePoly* _pS);
93     bool                    set(SinglePoly** _pS);
94
95     std::wstring            getRowString(int* _piDims, int _iDims, bool _bComplex);
96     std::wstring            getColString(int* _piDims, int _iDims, bool _bComplex);
97     std::wstring            getMatrixString(int* _piDims, int _iDims, bool _bComplex);
98
99
100     bool                    operator==(const InternalType& it);
101     bool                    operator!=(const InternalType& it);
102
103     /* return type as string ( double, int, cell, list, ... )*/
104     virtual std::wstring    getTypeStr()
105     {
106         return L"polynomial";
107     }
108     /* return type as short string ( s, i, ce, l, ... )*/
109     virtual std::wstring    getShortTypeStr()
110     {
111         return L"p";
112     }
113
114     bool isTrue()
115     {
116         return false;
117     }
118
119     bool transpose(InternalType *& out);
120     bool adjoint(InternalType *& out);
121
122     static Polynom* Dollar();
123
124 protected :
125     std::wstring            m_szVarName;
126     void                    createPoly(const std::wstring& _szVarName, int _iDims, int* _piDims, const int *_piRank);
127
128 private :
129     virtual bool            subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims);
130
131     virtual SinglePoly*     getNullValue();
132     virtual Polynom*        createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
133     virtual SinglePoly*     copyValue(SinglePoly* _pData);
134     virtual void            deleteAll();
135     virtual void            deleteImg();
136     virtual SinglePoly**    allocData(int _iSize);
137     virtual void            deleteData(SinglePoly* data);
138 };
139 }
140
141 #ifdef _MSC_VER
142 template class types::ArrayOf<types::SinglePoly*>; //Polynom
143 #endif
144 #endif /* !__POLYNOM_HXX__ */