2 * Copyright (c) 2007, Novell Inc.
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
7 #ifndef SATSOLVER_DIRPOOL_H
8 #define SATSOLVER_DIRPOOL_H
11 #include "pooltypes.h"
14 typedef struct _Dirpool {
20 void dirpool_create(Dirpool *dp);
21 void dirpool_make_dirtraverse(Dirpool *dp);
22 Id dirpool_add_dir(Dirpool *dp, Id parent, Id comp, int create);
24 static inline Id dirpool_parent(Dirpool *dp, Id did)
28 while (dp->dirs[--did] > 0)
30 return -dp->dirs[did];
34 dirpool_sibling(Dirpool *dp, Id did)
36 if (did + 1 < dp->ndirs && dp->dirs[did + 1] > 0)
38 while (dp->dirs[--did] > 0)
40 /* need to special case did == 0 to prevent looping */
44 dirpool_make_dirtraverse(dp);
45 return dp->dirtraverse[did];
49 dirpool_child(Dirpool *dp, Id did)
52 dirpool_make_dirtraverse(dp);
53 return dp->dirtraverse[did];
57 dirpool_free_dirtraverse(Dirpool *dp)
59 sat_free(dp->dirtraverse);
64 dirpool_compid(Dirpool *dp, Id did)
69 #endif /* SATSOLVER_DIRPOOL_H */