aboutsummaryrefslogtreecommitdiff
path: root/src/c2.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/c2.h')
-rw-r--r--src/c2.h20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/c2.h b/src/c2.h
index d6b1d37..a7ddd39 100644
--- a/src/c2.h
+++ b/src/c2.h
@@ -12,15 +12,31 @@
#pragma once
#include <stdbool.h>
+#include <stddef.h>
typedef struct _c2_lptr c2_lptr_t;
typedef struct session session_t;
struct managed_win;
+typedef void (*c2_userdata_free)(void *);
c2_lptr_t *c2_parse(c2_lptr_t **pcondlst, const char *pattern, void *data);
-c2_lptr_t *c2_free_lptr(c2_lptr_t *lp);
+c2_lptr_t *c2_free_lptr(c2_lptr_t *lp, c2_userdata_free f);
-bool c2_match(session_t *ps, const struct managed_win *w, const c2_lptr_t *condlst, void **pdata);
+bool c2_match(session_t *ps, const struct managed_win *w, const c2_lptr_t *condlst,
+ void **pdata);
bool c2_list_postprocess(session_t *ps, c2_lptr_t *list);
+typedef bool (*c2_list_foreach_cb_t)(const c2_lptr_t *cond, void *data);
+bool c2_list_foreach(const c2_lptr_t *list, c2_list_foreach_cb_t cb, void *data);
+/// Return user data stored in a condition.
+void *c2_list_get_data(const c2_lptr_t *condlist);
+
+/**
+ * Destroy a condition list.
+ */
+static inline void c2_list_free(c2_lptr_t **pcondlst, c2_userdata_free f) {
+ while ((*pcondlst = c2_free_lptr(*pcondlst, f))) {
+ }
+ *pcondlst = NULL;
+}