* Bug 15599 fixed: now degree of zero polynomial is -Inf
[scilab.git] / scilab / modules / ast / includes / types / string.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - INRIA - Bruno JOFRET
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 // This code is separated in string.hxx
17 // but will be inlined in arrayof.hxx
18 //
19 // If you need additionnal headers, please add it in arrayof.hxx
20
21 //#ifndef __ARRAYOF_HXX__
22 //    #error This file must only be include by arrayof.hxx
23 //#endif
24
25 #ifndef __STRING_HXX__
26 #define __STRING_HXX__
27
28 #include <string>
29 #include <list>
30
31 #include "arrayof.hxx"
32 #include "bool.hxx"
33 #include "types_transposition.hxx"
34
35 namespace types
36 {
37 class EXTERN_AST String : public ArrayOf<wchar_t*>
38 {
39 public :
40     String(int _iRows, int _iCols);
41     String(int _iDims, const int* _piDims);
42     String(int _iRows, int _iCols, wchar_t const* const* _pstData);
43     String(const wchar_t *_pstData);
44     String(const char *_pstData);
45     virtual                 ~String();
46
47     void                    whoAmI();
48
49     virtual String*         set(int _iPos, const wchar_t* _pwstData);
50     virtual String*         set(int _iRows, int _iCols, const wchar_t* _pwstData);
51     virtual String*         set(const wchar_t* const* _pwstData);
52
53     virtual String*         set(int _iPos, const char* _pcData);
54     virtual String*         set(int _iRows, int _iCols, const char* _pcData);
55     virtual String*         set(const char* const* _pstrData);
56
57     bool                    operator==(const InternalType& it);
58     bool                    operator!=(const InternalType& it);
59
60     bool                    subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
61     /* return type as string ( double, int, cell, list, ... )*/
62     virtual std::wstring    getTypeStr() const
63     {
64         return L"string";
65     }
66     /* return type as short string ( s, i, ce, l, ... )*/
67     virtual std::wstring    getShortTypeStr() const
68     {
69         return L"c";
70     }
71     String*                 clone();
72
73     inline ScilabType       getType()
74     {
75         return ScilabString;
76     }
77     inline ScilabId         getId()
78     {
79         return isScalar() ? IdScalarString : IdString;
80     }
81     bool                    isString()
82     {
83         return true;
84     }
85
86     bool isTrue()
87     {
88         return false;
89     }
90
91     virtual bool neg(InternalType *& /*out*/)
92     {
93         return false;
94     }
95
96     virtual bool transpose(InternalType *& out);
97
98     virtual ast::Exp*       getExp(const Location& loc);
99
100 private :
101     void                    deleteString(int _iRows, int _iCols);
102     void                    deleteString(int _iPos);
103
104     void                    createString(int _iDims, int* _piDims);
105     virtual wchar_t*        copyValue(wchar_t* _pwstData);
106     virtual wchar_t*        copyValue(const wchar_t* _pwstData);
107     virtual String*         createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
108     virtual wchar_t*        getNullValue();
109     virtual void            deleteAll();
110     virtual void            deleteImg();
111     virtual wchar_t**       allocData(int _iSize);
112     void                    deleteData(wchar_t* data);
113 };
114 }
115
116 #ifdef _MSC_VER
117 template class types::ArrayOf<wchar_t*>; //String
118 #endif
119 #endif /* !__STRING_HXX__ */