Browse Source

faux.sched: faux_sched_time_by_data()

Serj Kalichev 3 years ago
parent
commit
ef3f1a1ef2
2 changed files with 28 additions and 0 deletions
  1. 1 0
      faux/sched.h
  2. 27 0
      faux/sched/sched.c

+ 1 - 0
faux/sched.h

@@ -42,6 +42,7 @@ void faux_sched_empty(faux_sched_t *sched);
 int faux_sched_pop(faux_sched_t *sched, int *ev_id, void **data);
 int faux_sched_remove_by_id(faux_sched_t *sched, int id);
 int faux_sched_remove_by_data(faux_sched_t *sched, void *data);
+const struct timespec *faux_sched_time_by_data(faux_sched_t *sched, void *data);
 
 C_DECL_END
 

+ 27 - 0
faux/sched/sched.c

@@ -346,3 +346,30 @@ int faux_sched_remove_by_data(faux_sched_t *sched, void *data)
 
 	return nodes_deleted;
 }
+
+
+/** @brief Get time of events with specified data pointer from list.
+ *
+ * @param [in] sched Allocated and initialized sched object.
+ * @param [in] data Data to search entries to remove.
+ * @return Number of removed entries or < 0 on error.
+ */
+const struct timespec *faux_sched_time_by_data(faux_sched_t *sched, void *data)
+{
+	faux_list_node_t *node = NULL;
+	faux_ev_t *ev = NULL;
+
+	assert(sched);
+	if (!sched)
+		return NULL;
+
+	node = faux_list_match_node(sched->list, faux_ev_compare_data, data, NULL);
+	if (!node)
+		return NULL;
+
+	ev = faux_list_data(node);
+	if (!ev)
+		return NULL;
+
+	return faux_ev_time(ev);
+}