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