52f075f42091eecc03e82d030a775da0e1de82ee
[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     static wchar_t* nullValue();
48
49     void                    whoAmI();
50
51     virtual String*         set(int _iPos, const wchar_t* _pwstData);
52     virtual String*         set(int _iRows, int _iCols, const wchar_t* _pwstData);
53     virtual String*         set(const wchar_t* const* _pwstData);
54
55     virtual String*         set(int _iPos, const char* _pcData);
56     virtual String*         set(int _iRows, int _iCols, const char* _pcData);
57     virtual String*         set(const char* const* _pstrData);
58
59     bool                    operator==(const InternalType& it);
60     bool                    operator!=(const InternalType& it);
61
62     bool                    subMatrixToString(std::wostringstream& ostr, int* _piDims, int _iDims) override;
63     /* return type as string ( double, int, cell, list, ... )*/
64     virtual std::wstring    getTypeStr() const
65     {
66         return L"string";
67     }
68     /* return type as short string ( s, i, ce, l, ... )*/
69     virtual std::wstring    getShortTypeStr() const
70     {
71         return L"c";
72     }
73     String*                 clone();
74
75     inline ScilabType       getType()
76     {
77         return ScilabString;
78     }
79     inline ScilabId         getId()
80     {
81         return isScalar() ? IdScalarString : IdString;
82     }
83     bool                    isString()
84     {
85         return true;
86     }
87
88     bool isTrue()
89     {
90         return false;
91     }
92
93     bool getMemory(long long* _piSize, long long* _piSizePlusType);
94
95     virtual bool neg(InternalType *& /*out*/)
96     {
97         return false;
98     }
99
100     virtual bool transpose(InternalType *& out);
101
102     virtual ast::Exp*       getExp(const Location& loc);
103
104 private :
105     void                    deleteString(int _iRows, int _iCols);
106     void                    deleteString(int _iPos);
107
108     void                    createString(int _iDims, int* _piDims);
109     virtual wchar_t*        copyValue(wchar_t* _pwstData);
110     virtual wchar_t*        copyValue(const wchar_t* _pwstData);
111     virtual String*         createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
112     virtual wchar_t*        getNullValue()
113     {
114         return nullValue();
115     };
116     virtual void            deleteAll();
117     virtual void            deleteImg();
118     virtual wchar_t**       allocData(int _iSize);
119     void                    deleteData(wchar_t* data);
120 };
121 }
122
123 #ifdef _MSC_VER
124 template class types::ArrayOf<wchar_t*>; //String
125 #endif
126 #endif /* !__STRING_HXX__ */