elementary_functions module.
[scilab.git] / scilab / modules / types / includes / 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 #include "dynlib_types.h"
29 #include "dynlib_types.h"
30
31 namespace types
32 {
33     class TYPES_IMPEXP Polynom : public ArrayOf<SinglePoly*>
34     {
35     public :
36                                 Polynom();
37                                 Polynom(std::wstring _szVarName, int _iRows, int _iCols);
38                                 Polynom(std::wstring _szVarName, int _iRows, int _iCols, const int *_piRank);
39                                 Polynom(std::wstring _szVarName, int _iDims, int* _piDims);
40                                 Polynom(std::wstring _szVarName, int _iDims, int* _piDims, const int *_piRank);
41
42         virtual                 ~Polynom();
43
44         // FIXME : Should not return NULL
45         InternalType*           clone();
46
47         bool                    setCoef(int _iRows, int _iCols, Double *_pdblCoef);
48         bool                    setCoef(int _iIdx, Double *_pdblCoef);
49
50             virtual void            setComplex(bool _bComplex);
51
52         virtual RealType        getType();
53         bool                    isPoly() { return true; }
54         void                    whoAmI(void);
55         std::wstring            getVariableName();
56         bool                    getRank(int *_piRank);
57         int                     getMaxRank(void);
58         Double*                 evaluate(Double* _pdblValue);
59         void                    updateRank(void);
60         Double*                 getCoef(void);
61         void                    setCoef(Double *_pCoef);
62         Double*                 extractCoef(int _iRank);
63         bool                    insertCoef(int _iRank, Double* _pCoef);
64         bool                    set(int _iPos, SinglePoly* _pS);
65         bool                    set(int _iRows, int _iCols, SinglePoly* _pS);
66         bool                    set(SinglePoly** _pS);
67
68         std::wstring            getRowString(int* _piDims, int _iDims, bool _bComplex);
69         std::wstring            getColString(int* _piDims, int _iDims, bool _bComplex);
70         std::wstring            getMatrixString(int* _piDims, int _iDims, bool _bComplex);
71
72
73         bool                    operator==(const InternalType& it);
74         bool                    operator!=(const InternalType& it);
75
76         /* return type as string ( double, int, cell, list, ... )*/
77         virtual std::wstring    getTypeStr() {return L"polynomial";}
78         /* return type as short string ( s, i, ce, l, ... )*/
79         virtual std::wstring    getShortTypeStr() {return L"p";}
80
81     protected :
82         std::wstring            m_szVarName;
83         void                    createPoly(std::wstring _szVarName, int _iDims, int* _piDims, const int *_piRank);
84
85     private :
86         virtual bool            subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims);
87
88         virtual SinglePoly*     getNullValue();
89         virtual Polynom*        createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
90         virtual SinglePoly*     copyValue(SinglePoly* _pData);
91         virtual void            deleteAll();
92         virtual void            deleteImg();
93         virtual SinglePoly**    allocData(int _iSize);
94
95     };
96 }
97
98 #ifdef _MSC_VER
99 template class TYPES_IMPEXP types::ArrayOf<types::SinglePoly*>; //Polynom
100 #endif
101
102 #endif /* !__POLYNOM_HXX__ */