wrap more functions in Range wrapper

This commit is contained in:
Christian Zimmermann 2024-04-02 20:23:08 +02:00
parent 034a9bcc8e
commit 6a6e1c823c
5 changed files with 49 additions and 5 deletions

View file

@ -5,12 +5,17 @@
using namespace CNORXZ; using namespace CNORXZ;
static PyMethodDef cnorxz_core_methods[] = {
{ "readFile", (PyCFunction) PyCxReadFile, METH_VARARGS| METH_KEYWORDS, "Read cnorxz-formatted file." },
{ NULL, NULL, 0, NULL }
};
static PyModuleDef cnorxz_core_module = { static PyModuleDef cnorxz_core_module = {
PyModuleDef_HEAD_INIT, PyModuleDef_HEAD_INIT,
"cnorxz", "cnorxz",
"cnorxz core module", "cnorxz core module",
-1, -1,
NULL, NULL, NULL, NULL, NULL cnorxz_core_methods
}; };
PyMODINIT_FUNC PyInit_cnorxz() PyMODINIT_FUNC PyInit_cnorxz()

View file

@ -113,6 +113,8 @@ PyObject* PyCxArrayB_writeFile(PyCxArrayB* self, PyObject* args, PyObject* kwds)
PyObject* PyCxArrayB_readFile(PyCxArrayB* self, PyObject* args, PyObject* kwds); PyObject* PyCxArrayB_readFile(PyCxArrayB* self, PyObject* args, PyObject* kwds);
PyTypeObject* PyCxArrayBType_init(); PyTypeObject* PyCxArrayBType_init();
PyObject* PyCxReadFile(PyObject* self, PyObject* args, PyObject* kwds);
extern PyMethodDef PyCxArrayB_methods[]; extern PyMethodDef PyCxArrayB_methods[];
extern PyTypeObject PyCxArrayBType; extern PyTypeObject PyCxArrayBType;

View file

@ -15,6 +15,7 @@ namespace CNORXZ
inline bool _init() const { return mR != nullptr; } inline bool _init() const { return mR != nullptr; }
inline SizeT size() const { return mR->size(); } inline SizeT size() const { return mR->size(); }
inline SizeT dim() const { return mR->dim(); } inline SizeT dim() const { return mR->dim(); }
inline RangePtr sub(SizeT pos) { return mR->sub(pos); }
inline String stringMeta(SizeT pos) const { return mR->stringMeta(pos); } inline String stringMeta(SizeT pos) const { return mR->stringMeta(pos); }
private: private:
@ -32,6 +33,7 @@ int PyCxRange_init(PyCxRange* self, PyObject* args, PyObject* kwds);
void PyCxRange_dealloc(PyCxRange* self); void PyCxRange_dealloc(PyCxRange* self);
PyObject* PyCxRange_size(PyCxRange* self); PyObject* PyCxRange_size(PyCxRange* self);
PyObject* PyCxRange_dim(PyCxRange* self); PyObject* PyCxRange_dim(PyCxRange* self);
PyObject* PyCxRange_sub(PyCxRange* self, PyObject* args, PyObject* kwds);
PyObject* PyCxRange_stringMeta(PyCxRange* self, PyObject* args, PyObject* kwds); PyObject* PyCxRange_stringMeta(PyCxRange* self, PyObject* args, PyObject* kwds);
PyTypeObject* PyCxRangeType_init(); PyTypeObject* PyCxRangeType_init();

View file

@ -53,7 +53,6 @@ PyObject* PyCxArrayB_range(PyCxArrayB* self)
PyCxRange* o; PyCxRange* o;
o = PyObject_New(PyCxRange, &PyCxRangeType); o = PyObject_New(PyCxRange, &PyCxRangeType);
o->ptrObj = new RangeWrapper(r); o->ptrObj = new RangeWrapper(r);
//return Py_BuildValue("k", retval);
return Py_BuildValue("O", o); return Py_BuildValue("O", o);
} }
@ -88,7 +87,7 @@ PyObject* PyCxArrayB_writeFile(PyCxArrayB* self, PyObject* args, PyObject* kwds)
char* fname = NULL; char* fname = NULL;
char* format = NULL; char* format = NULL;
if(not PyArg_ParseTupleAndKeywords(args, kwds, "s|s", kwlist, &fname, &format)){ if(not PyArg_ParseTupleAndKeywords(args, kwds, "ss|", kwlist, &fname, &format)){
return NULL; return NULL;
} }
const String fn(fname); const String fn(fname);
@ -103,7 +102,7 @@ PyObject* PyCxArrayB_readFile(PyCxArrayB* self, PyObject* args, PyObject* kwds)
char* fname = NULL; char* fname = NULL;
char* format = NULL; char* format = NULL;
if(not PyArg_ParseTupleAndKeywords(args, kwds, "s|s", kwlist, &fname, &format)){ if(not PyArg_ParseTupleAndKeywords(args, kwds, "ss|", kwlist, &fname, &format)){
return NULL; return NULL;
} }
const String fn(fname); const String fn(fname);
@ -176,3 +175,11 @@ PyTypeObject* PyCxArrayBType_init()
return &PyCxArrayBType; return &PyCxArrayBType;
} }
} }
PyObject* PyCxReadFile(PyObject* self, PyObject* args, PyObject* kwds)
{
PyCxArrayB* out = (PyCxArrayB*) PyObject_NEW(PyCxArrayB, &PyCxArrayBType);
out->ptrObj = new ArrayWrapper<Double>();
PyCxArrayB_readFile(out,args,kwds);
return Py_BuildValue("O", out);;
}

View file

@ -5,6 +5,7 @@ using namespace CNORXZ;
int PyCxRange_init(PyCxRange* self, PyObject* args, PyObject* kwds) int PyCxRange_init(PyCxRange* self, PyObject* args, PyObject* kwds)
{ {
//!!! //!!!
} }
@ -34,14 +35,41 @@ PyObject* PyCxRange_dim(PyCxRange* self)
return Py_BuildValue("k", retval); return Py_BuildValue("k", retval);
} }
PyObject* PyCxRange_sub(PyCxRange* self, PyObject* args, PyObject* kwds)
{
static char* kwlist[] = { "pos", NULL };
SizeT pos = 0;
if(not PyArg_ParseTupleAndKeywords(args, kwds, "k|", kwlist, &pos)){
return NULL;
}
SizeT dim = self->ptrObj->dim();
if(pos >= dim){
return PyErr_Format(PyExc_RuntimeError, "requested sub-range position (%d) exceeds range dimension (%d)", pos, dim);
}
const RangePtr r = self->ptrObj->sub(pos);
PyCxRange* o = PyObject_New(PyCxRange, &PyCxRangeType);
o->ptrObj = new RangeWrapper(r);
return Py_BuildValue("O", o);
}
PyObject* PyCxRange_stringMeta(PyCxRange* self, PyObject* args, PyObject* kwds) PyObject* PyCxRange_stringMeta(PyCxRange* self, PyObject* args, PyObject* kwds)
{ {
//!!! const SizeT size = self->ptrObj->size();
PyObject* out = PyList_New(size);
for(SizeT i = 0; i != size; ++i){
PyObject* s = Py_BuildValue("s", self->ptrObj->stringMeta(i).c_str() );
PyList_SetItem(out, i, s);
}
return out;
} }
PyMethodDef PyCxRange_methods[] = { PyMethodDef PyCxRange_methods[] = {
{ "size", (PyCFunction) PyCxRange_size, METH_VARARGS, "return range size" }, { "size", (PyCFunction) PyCxRange_size, METH_VARARGS, "return range size" },
{ "dim", (PyCFunction) PyCxRange_dim, METH_VARARGS, "return range dimension" }, { "dim", (PyCFunction) PyCxRange_dim, METH_VARARGS, "return range dimension" },
{ "sub", (PyCFunction) PyCxRange_sub, METH_VARARGS|METH_KEYWORDS, "return sub-range for given dimension" },
{ "stringMeta", (PyCFunction) PyCxRange_stringMeta, METH_VARARGS, { "stringMeta", (PyCFunction) PyCxRange_stringMeta, METH_VARARGS,
"return string meta data for given range position" }, "return string meta data for given range position" },
{ NULL } { NULL }