From 19410795f6070bc77cbfa5d39ec0f5ebacdefbb0 Mon Sep 17 00:00:00 2001 From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net> Date: Fri, 22 Feb 2019 16:26:28 +0700 Subject: [PATCH] [*] New callbacks and API for downlaying objects --- dap_chain_cs_dag.c | 75 ++++++++++++++++++++++++++++++++-------- dap_chain_cs_dag.h | 17 +++++---- dap_chain_cs_dag_event.c | 9 ----- dap_chain_cs_dag_event.h | 2 -- 4 files changed, 72 insertions(+), 31 deletions(-) diff --git a/dap_chain_cs_dag.c b/dap_chain_cs_dag.c index d2b2953..5da2f0c 100644 --- a/dap_chain_cs_dag.c +++ b/dap_chain_cs_dag.c @@ -33,6 +33,10 @@ typedef struct dap_chain_cs_dag_pvt { #define PVT(a) ((dap_chain_cs_dag_pvt_t *) a->_pvt ) +static int s_chain_callback_element_add(dap_chain_t * a_chain, void * a_data, size_t a_data_size);// Accept new element in chain +static int s_chain_callback_element_get_first(dap_chain_t * a_chain, void ** a_data, size_t * a_data_size ); // Get the fisrt element from chain +static int s_chain_callback_element_get_next( dap_chain_t * a_chain, void ** a_data, size_t * a_data_size ); // Get the next element from chain from the current one + /** * @brief dap_chain_cs_dag_init * @return @@ -53,14 +57,21 @@ void dap_chain_cs_dag_deinit() /** * @brief dap_chain_cs_dag_new * @param a_chain - * @return + * @param a_chain_cfg */ -dap_chain_cs_dag_t *dap_chain_cs_dag_new(dap_chain_t * a_chain) +void dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) { - dap_chain_cs_dag_t * l_ret = DAP_NEW_Z(dap_chain_cs_dag_t); - l_ret->_pvt = DAP_NEW_Z(dap_chain_cs_dag_pvt_t); - l_ret->chain = a_chain; - return l_ret; + dap_chain_cs_dag_t * l_chain_cs_dag = DAP_NEW_Z(dap_chain_cs_dag_t); + l_chain_cs_dag->_pvt = DAP_NEW_Z(dap_chain_cs_dag_pvt_t); + l_chain_cs_dag->chain = a_chain; + + a_chain->callback_delete = dap_chain_cs_dag_delete; + a_chain->callback_element_add = s_chain_callback_element_add; // Accept new element in chain + a_chain->callback_element_get_first = s_chain_callback_element_get_first; // Get the fisrt element from chain + a_chain->callback_element_get_next = s_chain_callback_element_get_next; // Get the next element from chain from the current one + a_chain->_inheritor = l_chain_cs_dag; + + log_it (L_NOTICE, "DAG chain initialized"); } /** @@ -68,13 +79,49 @@ dap_chain_cs_dag_t *dap_chain_cs_dag_new(dap_chain_t * a_chain) * @param a_dag * @return */ -void dap_chain_cs_dag_delete(dap_chain_cs_dag_t * a_dag) +void dap_chain_cs_dag_delete(dap_chain_t * a_chain) +{ + dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG ( a_chain ); + if(l_dag->callback_delete ) + l_dag->callback_delete(l_dag); + if(l_dag->_inheritor) + DAP_DELETE(l_dag->_inheritor); + if(l_dag->_pvt) + DAP_DELETE(l_dag->_pvt); + DAP_DELETE(l_dag); +} + +/** + * @brief s_chain_callback_element_add Accept new element in chain + * @param a_chain + * @param a_data + * @param a_data_size + */ +static int s_chain_callback_element_add(dap_chain_t * a_chain, void * a_data, size_t a_data_size) +{ + return -1; // TODO +} + +/** + * @brief s_chain_callback_element_get_first Get the fisrt element from chain + * @param a_chain + * @param a_data + * @param a_data_size + * @return 0 if ok + */ +static int s_chain_callback_element_get_first(dap_chain_t * a_chain, void ** a_data, size_t * a_data_size ) +{ + return -1; // TODO +} + +/** + * @brief s_chain_callback_element_get_next Get the next element from chain from the current one + * @param a_chain + * @param a_data + * @param a_data_size + * @return 0 if ok + */ +static int s_chain_callback_element_get_next( dap_chain_t * a_chain, void ** a_data, size_t * a_data_size ) { - if(a_dag->callback_delete ) - a_dag->callback_delete(a_dag->chain); - if(a_dag->_inheritor) - DAP_DELETE(a_dag->_inheritor); - if(a_dag->_pvt) - DAP_DELETE(a_dag->_pvt); - DAP_DELETE(a_dag); + return -1; // TODO } diff --git a/dap_chain_cs_dag.h b/dap_chain_cs_dag.h index 9ac2d6b..d56cffd 100644 --- a/dap_chain_cs_dag.h +++ b/dap_chain_cs_dag.h @@ -24,12 +24,18 @@ #pragma once #include "dap_chain.h" #include "dap_chain_cs_dag_event.h" + +typedef struct dap_chain_cs_dag dap_chain_cs_dag_t; + +typedef void (*dap_chain_cs_dag_callback_t)(dap_chain_cs_dag_t *); +typedef int (*dap_chain_cs_dag_callback_event_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_t *); + typedef struct dap_chain_cs_dag { dap_chain_t * chain; - dap_chain_callback_new_t callback_new; - dap_chain_callback_t callback_delete; - dap_chain_cs_dag_event_callback_ptr_t callback_event_input; + dap_chain_cs_dag_callback_t callback_delete; + dap_chain_cs_dag_callback_event_t callback_event_input; + dap_chain_cs_dag_callback_event_t callback_event_verify; void * _pvt; void * _inheritor; @@ -40,6 +46,5 @@ typedef struct dap_chain_cs_dag int dap_chain_cs_dag_init(); void dap_chain_cs_dag_deinit(); -dap_chain_cs_dag_t *dap_chain_cs_dag_new(dap_chain_t * a_chain); -void dap_chain_cs_dag_delete(dap_chain_cs_dag_t * a_dag); - +void dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg); +void dap_chain_cs_dag_delete(dap_chain_t * a_chain); diff --git a/dap_chain_cs_dag_event.c b/dap_chain_cs_dag_event.c index d0d375a..4987b27 100644 --- a/dap_chain_cs_dag_event.c +++ b/dap_chain_cs_dag_event.c @@ -69,15 +69,6 @@ void dap_chain_cs_dag_event_delete(dap_chain_cs_dag_t * a_dag,dap_chain_cs_dag_e } -/** - * @brief dap_chain_cs_dag_event_verify - * @return - */ -int dap_chain_cs_dag_event_verify(dap_chain_cs_dag_event_t * a_event) -{ - return 0; - -} /** * @brief dap_chain_cs_dag_event_get_datum diff --git a/dap_chain_cs_dag_event.h b/dap_chain_cs_dag_event.h index 419320d..5833783 100644 --- a/dap_chain_cs_dag_event.h +++ b/dap_chain_cs_dag_event.h @@ -39,13 +39,11 @@ typedef struct dap_chain_cs_dag_event { uint8_t hashes_n_signs_n_datum[]; // Hashes, signes and datum } dap_chain_cs_dag_event_t; -typedef int (*dap_chain_cs_dag_event_callback_ptr_t)(dap_chain_cs_dag_t *, dap_chain_cs_dag_event_t *); dap_chain_cs_dag_event_t * dap_chain_cs_dag_event_new(dap_chain_cs_dag_t * a_dag, dap_chain_datum_t * a_datum, dap_enc_key_t * a_key, dap_chain_hash_fast_t * a_hashes, size_t a_hashes_count); void dap_chain_cs_dag_event_delete(dap_chain_cs_dag_t * a_dag, dap_chain_cs_dag_event_t * a_event); -int dap_chain_cs_dag_event_verify(dap_chain_cs_dag_event_t * a_event); dap_chain_datum_t* dap_chain_cs_dag_event_get_datum(dap_chain_cs_dag_event_t * a_event); -- GitLab