Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / ast / includes / types / bool.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2008-2008 - DIGITEO - Antoine ELIAS
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 bool.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 __BOOL_HXX__
26 #define __BOOL_HXX__
27
28 #include "arrayof.hxx"
29
30 namespace types
31 {
32 class EXTERN_AST Bool : public ArrayOf<int>
33 {
34 public :
35     static Bool* True()
36     {
37         return new Bool(1);
38     }
39
40     static Bool* False()
41     {
42         return new Bool(0);
43     }
44
45 public:
46     Bool(int _bReal);
47     Bool(int _iRows, int _iCols);
48     Bool(int _iDims, const int* _piDims);
49     Bool(int _iRows, int _iCols, int **_piData);
50     ~Bool();
51
52     Bool*                   clone();
53
54
55     /*zero or one set filler*/
56     bool                    setFalse();
57     bool                    setTrue();
58
59     /*Config management*/
60     void                    whoAmI();
61
62     bool                    isBool()
63     {
64         return true;
65     }
66
67     bool                    operator==(const InternalType& it);
68     bool                    operator!=(const InternalType& it);
69
70     /* return type as string ( double, int, cell, list, ... )*/
71     virtual std::string      getTypeStr()
72     {
73         return "boolean";
74     }
75     /* return type as short string ( s, i, ce, l, ... )*/
76     virtual std::string      getShortTypeStr()
77     {
78         return "b";
79     }
80
81     virtual bool transpose(InternalType *& out);
82
83 protected :
84     inline ScilabType       getType(void)
85     {
86         return ScilabBool;
87     }
88     inline ScilabId         getId(void)
89     {
90         return isScalar() ? IdScalarBool : IdBool;
91     }
92
93     virtual ast::Exp*       getExp(const Location& loc);
94
95 private :
96     virtual bool            subMatrixToString(std::ostringstream& ostr, int* _piDims, int _iDims) override;
97
98     virtual int             getNullValue();
99     virtual Bool*           createEmpty(int _iDims, int* _piDims, bool _bComplex = false);
100     virtual int             copyValue(int _iData);
101     virtual void            deleteAll();
102     virtual void            deleteImg();
103     virtual int*            allocData(int _iSize);
104 };
105
106 }
107
108 #ifdef _MSC_VER
109 template class types::ArrayOf<int>;//Bool
110 #endif
111 #endif /* !__BOOL_HXX__ */