Salome HOME
Update copyrights
[tools/medcoupling.git] / src / MEDCoupling_Swig / MEDCouplingRefCountObject.i
1 // Copyright (C) 2007-2019  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 // Author : Anthony Geay (CEA/DEN)
20
21 namespace INTERP_KERNEL
22 {
23   class Exception
24   {
25   public:
26     Exception(const char* what);
27     ~Exception() throw ();
28     const char *what() const throw ();
29     %extend
30     {
31       std::string __str__() const
32       {
33         return std::string(self->what());
34       }
35     }
36   };
37 }
38
39 namespace MEDCoupling
40 {
41   class TimeLabel
42   {
43   public:
44     void declareAsNew() const;
45     virtual void updateTime() const;
46     unsigned int getTimeOfThis() const;
47   protected:
48     ~TimeLabel();
49   };
50 }
51
52 namespace MEDCoupling
53 {
54   enum class DeallocType
55     {
56       C_DEALLOC = 2,
57       CPP_DEALLOC = 3
58     };
59
60   const char *MEDCouplingVersionStr();
61   int MEDCouplingVersion();
62   int MEDCouplingSizeOfVoidStar();
63   int MEDCouplingSizeOfIDs();
64   bool MEDCouplingByteOrder();
65   const char *MEDCouplingByteOrderStr();
66   bool IsCXX11Compiled();
67   
68   class BigMemoryObject
69   {
70   public:
71     std::size_t getHeapMemorySize() const throw(INTERP_KERNEL::Exception);
72     std::string getHeapMemorySizeStr() const throw(INTERP_KERNEL::Exception);
73     bool isObjectInTheProgeny(const BigMemoryObject *obj) const throw(INTERP_KERNEL::Exception);
74     virtual std::size_t getHeapMemorySizeWithoutChildren() const throw(INTERP_KERNEL::Exception);
75     virtual ~BigMemoryObject();
76     %extend
77     {
78       virtual PyObject *getDirectChildren() const throw(INTERP_KERNEL::Exception)
79       {
80         std::vector<const BigMemoryObject *> c(self->getDirectChildren());
81         PyObject *ret(PyList_New(c.size()));
82         for(std::size_t i=0;i<c.size();i++)
83           PyList_SetItem(ret,i,SWIG_NewPointerObj(SWIG_as_voidptr(c[i]),SWIGTYPE_p_MEDCoupling__BigMemoryObject, 0 | 0 ));
84         return ret;
85       }
86
87       PyObject *getAllTheProgeny() const throw(INTERP_KERNEL::Exception)
88       {
89         std::vector<const BigMemoryObject *> c(self->getAllTheProgeny());
90         PyObject *ret(PyList_New(c.size()));
91         for(std::size_t i=0;i<c.size();i++)
92           PyList_SetItem(ret,i,SWIG_NewPointerObj(SWIG_as_voidptr(c[i]),SWIGTYPE_p_MEDCoupling__BigMemoryObject, 0 | 0 ));
93         return ret;
94       }
95
96       static std::size_t GetHeapMemorySizeOfObjs(PyObject *objs) throw(INTERP_KERNEL::Exception)
97       {
98         std::vector<const BigMemoryObject *> cppObjs;
99         convertFromPyObjVectorOfObj<const MEDCoupling::BigMemoryObject *>(objs,SWIGTYPE_p_MEDCoupling__BigMemoryObject,"BigMemoryObject",cppObjs);
100         return BigMemoryObject::GetHeapMemorySizeOfObjs(cppObjs);
101       }
102     }
103   };
104   
105   class RefCountObjectOnly
106   {
107   public:
108     bool decrRef() const;
109     void incrRef() const;
110     int getRCValue() const;
111   protected:
112     ~RefCountObjectOnly();
113   };
114
115   class RefCountObject : public RefCountObjectOnly, public BigMemoryObject
116   {
117   protected:
118     ~RefCountObject();
119   };
120
121   class GlobalDict
122   {
123   public:
124     static GlobalDict *GetInstance() throw(INTERP_KERNEL::Exception);
125     bool hasKey(const std::string& key) const throw(INTERP_KERNEL::Exception);
126     std::string value(const std::string& key) const throw(INTERP_KERNEL::Exception);
127     std::vector<std::string> keys() const throw(INTERP_KERNEL::Exception);
128     void erase(const std::string& key) throw(INTERP_KERNEL::Exception);
129     void clear() throw(INTERP_KERNEL::Exception);
130     void setKeyValue(const std::string& key, const std::string& value) throw(INTERP_KERNEL::Exception);
131     void setKeyValueForce(const std::string& key, const std::string& value) throw(INTERP_KERNEL::Exception);
132   private:
133     GlobalDict();
134   public:
135     %extend
136     {
137       std::string __str__() const
138       {
139         return self->printSelf();
140       }
141     }
142   };
143 }
144
145 %inline
146 {
147   PyObject *MEDCouplingVersionMajMinRel()
148   {
149     int tmp0=0,tmp1=0,tmp2=0;
150     MEDCouplingVersionMajMinRel(tmp0,tmp1,tmp2);
151     PyObject *res = PyList_New(3);
152     PyList_SetItem(res,0,SWIG_From_int(tmp0));
153     PyList_SetItem(res,1,SWIG_From_int(tmp1));
154     PyList_SetItem(res,2,SWIG_From_int(tmp2));
155     return res;
156   }
157
158   bool MEDCouplingHasNumPyBindings()
159   {
160 #ifdef WITH_NUMPY
161     return true;
162 #else
163     return false;
164 #endif
165   }
166
167   bool MEDCouplingHasSciPyBindings()
168   {
169 #ifdef WITH_SCIPY
170     return true;
171 #else
172     return false;
173 #endif
174   }
175
176   std::string MEDCouplingCompletionScript() throw(INTERP_KERNEL::Exception)
177   {
178     static const char script[]="import rlcompleter,readline\nreadline.parse_and_bind('tab:complete')";
179     std::ostringstream oss; oss << "MEDCouplingCompletionScript : error when trying to activate completion ! readline not present ?\nScript is :\n" << script;
180     if(PyRun_SimpleString(script)!=0)
181       throw INTERP_KERNEL::Exception(oss.str().c_str());
182     return std::string(script);
183   }
184 }
185
186 %pythoncode %{
187 def INTERPKERNELExceptionReduceFunct(a,b):
188     ret=InterpKernelException.__new__(a)
189     ret.__init__(*b)
190     return ret
191 def INTERPKERNELExceptionReduce(self):
192     return INTERPKERNELExceptionReduceFunct,(InterpKernelException,(self.what(),))
193 %}