itom 1.3.0
D:/git-itom/sources/itom/Qitom/python/pythonNpDataObject.h
00001 /* ********************************************************************
00002     itom software
00003     URL: http://www.uni-stuttgart.de/ito
00004     Copyright (C) 2013, Institut für Technische Optik (ITO),
00005     Universität Stuttgart, Germany
00006 
00007     This file is part of itom.
00008   
00009     itom is free software; you can redistribute it and/or modify it
00010     under the terms of the GNU Library General Public Licence as published by
00011     the Free Software Foundation; either version 2 of the Licence, or (at
00012     your option) any later version.
00013 
00014     itom is distributed in the hope that it will be useful, but
00015     WITHOUT ANY WARRANTY; without even the implied warranty of
00016     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library
00017     General Public Licence for more details.
00018 
00019     You should have received a copy of the GNU Library General Public License
00020     along with itom. If not, see <http://www.gnu.org/licenses/>.
00021 *********************************************************************** */
00022 
00023 
00024 
00025 #ifndef PYTHONNPDATAOBJECT_H
00026 #define PYTHONNPDATAOBJECT_H
00027 
00028 #include "pythonDataObject.h"
00029 
00030 #if ITOM_NPDATAOBJECT
00031 
00032 //using namespace ito;
00033 namespace ito {
00034 
00035 class PythonNpDataObject
00036 {
00037 
00038 public:
00039     //-------------------------------------------------------------------------------------------------
00040     // typedefs
00041     //------------------------------------------------------------------------------------------------- 
00042     typedef struct 
00043     {
00044         PyArrayObject numpyArray;
00045         PyObject* tags;             //PyDictObject
00046         PyObject* axisScales;       //PyListObject
00047         PyObject* axisOffsets;      //PyListObject
00048         PyObject* axisDescriptions; //PyListObject
00049         PyObject* axisUnits;        //PyListObject
00050         PyObject* valueUnit;        //PyUnicode
00051         PyObject* valueDescription; //PyUnicode
00052         double valueOffset;
00053         double valueScale;
00054     } 
00055     PyNpDataObject;
00056 
00057     //-------------------------------------------------------------------------------------------------
00058     // constructor, deconstructor, alloc, dellaoc
00059     //------------------------------------------------------------------------------------------------- 
00060     static void PyNpDataObject_dealloc(PyNpDataObject *self);
00061     static PyObject* PyNpDataObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
00062     static int PyDataObject_init(PyNpDataObject *self, PyObject *args, PyObject *kwds);
00063 
00064     //uncomment the following methods for finding the bug described in comment at begin of pythonNpDataObject.cpp
00065     //static PyObject * __PyArray_View(PyArrayObject *self, PyArray_Descr *type, PyTypeObject *pytype);
00066     //static int __PyArray_SetBaseObject(PyArrayObject *arr, PyObject *obj);
00067 
00068     //-------------------------------------------------------------------------------------------------
00069     // numpy subclassing methods
00070     //------------------------------------------------------------------------------------------------- 
00071     static PyObject* PyNpDataObject_Array_Finalize(PyNpDataObject *self, PyObject *args);
00072     //static PyObject* PyNpDataObject_Array_Wrap(PyNPDataObject *self, PyObject *args);
00073     //static PyObject* PyNpDataObject_Array_Prepare(PyNPDataObject *self, PyObject *args);
00074 
00075     static PyObject* PyNpDataObj_Reduce(PyNpDataObject *self, PyObject *args); //PyObject *NPY_UNUSED(args));
00076     static PyObject* PyNpDataObj_SetState(PyNpDataObject *self, PyObject *args);
00077     
00078     //-------------------------------------------------------------------------------------------------
00079     // general members
00080     //------------------------------------------------------------------------------------------------- 
00081     static PyObject *PyNpDataObject_name(PyNpDataObject *self);
00082     
00083     //-------------------------------------------------------------------------------------------------
00084     // getter / setter
00085     //-------------------------------------------------------------------------------------------------
00086     static PyObject* PyNpDataObject_getTags(PyNpDataObject *self, void *closure);
00087     static int PyNpDataObject_setTags(PyNpDataObject *self, PyObject *value, void *closure);
00088     static PyObject* PyNpDataObject_getAxisScales(PyNpDataObject *self, void *closure);
00089     static int PyNpDataObject_setAxisScales(PyNpDataObject *self, PyObject *value, void *closure);
00090     static PyObject* PyNpDataObject_getAxisOffsets(PyNpDataObject *self, void *closure);
00091     static int PyNpDataObject_setAxisOffsets(PyNpDataObject *self, PyObject *value, void *closure);
00092     static PyObject* PyNpDataObject_getAxisDescriptions(PyNpDataObject *self, void *closure);
00093     static int PyNpDataObject_setAxisDescriptions(PyNpDataObject *self, PyObject *value, void *closure);
00094     static PyObject* PyNpDataObject_getAxisUnits(PyNpDataObject *self, void *closure);
00095     static int PyNpDataObject_setAxisUnits(PyNpDataObject *self, PyObject *value, void *closure);
00096     static PyObject* PyNpDataObject_getValueUnit(PyNpDataObject *self, void *closure);
00097     static int PyNpDataObject_setValueUnit(PyNpDataObject *self, PyObject *value, void *closure);
00098     static PyObject* PyNpDataObject_getValueDescription(PyNpDataObject *self, void *closure);
00099     static int PyNpDataObject_setValueDescription(PyNpDataObject *self, PyObject *value, void *closure);
00100     static PyObject* PyNpDataObject_getValueScale(PyNpDataObject *self, void *closure);
00101     static PyObject* PyNpDataObject_getValueOffset(PyNpDataObject *self, void *closure);
00102 
00103     static PyObject* PyNpDataObject_getTagDict(PyNpDataObject *self, void *clousure);
00104 
00105 
00106     //-------------------------------------------------------------------------------------------------
00107     // type structures
00108     //------------------------------------------------------------------------------------------------- 
00109     //static PyMemberDef PyNpDataObject_members[];
00110     static PyMethodDef PyNpDataObject_methods[];
00111     static PyTypeObject PyNpDataObjectType;
00112     static PyModuleDef PyNpDataObjectModule;
00113     static PyGetSetDef PyNpDataObject_getseters[];
00114 
00115    
00116 };
00117 
00118 }; // namespace ito
00119 
00120 #else //ITOM_NPDATAOBJECT
00121 
00122 namespace ito {
00123     class PythonNpDataObject
00124     {
00125 
00126     public:
00127 
00128         //-------------------------------------------------------------------------------------------------
00129         // typedefs
00130         //------------------------------------------------------------------------------------------------- 
00131         typedef struct
00132         {
00133             PyObject_HEAD
00134         }
00135         PyNpDataObject;
00136 
00137         //-------------------------------------------------------------------------------------------------
00138         // constructor, deconstructor, alloc, dellaoc
00139         //------------------------------------------------------------------------------------------------- 
00140         static void PyNpDataObject_dealloc(PyNpDataObject *self);
00141         static PyObject *PyNpDataObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
00142         static int PyNpDataObject_init(PyNpDataObject *self, PyObject *args, PyObject *kwds);
00143 
00144         static PyObject* PyNpDataObject_repr(PyNpDataObject *self);
00145         
00146         //-------------------------------------------------------------------------------------------------
00147         // type structures
00148         //------------------------------------------------------------------------------------------------- 
00149         static PyMemberDef PyRgba_members[];
00150         static PyMethodDef PyRgba_methods[];
00151         static PyTypeObject PyNpDataObjectType;
00152         static PyModuleDef PyNpDataObjectModule;
00153 };
00154 }; //end namespace ito
00155 
00156 #endif //ITOM_NPDATAOBJECT
00157 
00158 #endif
00159 
 All Classes Namespaces Functions Variables Typedefs Enumerations Enumerator Friends