src/graph_ident.[ch]: Implement "ident_intersect".
authorFlorian Forster <ff@octo.it>
Mon, 12 Jul 2010 16:55:07 +0000 (18:55 +0200)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Mon, 12 Jul 2010 16:55:07 +0000 (18:55 +0200)
src/graph_ident.c
src/graph_ident.h

index 7dda849..119571f 100644 (file)
@@ -426,6 +426,27 @@ _Bool ident_matches (const graph_ident_t *selector, /* {{{ */
   return (1);
 } /* }}} _Bool ident_matches */
 
   return (1);
 } /* }}} _Bool ident_matches */
 
+_Bool ident_intersect (const graph_ident_t *s0, /* {{{ */
+    const graph_ident_t *s1)
+{
+#define INTERSECT_PART(p) do {                                               \
+  if (!IS_ANY (s0->p) && !IS_ALL (s0->p)                                     \
+      && !IS_ANY (s1->p) && !IS_ALL (s1->p)                                  \
+      && (strcmp (s0->p, s1->p) != 0))                                       \
+    return (0);                                                              \
+} while (0)
+
+  INTERSECT_PART (host);
+  INTERSECT_PART (plugin);
+  INTERSECT_PART (plugin_instance);
+  INTERSECT_PART (type);
+  INTERSECT_PART (type_instance);
+
+#undef INTERSECT_PART
+
+  return (1);
+} /* }}} _Bool ident_intersect */
+
 char *ident_to_string (const graph_ident_t *ident) /* {{{ */
 {
   char buffer[PATH_MAX];
 char *ident_to_string (const graph_ident_t *ident) /* {{{ */
 {
   char buffer[PATH_MAX];
index 4eced2d..e433fa7 100644 (file)
@@ -78,6 +78,12 @@ int ident_compare (const graph_ident_t *i0,
 _Bool ident_matches (const graph_ident_t *selector,
     const graph_ident_t *ident);
 
 _Bool ident_matches (const graph_ident_t *selector,
     const graph_ident_t *ident);
 
+/* The "ident_intersect" function takes two selectors and returns true if a
+ * file may apply to both selectors. If the selectors contradict one another,
+ * for example one issuing "plugin = cpu" and the other "plugin = memory",
+ * then false is returned. */
+_Bool ident_intersect (const graph_ident_t *s0, const graph_ident_t *s1);
+
 char *ident_to_string (const graph_ident_t *ident);
 char *ident_to_file (const graph_ident_t *ident);
 char *ident_to_json (const graph_ident_t *ident);
 char *ident_to_string (const graph_ident_t *ident);
 char *ident_to_file (const graph_ident_t *ident);
 char *ident_to_json (const graph_ident_t *ident);