* Bug 14606 fixed: now `[names,mem]=who()` returns memory used by variables
[scilab.git] / scilab / modules / ast / includes / types / singlestruct.hxx
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2011 - 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
17 #ifndef __SINGLESTRUCT_HXX__
18 #define __SINGLESTRUCT_HXX__
19
20 #include <unordered_map>
21 #include <vector>
22
23 #include "internal.hxx"
24 #include "string.hxx"
25
26 namespace types
27 {
28 class EXTERN_AST SingleStruct : public InternalType
29 {
30 public :
31     SingleStruct();
32     ~SingleStruct();
33
34 private :
35     SingleStruct(SingleStruct *_oListCopyMe);
36
37 public :
38     SingleStruct*                           clone();
39
40     inline ScilabType                       getType(void)
41     {
42         return ScilabSingleStruct;
43     }
44     inline ScilabId                         getId(void)
45     {
46         return IdSingleStruct;
47     }
48
49     bool                                    isSingleStruct()
50     {
51         return true;
52     }
53
54     inline int getNumFields() const
55     {
56         return static_cast<int>(m_wstFields.size());
57     }
58
59     bool                                    toString(std::wostringstream& ostr);
60
61     bool                                    set(const std::wstring& _sKey, InternalType *_typedValue);
62     InternalType*                           get(const std::wstring& _sKey);
63     bool                                    exists(const std::wstring& _sKey);
64     InternalType*                           insert(typed_list* _pArgs, InternalType* _pSource);
65     std::vector<InternalType*>              extract(std::vector<std::wstring> & _stFields);
66     String*                                 getFieldNames();
67     bool                                    addField(const std::wstring& _sKey);
68     bool                                    addFieldFront(const std::wstring& _sKey);
69     std::vector<InternalType *> &           getData();
70     std::unordered_map<std::wstring, int> & getFields();
71     int                                     getFieldIndex(const std::wstring& _field);
72     bool                                    removeField(const std::wstring& _sKey);
73
74     bool                                    operator==(const InternalType& it);
75     bool                                    operator!=(const InternalType& it);
76
77     /* return type as string ( double, int, cell, list, ... )*/
78     virtual std::wstring                    getTypeStr() const
79     {
80         return L"singlestruct";
81     }
82     /* return type as short string ( s, i, ce, l, ... )*/
83     virtual std::wstring                    getShortTypeStr() const
84     {
85         return L"sst";
86     }
87
88     bool                                    getMemory(int* _piSize, int* _piSizePlusType);
89
90 private :
91
92     std::unordered_map<std::wstring, int> m_wstFields;
93     std::vector<InternalType *> m_Data;
94 };
95 }
96
97 #endif /* !__SINGLESTRUCT_HXX__ */