diff options
-rw-r--r-- | instance.c | 56 | ||||
-rw-r--r-- | libsigrokdecode-internal.h | 2 | ||||
-rw-r--r-- | type_decoder.c | 57 |
3 files changed, 57 insertions, 58 deletions
@@ -576,62 +576,6 @@ SRD_API struct srd_decoder_inst *srd_inst_find_by_id(struct srd_session *sess, return di; } -static struct srd_decoder_inst *srd_sess_inst_find_by_obj( - struct srd_session *sess, const GSList *stack, - const PyObject *obj) -{ - const GSList *l; - struct srd_decoder_inst *tmp, *di; - - if (!sess) - return NULL; - - di = NULL; - for (l = stack ? stack : sess->di_list; di == NULL && l != NULL; l = l->next) { - tmp = l->data; - if (tmp->py_inst == obj) - di = tmp; - else if (tmp->next_di) - di = srd_sess_inst_find_by_obj(sess, tmp->next_di, obj); - } - - return di; -} - -/** - * Find a decoder instance by its Python object. - * - * I.e. find that instance's instantiation of the sigrokdecode.Decoder class. - * This will recurse to find the instance anywhere in the stack tree of all - * sessions. - * - * @param stack Pointer to a GSList of struct srd_decoder_inst, indicating the - * stack to search. To start searching at the bottom level of - * decoder instances, pass NULL. - * @param obj The Python class instantiation. - * - * @return Pointer to struct srd_decoder_inst, or NULL if not found. - * - * @private - * - * @since 0.1.0 - */ -SRD_PRIV struct srd_decoder_inst *srd_inst_find_by_obj(const GSList *stack, - const PyObject *obj) -{ - struct srd_decoder_inst *di; - struct srd_session *sess; - GSList *l; - - di = NULL; - for (l = sessions; di == NULL && l != NULL; l = l->next) { - sess = l->data; - di = srd_sess_inst_find_by_obj(sess, stack, obj); - } - - return di; -} - /** * Set the list of initial (assumed) pin values. * diff --git a/libsigrokdecode-internal.h b/libsigrokdecode-internal.h index f1f8e18..1d0931e 100644 --- a/libsigrokdecode-internal.h +++ b/libsigrokdecode-internal.h @@ -74,8 +74,6 @@ SRD_PRIV struct srd_pd_callback *srd_pd_output_callback_find(struct srd_session int output_type); /* instance.c */ -SRD_PRIV struct srd_decoder_inst *srd_inst_find_by_obj( const GSList *stack, - const PyObject *obj); SRD_PRIV int srd_inst_start(struct srd_decoder_inst *di); SRD_PRIV void match_array_free(struct srd_decoder_inst *di); SRD_PRIV void condition_list_free(struct srd_decoder_inst *di); diff --git a/type_decoder.c b/type_decoder.c index f2ac87d..324d2ef 100644 --- a/type_decoder.c +++ b/type_decoder.c @@ -22,6 +22,10 @@ #include "libsigrokdecode.h" #include <inttypes.h> +/** @cond PRIVATE */ +extern SRD_PRIV GSList *sessions; +/** @endcond */ + typedef struct { PyObject_HEAD } srd_Decoder; @@ -208,6 +212,59 @@ err: return SRD_ERR_PYTHON; } +static struct srd_decoder_inst *srd_sess_inst_find_by_obj( + struct srd_session *sess, const GSList *stack, const PyObject *obj) +{ + const GSList *l; + struct srd_decoder_inst *tmp, *di; + + if (!sess) + return NULL; + + di = NULL; + for (l = stack ? stack : sess->di_list; di == NULL && l != NULL; l = l->next) { + tmp = l->data; + if (tmp->py_inst == obj) + di = tmp; + else if (tmp->next_di) + di = srd_sess_inst_find_by_obj(sess, tmp->next_di, obj); + } + + return di; +} + +/** + * Find a decoder instance by its Python object. + * + * I.e. find that instance's instantiation of the sigrokdecode.Decoder class. + * This will recurse to find the instance anywhere in the stack tree of all + * sessions. + * + * @param stack Pointer to a GSList of struct srd_decoder_inst, indicating the + * stack to search. To start searching at the bottom level of + * decoder instances, pass NULL. + * @param obj The Python class instantiation. + * + * @return Pointer to struct srd_decoder_inst, or NULL if not found. + * + * @since 0.1.0 + */ +static struct srd_decoder_inst *srd_inst_find_by_obj( + const GSList *stack, const PyObject *obj) +{ + struct srd_decoder_inst *di; + struct srd_session *sess; + GSList *l; + + di = NULL; + for (l = sessions; di == NULL && l != NULL; l = l->next) { + sess = l->data; + di = srd_sess_inst_find_by_obj(sess, stack, obj); + } + + return di; +} + static int convert_meta(struct srd_proto_data *pdata, PyObject *obj) { long long intvalue; |