WIP: range wrapper + WIP: array IO
This commit is contained in:
parent
c0fb3fe7ea
commit
eeefff2cde
3 changed files with 113 additions and 0 deletions
|
@ -17,6 +17,10 @@ namespace CNORXZ
|
||||||
virtual RangePtr range() const = 0;
|
virtual RangePtr range() const = 0;
|
||||||
virtual SizeT size() const = 0;
|
virtual SizeT size() const = 0;
|
||||||
// virtual PyObject* get() const = 0; // operator[]!!
|
// virtual PyObject* get() const = 0; // operator[]!!
|
||||||
|
#ifdef HAVE_CEREAL
|
||||||
|
virtual void writeFile(Format f, const String& fname);
|
||||||
|
virtual void readFile(Format f, const String& fname);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
41
cnorxz/core/include/range_wrapper.h
Normal file
41
cnorxz/core/include/range_wrapper.h
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
#ifndef __python_cnorxz_range_wrapper_h__
|
||||||
|
#define __python_cnorxz_range_wrapper_h__
|
||||||
|
|
||||||
|
#include <Python.h>
|
||||||
|
#include "cnorxz.h"
|
||||||
|
|
||||||
|
namespace CNORXZ
|
||||||
|
{
|
||||||
|
class CRangeWrapper
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DEFAULT_MEMBERS(CRangeWrapper);
|
||||||
|
|
||||||
|
inline bool _init() const { return mR != nullptr; }
|
||||||
|
inline SizeT size() const { return mR->size(); }
|
||||||
|
inline SizeT dim() const { return mR->dim(); }
|
||||||
|
inline String stringMeta(SizeT pos) const { mR->stringMeta(pos); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
RangePtr mR;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
struct PyCRange
|
||||||
|
{
|
||||||
|
PyObject_HEAD
|
||||||
|
CNORXZ::CRangeWrapper* ptrObj;
|
||||||
|
};
|
||||||
|
|
||||||
|
int PyCRange_init(PyCRange* self, PyObject* args, PyObject* kwds);
|
||||||
|
void PyCRange_dealloc(PyCRange* self);
|
||||||
|
PyObject* PyCRange_size(PyCRange* self);
|
||||||
|
PyObject* PyCRange_dim(PyCRange* self);
|
||||||
|
PyObject* PyCRange_stringMeta(PyCRange* self, PyObject* args, PyObject* kwds);
|
||||||
|
PyTypeObject* PyCRange_init();
|
||||||
|
|
||||||
|
extern PyMethodDef PyCRange_methods[];
|
||||||
|
extern PyTypeObject PyCRangeType;
|
||||||
|
|
||||||
|
#endif
|
68
cnorxz/core/lib/range_wrapper.cpp
Normal file
68
cnorxz/core/lib/range_wrapper.cpp
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
|
||||||
|
#include "range_wrapper.h"
|
||||||
|
|
||||||
|
using namespace CNORXZ;
|
||||||
|
|
||||||
|
int PyCRange_init(PyCRange* self, PyObject* args, PyObject* kwds)
|
||||||
|
{
|
||||||
|
//!!!
|
||||||
|
}
|
||||||
|
|
||||||
|
void PyCRange_dealloc(PyCRange* self)
|
||||||
|
{
|
||||||
|
delete self->ptrObj;
|
||||||
|
Py_TYPE(self)->tp_free(self);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject* PyCRange_size(PyCRange* self)
|
||||||
|
{
|
||||||
|
if(not self->ptrObj->_init()){
|
||||||
|
const SizeT retval = 0;
|
||||||
|
return Py_BuildValue("k", retval);
|
||||||
|
}
|
||||||
|
const SizeT retval = self->ptrObj->size();
|
||||||
|
return Py_BuildValue("k", retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject* PyCRange_dim(PyCRange* self)
|
||||||
|
{
|
||||||
|
if(not self->ptrObj->_init()){
|
||||||
|
const SizeT retval = 0;
|
||||||
|
return Py_BuildValue("k", retval);
|
||||||
|
}
|
||||||
|
const SizeT retval = self->ptrObj->dim();
|
||||||
|
return Py_BuildValue("k", retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject* PyCRange_stringMeta(PyCRange* self, PyObject* args, PyObject* kwds)
|
||||||
|
{
|
||||||
|
//!!!
|
||||||
|
}
|
||||||
|
|
||||||
|
PyMethodDef PyCRange_methods[] = {
|
||||||
|
{ "size", (PyCFunction) PyCRange_size, METH_VARARGS, "return range size" },
|
||||||
|
{ "dim", (PyCFunction) PyCRange_dim, METH_VARARGS, "return range dimension" },
|
||||||
|
{ "stringMeta", (PyCFunction) PyCRange_stringMeta, METH_VARARGS,
|
||||||
|
"return string meta data for given range position" },
|
||||||
|
{ NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
PyTypeObject PyCRangeType = { PyVarObject_HEAD_INIT(NULL,0) "cnorxz.CRange" };
|
||||||
|
|
||||||
|
PyTypeObject* PyCRangeType_init()
|
||||||
|
{
|
||||||
|
PyCRangeType.tp_new = PyType_GenericNew;
|
||||||
|
PyCRangeType.tp_basicsize = sizeof(PyCRange);
|
||||||
|
PyCRangeType.tp_dealloc = (destructor) PyCRange_dealloc;
|
||||||
|
PyCRangeType.to_flags = Py_TPFLAGS_DEFAULT;
|
||||||
|
PyCRangeType.tp_doc = "cnorxz CRange wrapper";
|
||||||
|
PyCRangeType.tp_methods = PyCRange_methods;
|
||||||
|
PyCRangeType.tp_init = (initproc) PyCRange_init;
|
||||||
|
|
||||||
|
if(PyType_Ready(&PyCRangeType) < 0){
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return &PyCRangeType;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue