aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs6rc/s6rc_db_check_depcycles.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs6rc/s6rc_db_check_depcycles.c')
-rw-r--r--src/libs6rc/s6rc_db_check_depcycles.c55
1 files changed, 0 insertions, 55 deletions
diff --git a/src/libs6rc/s6rc_db_check_depcycles.c b/src/libs6rc/s6rc_db_check_depcycles.c
deleted file mode 100644
index 5f8339e..0000000
--- a/src/libs6rc/s6rc_db_check_depcycles.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ISC license. */
-
-#include <string.h>
-#include <stdint.h>
-#include <skalibs/bitarray.h>
-#include <s6-rc/s6rc-db.h>
-
-typedef struct recinfo_s recinfo_t, *recinfo_t_ref ;
-struct recinfo_s
-{
- s6rc_db_t const *db ;
- uint32_t n ;
- unsigned char *gray ;
- unsigned char *black ;
- unsigned char h : 1 ;
-} ;
-
-static uint32_t s6rc_db_checknocycle_rec (recinfo_t *recinfo, uint32_t i)
-{
- if (!bitarray_peek(recinfo->black, i))
- {
- uint32_t j = recinfo->db->services[i].ndeps[recinfo->h] ;
- if (bitarray_peek(recinfo->gray, i)) return i ;
- bitarray_set(recinfo->gray, i) ;
- while (j--)
- {
- uint32_t r = s6rc_db_checknocycle_rec(recinfo, recinfo->db->deps[recinfo->h * recinfo->db->ndeps + recinfo->db->services[i].deps[recinfo->h] + j]) ;
- if (r < recinfo->n) return r ;
- }
- bitarray_set(recinfo->black, i) ;
- }
- return recinfo->n ;
-}
-
-int s6rc_db_check_depcycles (s6rc_db_t const *db, int h, diuint32 *problem)
-{
- uint32_t n = db->nshort + db->nlong ;
- uint32_t i = n ;
- unsigned char gray[bitarray_div8(n)] ;
- unsigned char black[bitarray_div8(n)] ;
- recinfo_t info = { .db = db, .n = n, .gray = gray, .black = black, .h = !!h } ;
- memset(gray, 0, bitarray_div8(n)) ;
- memset(black, 0, bitarray_div8(n)) ;
- while (i--)
- {
- uint32_t r = s6rc_db_checknocycle_rec(&info, i) ;
- if (r < n)
- {
- problem->left = i ;
- problem->right = r ;
- return 1 ;
- }
- }
- return 0 ;
-}