kernel modules Wiedervereinigung
[scilab.git] / scilab / modules / ast / src / cpp / types / inspector.cpp
1 /*
2 *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 *  Copyright (C) 2011 - 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 #include "inspector.hxx"
14 #include "types.hxx"
15
16 extern "C"
17 {
18 #include <stdio.h>
19 }
20
21 namespace types
22 {
23 #ifndef NDEBUG
24 std::vector<InternalType*> Inspector::m_vIT;
25
26 int Inspector::getItemCount()
27 {
28     return (int)m_vIT.size();
29 }
30
31 int Inspector::getUnreferencedItemCount()
32 {
33     int iCount = 0;
34     for (int i = 0 ; i < m_vIT.size() ; i++)
35     {
36         if (m_vIT[i]->getRef() == 0)
37         {
38             iCount++;
39         }
40     }
41     return iCount;
42 }
43
44
45 void Inspector::addItem(InternalType* _pIT)
46 {
47     types::GenericType* pGT = _pIT->getAs<types::GenericType>();
48
49     if (pGT)
50     {
51         //std::wcout << L"addItem " << pGT->getTypeStr() << L"[" << pGT->getSize() << L"] : " << pGT << std::endl;
52     }
53     else
54     {
55         //std::wcout << L"addItem " << _pIT->getTypeStr() << L" : " << _pIT << std::endl;
56     }
57     m_vIT.push_back(_pIT);
58 }
59
60 void Inspector::removeItem(InternalType* _pIT)
61 {
62     std::vector<InternalType*>::iterator it;
63
64     for (it = m_vIT.begin() ; it != m_vIT.end() ; it++)
65     {
66         if ((*it) == _pIT)
67         {
68             types::GenericType* pGT = _pIT->getAs<types::GenericType>();
69
70             if (pGT)
71             {
72                 //std::wcout << L"removeItem " << pGT->getTypeStr() << L"[" << pGT->getSize() << L"] : " << pGT << std::endl;
73             }
74             else
75             {
76                 //std::wcout << L"removeItem " << _pIT->getTypeStr() << L" : " << _pIT << std::endl;
77             }
78             m_vIT.erase(it);
79             break;
80         }
81     }
82 }
83
84 InternalType* Inspector::getItem(int _iPos)
85 {
86     if (_iPos >= m_vIT.size())
87     {
88         return NULL;
89     }
90     return m_vIT[_iPos];
91 }
92
93 InternalType* Inspector::getUnreferencedItem(int _iPos)
94 {
95     int iCount = 0;
96     for (int i = 0 ; i < m_vIT.size() ; i++)
97     {
98         if (m_vIT[i]->getRef() == 0)
99         {
100             if (iCount == _iPos)
101             {
102                 std::wcout << L"getUnreferencedItem : " << m_vIT[i] << std::endl;
103                 return m_vIT[i];
104             }
105             iCount++;
106         }
107     }
108
109     return NULL;
110 }
111
112 std::wstring Inspector::showItem(int _iPos)
113 {
114     std::wstring st;
115     InternalType* pIT = getItem(_iPos);
116     if (pIT == NULL)
117     {
118         st = L"NULL";
119     }
120     else
121     {
122         st = pIT->getTypeStr();
123     }
124     return st;
125 }
126
127 std::wstring Inspector::showUnreferencedItem(int _iPos)
128 {
129     std::wstring st;
130     InternalType* pIT = getUnreferencedItem(_iPos);
131     if (pIT == NULL)
132     {
133         st = L"NULL";
134     }
135     else
136     {
137         st = pIT->getTypeStr();
138     }
139     return st;
140 }
141
142 void Inspector::deleteItems()
143 {
144     InternalType** pIT = new InternalType*[m_vIT.size()];
145
146     //copy item values
147     for (int i = 0 ; i < m_vIT.size() ; i++)
148     {
149         pIT[i] = m_vIT[i];
150     }
151
152     //delete each item
153     for (int i = 0 ; i < m_vIT.size() ; i++)
154     {
155         delete pIT[i];
156     }
157
158     //check vector update
159     if (m_vIT.size() != 0)
160     {
161         printf("Oo\n");
162     }
163 }
164 #endif
165 }