From 216b554c6df72923ec3424463741d9f746fa2e7f Mon Sep 17 00:00:00 2001 From: "alexey.stratulat" <alexey.stratulat@demlabs.net> Date: Mon, 16 Dec 2019 22:57:48 +0700 Subject: [PATCH] [+] Added wrapping dap_chain_datum --- include/wrapping_dap_chain_datum.h | 169 +++++++++++++++++++++++++++++ src/wrapping_dap_chain_datum.c | 21 ++++ 2 files changed, 190 insertions(+) create mode 100644 include/wrapping_dap_chain_datum.h create mode 100644 src/wrapping_dap_chain_datum.c diff --git a/include/wrapping_dap_chain_datum.h b/include/wrapping_dap_chain_datum.h new file mode 100644 index 0000000..2b4cc89 --- /dev/null +++ b/include/wrapping_dap_chain_datum.h @@ -0,0 +1,169 @@ +#ifndef _WRAPPING_DAP_CHAIN_DATUM_ +#define _WRAPPING_DAP_CHAIN_DATUM_ +#include "Python.h" +#include "dap_chain_datum.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* DAP Chain datum type id */ +typedef struct PyDapChainDatumTypeId{ + PyObject_HEAD + dap_chain_datum_typeid_t *type_id; +}PyDapChainDatumTypeIdObject; + +static PyTypeObject DapChainDatumTypeIdObject_DapChainDatumTypeIdObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.Chain.DatumTypeId", /* tp_name */ + sizeof(PyDapChainDatumTypeIdObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Chain datum type id object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; +/* -------------------------------- */ + +typedef struct PyDapChainDatum{ + PyObject_HEAD + dap_chain_datum_t *datum; +}PyDapChainDatumObject; + +//void PyDapChainDatumObject_dealloc(PyDapChainDatumObject* object); +PyObject *PyDapChainDatumObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds); +PyObject *dap_chain_datum_size_py(PyObject *self, PyObject *args); + +static PyMethodDef DapChainDatumMethods[] = { + {"size", dap_chain_datum_size_py, METH_VARARGS, ""}, + {NULL, NULL, 0, NULL} +}; + +static PyTypeObject DapChainDatumObject_DapChainDatumObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.Chain.Datum", /* tp_name */ + sizeof(PyDapChainDatumObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Chain datum object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyDapChainDatumObject_new, /* tp_new */ +}; +/* -------------------------------- */ + +/* DAP Chain datum iter*/ +typedef struct PyDapChainDatumIter{ + PyObject_HEAD + dap_chain_datum_iter_t *datum_iter; +}PyDapChainDatumIterObject; + +static PyTypeObject DapChainDatumIterObject_DapChainDatumIterObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "CellFrame.Chain.DatumIter", /* tp_name */ + sizeof(PyDapChainDatumIterObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "Chain datum iter object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + 0, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + PyType_GenericNew, /* tp_new */ +}; +/* -------------------------------- */ + +#ifdef __cplusplus +} +#endif + +#endif //_WRAPPING_DAP_CHAIN_DATUM_ diff --git a/src/wrapping_dap_chain_datum.c b/src/wrapping_dap_chain_datum.c new file mode 100644 index 0000000..a9ece23 --- /dev/null +++ b/src/wrapping_dap_chain_datum.c @@ -0,0 +1,21 @@ +#include "wrapping_dap_chain_datum.h" + +//void PyDapChainDatumObject_dealloc(PyDapChainDatumObject* object){ +//} + +PyObject *PyDapChainDatumObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds){ + uint16_t type_id; + PyBytesObject *bytes; + size_t data_size; + if (!PyArg_ParseTuple(args, "H|S|n", &type_id, &bytes, &data_size)) + return NULL; + PyDapChainDatumObject *obj = (PyDapChainDatumObject*)PyType_GenericNew(type_object, args, kwds); + void* bytes_v = (void *)PyBytes_AsString((PyObject*)bytes); + obj->datum = dap_chain_datum_create(type_id, bytes_v, data_size); + return (PyObject *)obj; +} + +PyObject *dap_chain_datum_size_py(PyObject *self, PyObject *args){ + size_t size = dap_chain_datum_size(((PyDapChainDatumObject*)self)->datum); + return PyLong_FromSize_t(size); +} -- GitLab