* Create a new protocol decoder instance.
*
* @param sess The session holding the protocol decoder instance.
+ * Must not be NULL.
* @param decoder_id Decoder 'id' field.
* @param options GHashtable of options which override the defaults set in
* the decoder class. May be NULL.
i = 1;
srd_dbg("Creating new %s instance.", decoder_id);
- if (session_is_valid(sess) != SRD_OK) {
- srd_err("Invalid session.");
+ if (!sess)
return NULL;
- }
if (!(dec = srd_decoder_get_by_id(decoder_id))) {
srd_err("Protocol decoder %s not found.", decoder_id);
* Stack a decoder instance on top of another.
*
* @param sess The session holding the protocol decoder instances.
+ * Must not be NULL.
* @param di_bottom The instance on top of which di_top will be stacked.
* @param di_top The instance to go on top.
*
struct srd_decoder_inst *di_bottom,
struct srd_decoder_inst *di_top)
{
- if (session_is_valid(sess) != SRD_OK) {
- srd_err("Invalid session.");
+ if (!sess)
return SRD_ERR_ARG;
- }
if (!di_bottom || !di_top) {
srd_err("Invalid from/to instance pair.");
* given session.
*
* @param sess The session holding the protocol decoder instance.
+ * Must not be NULL.
* @param inst_id The instance ID to be found.
*
* @return Pointer to struct srd_decoder_inst, or NULL if not found.
GSList *l;
struct srd_decoder_inst *tmp, *di;
- if (session_is_valid(sess) != SRD_OK) {
- srd_err("Invalid session.");
+ if (!sess)
return NULL;
- }
di = NULL;
for (l = sess->di_list; l; l = l->next) {
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 (session_is_valid(sess) != SRD_OK) {
- srd_err("Invalid session.");
- 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.
*
*
* @private
*/
-static gboolean sample_matches(uint8_t old_sample, uint8_t sample, struct srd_term *term)
+__attribute__((always_inline))
+static inline gboolean sample_matches(uint8_t old_sample, uint8_t sample, struct srd_term *term)
{
/* Caller ensures term != NULL. */
/** @private */
SRD_PRIV void srd_inst_free_all(struct srd_session *sess)
{
- if (session_is_valid(sess) != SRD_OK) {
- srd_err("Invalid session.");
+ if (!sess)
return;
- }
g_slist_free_full(sess->di_list, (GDestroyNotify)srd_inst_free);
}