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