From 7c047e8bcab32e43b5aafe136cc864dfa924aa81 Mon Sep 17 00:00:00 2001
From: "alexey.stratulat" <alexey.stratulat@demlabs.net>
Date: Mon, 14 Oct 2019 20:52:54 +0700
Subject: [PATCH] [+] Added wrapping for libdap-chain-datum.

---
 include/wrapping_dap_chain_datum.h | 163 +++++++++++++++++++++++++++++
 src/wrapping_dap_chain_datum.c     |  15 +++
 2 files changed, 178 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 00000000..bfbdeb56
--- /dev/null
+++ b/include/wrapping_dap_chain_datum.h
@@ -0,0 +1,163 @@
+#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.ChainDatumTypeId",          /* 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 *DapChainDatumObject_new(PyTypeObject *type_object, PyObject *args, PyObject *kwds);
+
+static PyTypeObject DapChainDatumObject_DapChainDatumObjectType = {
+    PyVarObject_HEAD_INIT(NULL, 0)
+    "CellFrame.ChainDatum",          /* 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.ChainDatumIter",          /* 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 00000000..c9ef627b
--- /dev/null
+++ b/src/wrapping_dap_chain_datum.c
@@ -0,0 +1,15 @@
+#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);
+    obj->datum = dap_chain_datum_create(type_id, bytes, data_size);
+    return (PyObject *)obj;
+}
-- 
GitLab