|
Defines |
#define | DBM(I, J) dbm[(I)*dim+(J)] |
#define | SRC(I, J) src[(I)*dim+(J)] |
#define | DST(I, J) dst[(I)*dim+(J)] |
#define | DBM1(I, J) dbm1[(I)*dim+(J)] |
#define | DBM2(I, J) dbm2[(I)*dim+(J)] |
#define | ASSERT_DIAG_OK(DBM, DIM) ASSERT(dbm_isDiagonalOK(DBM,DIM), dbm_print(stderr, DBM, DIM)) |
| For debugging.
|
#define | ASSERT_NOT_EMPTY(DBM, DIM) ASSERT(!dbm_isEmpty(DBM, DIM), dbm_print(stderr, DBM, DIM)) |
#define | DBM_CONSTRAIN(I, J, V) |
Functions |
void | dbm_closeLU (raw_t *dbm, cindex_t dim, const int32_t *lower, const int32_t *upper) |
| Specialized close for extrapolation: can skip outer loop k if lower[k] == upper[k] == infinity.
|
void | dbm_init (raw_t *dbm, cindex_t dim) |
| Initialize a DBM with:
- <= 0 on the diagonal and the 1st row
- <= infinity elsewhere.
|
BOOL | dbm_isEqualToInit (const raw_t *dbm, cindex_t dim) |
| Equality test with trivial dbm as obtained from dbm_init(dbm, dim).
|
void | dbm_convexUnion (raw_t *dst, const raw_t *src, cindex_t dim) |
| Convex hull union between 2 DBMs.
|
BOOL | dbm_intersection (raw_t *dst, const raw_t *src, cindex_t dim) |
| Intersection of 2 DBMs.
|
BOOL | dbm_relaxedIntersection (raw_t *dst, const raw_t *dbm1, const raw_t *dbm2, cindex_t dim) |
| Relaxed intersection of 2 DBMs.
|
BOOL | dbm_haveIntersection (const raw_t *dbm1, const raw_t *dbm2, cindex_t dim) |
| Test if 2 DBMs have an intersection.
|
BOOL | dbm_constrain (raw_t *dbm, cindex_t dim, cindex_t i, cindex_t j, raw_t constraint, uint32_t *touched) |
| Constrain a DBM with a constraint.
|
BOOL | dbm_constrain1 (raw_t *dbm, cindex_t dim, cindex_t i, cindex_t j, raw_t constraint) |
| Constrain a DBM with one constraint.
|
BOOL | dbm_constrainN (raw_t *dbm, cindex_t dim, const constraint_t *constraints, size_t n) |
| Constrain a DBM with several constraints.
|
BOOL | dbm_constrainIndexedN (raw_t *dbm, cindex_t dim, const cindex_t *indexTable, const constraint_t *constraints, size_t n) |
| Constrain a DBM with several constraints using a table for index translation (translates absolute clock indices to local clock indices for this DBM).
|
void | dbm_up (raw_t *dbm, cindex_t dim) |
| Delay operation.
|
void | dbm_downFrom (raw_t *dbm, cindex_t dim, cindex_t j) |
| Internal dbm_down, don't use directly.
|
void | dbm_updateValue (raw_t *dbm, cindex_t dim, cindex_t k, int32_t value) |
| Former "reset" operation, properly called update.
|
void | dbm_freeClock (raw_t *dbm, cindex_t dim, cindex_t k) |
| Free operation.
|
void | dbm_freeUp (raw_t *dbm, cindex_t dim, cindex_t k) |
| Free all upper bounds for a given clock.
|
void | dbm_freeAllUp (raw_t *dbm, cindex_t dim) |
| Free all upper bounds for all clocks.
|
BOOL | dbm_isFreedAllUp (const raw_t *dbm, cindex_t dim) |
void | dbm_freeDown (raw_t *dbm, cindex_t dim, cindex_t k) |
| Free all lower bounds for a given clock.
|
void | dbm_freeAllDown (raw_t *dbm, cindex_t dim) |
| Free all lower bounds for all clocks.
|
uint32_t | dbm_testFreeAllDown (const raw_t *dbm, cindex_t dim) |
void | dbm_updateClock (raw_t *dbm, cindex_t dim, cindex_t i, cindex_t j) |
| Clock copy operation = update clock: xi := xj, where xi and xj are clocks.
|
void | dbm_updateIncrement (raw_t *dbm, cindex_t dim, cindex_t k, int32_t value) |
| Increment operation: xi := xi + value, where xi is a clock.
|
void | dbm_update (raw_t *dbm, cindex_t dim, cindex_t i, cindex_t j, int32_t value) |
| More general update operation: xi := xj + value, where xi and yi are clocks.
|
BOOL | dbm_constrainClock (raw_t *dbm, cindex_t dim, cindex_t clock, int32_t value) |
BOOL | dbm_close (raw_t *dbm, cindex_t dim) |
| Close operation.
|
BOOL | dbm_isClosed (const raw_t *dbm, cindex_t dim) |
| Check that a DBM is closed.
|
BOOL | dbm_closex (raw_t *dbm, cindex_t dim, const uint32_t *touched) |
| Close operation.
|
BOOL | dbm_close1 (raw_t *dbm, cindex_t dim, cindex_t k) |
| Close operation for 1 clock.
|
void | dbm_closeij (raw_t *dbm, cindex_t dim, cindex_t b, cindex_t a) |
| Specialization of close valid if only one constraint cij is tightened, ie, DBM is closed, you tighten DBM[i,j] only, then this function recomputes the closure more efficiently than calling close1(i) and close1(j).
|
BOOL | dbm_isEmpty (const raw_t *dbm, cindex_t dim) |
| Check if a DBM is empty by looking at its diagonal.
|
BOOL | dbm_isUnbounded (const raw_t *dbm, cindex_t dim) |
| Check if a DBM is unbounded, i.e.
|
relation_t | dbm_relation (const raw_t *dbm1, const raw_t *dbm2, cindex_t dim) |
| Relation between 2 dbms.
|
BOOL | dbm_isSubsetEq (const raw_t *dbm1, const raw_t *dbm2, cindex_t dim) |
| Test only if dbm1 <= dbm2.
|
void | dbm_relaxAll (raw_t *dbm, cindex_t dim) |
| Relax all bounds so that they are non strict (except for infinity).
|
void | dbm_relaxDownClock (raw_t *dbm, cindex_t dim, cindex_t clock) |
| Relax lower bounds of a given clocks, ie, make them weak.
|
void | dbm_relaxUpClock (raw_t *dbm, cindex_t dim, cindex_t clock) |
| Relax upper bounds of a given clocks, ie, make them weak.
|
BOOL | dbm_isPointIncluded (const int32_t *pt, const raw_t *dbm, cindex_t dim) |
| Test if a (discrete) point is included in the zone represented by the DBM.
|
BOOL | dbm_isRealPointIncluded (const double *pt, const raw_t *dbm, cindex_t dim) |
| Test if a (real) point is included in the zone represented by the DBM.
|
cindex_t | dbm_computeTables (const uint32_t *bitSrc, const uint32_t *bitDst, size_t bitSize, cindex_t *table, cindex_t *cols) |
| Internal function: compute redirection tables table and cols (for update of DBM).
|
void | dbm_updateDBM (raw_t *dbmDst, const raw_t *dbmSrc, cindex_t dimDst, cindex_t dimSrc, const cindex_t *cols) |
| Internal function: update a DBM (copy & and insert new rows).
|
cindex_t | dbm_shrinkExpand (const raw_t *dbmSrc, raw_t *dbmDst, cindex_t dimSrc, const uint32_t *bitSrc, const uint32_t *bitDst, size_t bitSize, cindex_t *table) |
| Shrink and expand a DBM:
- takes 2 bit arrays: the source array marks which clocks are used in the source DBM, and the destination array marks the clocks in the destination DBM
- removes clock constraints in source and not in destination
- adds clock constraints not in source and in destination
- leaves clock constraints that are in source and in destination.
|
void | dbm_extrapolateMaxBounds (raw_t *dbm, cindex_t dim, const int32_t *max) |
| Classical extrapolation based on maximal bounds, formerly called k-normalization.
|
void | dbm_diagonalExtrapolateMaxBounds (raw_t *dbm, cindex_t dim, const int32_t *max) |
| Diagonal extrapolation based on maximal bounds.
|
void | dbm_extrapolateLUBounds (raw_t *dbm, cindex_t dim, const int32_t *lower, const int32_t *upper) |
| Extrapolation based on lower-upper bounds.
|
void | dbm_diagonalExtrapolateLUBounds (raw_t *dbm, cindex_t dim, const int32_t *lower, const int32_t *upper) |
| Diagonal extrapolation based on lower-upper bounds.
|
void | dbm_swapClocks (raw_t *dbm, cindex_t dim, cindex_t x, cindex_t y) |
| Swap clocks.
|
BOOL | dbm_isDiagonalOK (const raw_t *dbm, cindex_t dim) |
| Test if the diagonal is correct.
|
BOOL | dbm_isValid (const raw_t *dbm, cindex_t dim) |
| Test if
- dbm is closed
- dbm is not empty
- constraints in the 1st row are at most <=0.
|
const char * | dbm_relation2string (relation_t rel) |
| Convert code to string.
|
raw_t | dbm_getMaxRange (const raw_t *dbm, cindex_t dim) |
| Go through a DBM (dim*dim) and compute the max range needed to store the constraints, excluding infinity.
|