From f3648f884a45c5ccd7bd87f48c01cc85c08fc2da Mon Sep 17 00:00:00 2001
From: "alexey.stratulat" <alexey.stratulat@demlabs.net>
Date: Fri, 8 Nov 2019 23:25:48 +0700
Subject: [PATCH] [+] Added function to convert list of string to char***.
 Added function to convert list of integer to size_t*. Added wrapping for
 functions dap_chain_ledger_addr_get_token_ticker_all,
 dap_chain_ledger_addr_get_token_ticker_all_fast.

---
 include/wrapping_dap_chain_ledger.h |  3 ++
 src/wrapping_dap_chain_ledger.c     | 52 +++++++++++++++++++++++++++--
 2 files changed, 52 insertions(+), 3 deletions(-)

diff --git a/include/wrapping_dap_chain_ledger.h b/include/wrapping_dap_chain_ledger.h
index 0a434be2..da9de64e 100644
--- a/include/wrapping_dap_chain_ledger.h
+++ b/include/wrapping_dap_chain_ledger.h
@@ -113,6 +113,9 @@ PyTypeObject DapChainLedger_DapChainLedgerType = {
 
 };
 
+static char*** ListStringToArrayStringFormatChar(PyObject *list);
+static size_t *ListIntToSizeT(PyObject *list);
+
 
 #ifdef __cplusplus
 }
diff --git a/src/wrapping_dap_chain_ledger.c b/src/wrapping_dap_chain_ledger.c
index e52b63b8..2cba8128 100644
--- a/src/wrapping_dap_chain_ledger.c
+++ b/src/wrapping_dap_chain_ledger.c
@@ -73,10 +73,26 @@ PyObject *dap_chain_ledger_tx_get_token_ticker_by_hash_py(PyObject *self, PyObje
     return Py_BuildValue("s", res);
 }
 PyObject *dap_chain_ledger_addr_get_token_ticker_all_py(PyObject *self, PyObject *args){
-    return NULL;
+    PyObject *obj_addr;
+    PyObject *obj_tickers;
+    PyObject *obj_tickers_size;
+    if (!PyArg_ParseTuple(args, "O|O|O", &obj_addr, &obj_tickers, &obj_tickers_size))
+        return NULL;
+    char ***tickers = ListStringToArrayStringFormatChar(obj_tickers);
+    size_t *tickers_size = ListIntToSizeT(obj_tickers_size);
+    dap_chain_ledger_addr_get_token_ticker_all(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainAddrObject*)obj_addr)->addr, tickers, tickers_size);
+    return PyLong_FromLong(0);
 }
 PyObject *dap_chain_ledger_addr_get_token_ticker_all_fast_py(PyObject *self, PyObject *args){
-    return NULL;
+    PyObject *obj_addr;
+    PyObject *obj_tickers;
+    PyObject *obj_tickers_size;
+    if (!PyArg_ParseTuple(args, "O|O|O", &obj_addr, &obj_tickers, &obj_tickers_size))
+        return NULL;
+    char ***tickers = ListStringToArrayStringFormatChar(obj_tickers);
+    size_t *tickers_size = ListIntToSizeT(obj_tickers_size);
+    dap_chain_ledger_addr_get_token_ticker_all_fast(((PyDapChainLedgerObject*)self)->ledger, ((PyDapChainAddrObject*)obj_addr)->addr, tickers, tickers_size);
+    return PyLong_FromLong(0);
 }
 PyObject *dap_chain_ledger_tx_cache_check_py(PyObject *self, PyObject *args){
     return NULL;
@@ -100,7 +116,11 @@ PyObject *dap_chain_ledger_count_py(PyObject *self, PyObject *args){
     return PyLong_FromLongLong(res);
 }
 PyObject *dap_chain_ledger_count_from_to_py(PyObject *self, PyObject *args){
-    return NULL;
+    long ts_from, ts_to;
+    if (!PyArg_ParseTuple(args, "l|l", &ts_from, &ts_to))
+        return NULL;
+    uint64_t res = dap_chain_ledger_count_from_to(((PyDapChainLedgerObject*)self)->ledger, (time_t)ts_from, (time_t)ts_to);
+    return PyLong_FromUnsignedLongLong(res);
 }
 PyObject *dap_chain_ledger_tx_hash_is_used_out_item_py(PyObject *self, PyObject *args){
     PyObject *obj_h_fast;
@@ -180,3 +200,29 @@ PyObject *dap_chain_ledger_tx_cache_get_out_cond_value_py(PyObject *self, PyObje
     return PyLong_FromUnsignedLongLong(res);
 }
 
+static char*** ListStringToArrayStringFormatChar(PyObject *list){
+    Py_ssize_t size = PyList_Size(list);
+    char ***data = calloc(sizeof(char**), (size_t)size);
+    for (Py_ssize_t i = 0; i < size; i++){
+        PyObject *obj_two = PyList_GetItem(list,i);
+        Py_ssize_t size_seentenses = PyList_Size(obj_two);
+        char **sentences = calloc(sizeof(char**), (size_t)size_seentenses);
+        for (int j=0; j < size_seentenses;j++){
+            PyObject *obj_byte = PyList_GetItem(obj_two, j);
+            char *word = PyBytes_AsString(obj_byte);
+            sentences[j] = word;
+        }
+        data[i] = sentences;
+    }
+    return data;
+}
+
+static size_t *ListIntToSizeT(PyObject *list){
+    Py_ssize_t size = PyList_Size(list);
+    size_t *res_size_t = calloc(sizeof(size_t), (size_t)size);
+    for (Py_ssize_t i=0; i<size;i++){
+        PyObject *obj = PyList_GetItem(list, i);
+        res_size_t[i] = (size_t)PyLong_AsSsize_t(obj);
+    }
+    return res_size_t;
+}
-- 
GitLab