|
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.
|