@ -11,12 +11,14 @@ namespace storm {
static constexpr const uint64_t defaultCapacity = 1 ;
template < typename ValueType >
DftToGspnTransformator < ValueType > : : DftToGspnTransformator ( storm : : storage : : DFT < ValueType > const & dft ) : mDft ( dft ) {
DftToGspnTransformator < ValueType > : : DftToGspnTransformator ( storm : : storage : : DFT < ValueType > const & dft ) : mDft (
dft ) {
// Intentionally left empty.
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : transform ( std : : set < uint64_t > const & dontCareElements , bool smart , bool mergeDCFailed ) {
void DftToGspnTransformator < ValueType > : : transform ( std : : set < uint64_t > const & dontCareElements , bool smart ,
bool mergeDCFailed ) {
this - > dontCareElements = dontCareElements ;
this - > smart = smart ;
this - > mergedDCFailed = mergeDCFailed ;
@ -31,7 +33,8 @@ namespace storm {
template < typename ValueType >
uint64_t DftToGspnTransformator < ValueType > : : toplevelFailedPlaceId ( ) {
STORM_LOG_ASSERT ( failedPlaces . size ( ) > mDft . getTopLevelIndex ( ) , " Failed place for top level element does not exist. " ) ;
STORM_LOG_ASSERT ( failedPlaces . size ( ) > mDft . getTopLevelIndex ( ) ,
" Failed place for top level element does not exist. " ) ;
return failedPlaces . at ( mDft . getTopLevelIndex ( ) ) ;
}
@ -67,18 +70,23 @@ namespace storm {
translateVOT ( std : : static_pointer_cast < storm : : storage : : DFTVot < ValueType > const > ( dftElement ) ) ;
break ;
case storm : : storage : : DFTElementType : : PAND :
translatePAND ( std : : static_pointer_cast < storm : : storage : : DFTPand < ValueType > const > ( dftElement ) ,
std : : static_pointer_cast < storm : : storage : : DFTPand < ValueType > const > ( dftElement ) - > isInclusive ( ) ) ;
translatePAND (
std : : static_pointer_cast < storm : : storage : : DFTPand < ValueType > const > ( dftElement ) ,
std : : static_pointer_cast < storm : : storage : : DFTPand < ValueType > const > (
dftElement ) - > isInclusive ( ) ) ;
break ;
case storm : : storage : : DFTElementType : : POR :
translatePOR ( std : : static_pointer_cast < storm : : storage : : DFTPor < ValueType > const > ( dftElement ) ,
std : : static_pointer_cast < storm : : storage : : DFTPor < ValueType > const > ( dftElement ) - > isInclusive ( ) ) ;
std : : static_pointer_cast < storm : : storage : : DFTPor < ValueType > const > (
dftElement ) - > isInclusive ( ) ) ;
break ;
case storm : : storage : : DFTElementType : : SPARE :
translateSPARE ( std : : static_pointer_cast < storm : : storage : : DFTSpare < ValueType > const > ( dftElement ) ) ;
translateSPARE (
std : : static_pointer_cast < storm : : storage : : DFTSpare < ValueType > const > ( dftElement ) ) ;
break ;
case storm : : storage : : DFTElementType : : PDEP :
translatePDEP ( std : : static_pointer_cast < storm : : storage : : DFTDependency < ValueType > const > ( dftElement ) ) ;
translatePDEP ( std : : static_pointer_cast < storm : : storage : : DFTDependency < ValueType > const > (
dftElement ) ) ;
break ;
case storm : : storage : : DFTElementType : : SEQ :
translateSeq ( std : : static_pointer_cast < storm : : storage : : DFTSeq < ValueType > const > ( dftElement ) ) ;
@ -92,29 +100,48 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateBE ( std : : shared_ptr < storm : : storage : : DFTBE < ValueType > const > dftBE ) {
void DftToGspnTransformator < ValueType > : : translateBE (
std : : shared_ptr < storm : : storage : : DFTBE < ValueType > const > dftBE ) {
double xcenter = mDft . getElementLayoutInfo ( dftBE - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftBE - > id ( ) ) . y ;
uint64_t failedPlace = addFailedPlace ( dftBE , storm : : gspn : : LayoutInfo ( xcenter + 3.0 , ycenter ) ) ;
uint64_t activePlace = builder . addPlace ( defaultCapacity , isActiveInitially ( dftBE ) ? 1 : 0 , dftBE - > name ( ) + STR_ACTIVATED ) ;
uint64_t activePlace = builder . addPlace ( defaultCapacity , isActiveInitially ( dftBE ) ? 1 : 0 ,
dftBE - > name ( ) + STR_ACTIVATED ) ;
activePlaces . emplace ( dftBE - > id ( ) , activePlace ) ;
builder . setPlaceLayoutInfo ( activePlace , storm : : gspn : : LayoutInfo ( xcenter - 3.0 , ycenter ) ) ;
uint64_t tActive = builder . addTimedTransition ( defaultPriority , dftBE - > activeFailureRate ( ) , dftBE - > name ( ) + " _activeFailing " ) ;
uint64_t tActive = builder . addTimedTransition ( defaultPriority , dftBE - > activeFailureRate ( ) ,
dftBE - > name ( ) + " _activeFailing " ) ;
builder . setTransitionLayoutInfo ( tActive , storm : : gspn : : LayoutInfo ( xcenter , ycenter + 3.0 ) ) ;
builder . addInputArc ( activePlace , tActive ) ;
builder . addInhibitionArc ( failedPlace , tActive ) ;
builder . addOutputArc ( tActive , activePlace ) ;
builder . addOutputArc ( tActive , failedPlace ) ;
uint64_t tPassive = builder . addTimedTransition ( defaultPriority , dftBE - > passiveFailureRate ( ) , dftBE - > name ( ) + " _passiveFailing " ) ;
uint64_t tPassive = builder . addTimedTransition ( defaultPriority , dftBE - > passiveFailureRate ( ) ,
dftBE - > name ( ) + " _passiveFailing " ) ;
builder . setTransitionLayoutInfo ( tPassive , storm : : gspn : : LayoutInfo ( xcenter , ycenter - 3.0 ) ) ;
builder . addInhibitionArc ( activePlace , tPassive ) ;
builder . addInhibitionArc ( failedPlace , tPassive ) ;
builder . addOutputArc ( tPassive , failedPlace ) ;
if ( dontCareElements . count ( dftBE - > id ( ) ) & & dftBE - > id ( ) ! = mDft . getTopLevelIndex ( ) ) {
u_int64_t tDontCare = addDontcareTransition ( dftBE ,
storm : : gspn : : LayoutInfo ( xcenter + 12.0 , ycenter ) ) ;
if ( ! mergedDCFailed ) {
uint64_t dontCarePlace = builder . addPlace ( defaultPriority , 0 , dftBE - > name ( ) + STR_DONTCARE ) ;
builder . setPlaceLayoutInfo ( dontCarePlace ,
storm : : gspn : : LayoutInfo ( xcenter + 12.0 , ycenter + 5.0 ) ) ;
builder . addInhibitionArc ( dontCarePlace , tDontCare ) ;
builder . addOutputArc ( tDontCare , dontCarePlace ) ;
} else {
builder . addInhibitionArc ( failedPlace , tDontCare ) ;
builder . addOutputArc ( tDontCare , failedPlace ) ;
}
}
if ( ! smart | | dftBE - > nrRestrictions ( ) > 0 ) {
uint64_t disabledPlace = addDisabledPlace ( dftBE , storm : : gspn : : LayoutInfo ( xcenter - 9.0 , ycenter ) ) ;
builder . addInhibitionArc ( disabledPlace , tActive ) ;
@ -122,14 +149,16 @@ namespace storm {
}
if ( ! smart | | mDft . isRepresentative ( dftBE - > id ( ) ) ) {
uint64_t unavailablePlace = addUnavailablePlace ( dftBE , storm : : gspn : : LayoutInfo ( xcenter + 9.0 , ycenter ) ) ;
uint64_t unavailablePlace = addUnavailablePlace ( dftBE ,
storm : : gspn : : LayoutInfo ( xcenter + 9.0 , ycenter ) ) ;
builder . addOutputArc ( tActive , unavailablePlace ) ;
builder . addOutputArc ( tPassive , unavailablePlace ) ;
}
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateCONSTF ( std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftConstF ) {
void DftToGspnTransformator < ValueType > : : translateCONSTF (
std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftConstF ) {
double xcenter = mDft . getElementLayoutInfo ( dftConstF - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftConstF - > id ( ) ) . y ;
@ -141,7 +170,8 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateCONSTS ( std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftConstS ) {
void DftToGspnTransformator < ValueType > : : translateCONSTS (
std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftConstS ) {
double xcenter = mDft . getElementLayoutInfo ( dftConstS - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftConstS - > id ( ) ) . y ;
@ -160,19 +190,85 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateAND ( std : : shared_ptr < storm : : storage : : DFTAnd < ValueType > const > dftAnd ) {
void DftToGspnTransformator < ValueType > : : translateAND (
std : : shared_ptr < storm : : storage : : DFTAnd < ValueType > const > dftAnd ) {
double xcenter = mDft . getElementLayoutInfo ( dftAnd - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftAnd - > id ( ) ) . y ;
uint64_t failedPlace = addFailedPlace ( dftAnd , storm : : gspn : : LayoutInfo ( xcenter , ycenter - 3.0 ) ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftAnd ) , 0.0 , dftAnd - > name ( ) + STR_FAILING ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftAnd ) , 0.0 ,
dftAnd - > name ( ) + STR_FAILING ) ;
builder . setTransitionLayoutInfo ( tFailed , storm : : gspn : : LayoutInfo ( xcenter , ycenter + 3.0 ) ) ;
builder . addInhibitionArc ( failedPlace , tFailed ) ;
builder . addOutputArc ( tFailed , failedPlace ) ;
//TODO Make it smart
if ( dontCareElements . count ( dftAnd - > id ( ) ) ) {
if ( dftAnd - > id ( ) ! = mDft . getTopLevelIndex ( ) ) {
u_int64_t tDontCare = addDontcareTransition ( dftAnd ,
storm : : gspn : : LayoutInfo ( xcenter + 16.0 , ycenter ) ) ;
if ( ! mergedDCFailed ) {
uint64_t dontCarePlace = builder . addPlace ( defaultPriority , 0 ,
dftAnd - > name ( ) + STR_DONTCARE ) ;
builder . setPlaceLayoutInfo ( dontCarePlace ,
storm : : gspn : : LayoutInfo ( xcenter + 16.0 , ycenter + 4.0 ) ) ;
builder . addInhibitionArc ( dontCarePlace , tDontCare ) ;
builder . addOutputArc ( tDontCare , dontCarePlace ) ;
//Propagation
uint64_t propagationPlace = builder . addPlace ( defaultPriority , 0 , dftAnd - > name ( ) + " _prop " ) ;
builder . setPlaceLayoutInfo ( propagationPlace ,
storm : : gspn : : LayoutInfo ( xcenter + 12.0 , ycenter + 8.0 ) ) ;
uint64_t tPropagationFailed = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftAnd - > name ( ) + " _prop_fail " ) ;
builder . setTransitionLayoutInfo ( tPropagationFailed ,
storm : : gspn : : LayoutInfo ( xcenter + 10.0 , ycenter + 6.0 ) ) ;
builder . addInhibitionArc ( propagationPlace , tPropagationFailed ) ;
builder . addInputArc ( failedPlace , tPropagationFailed ) ;
builder . addOutputArc ( tPropagationFailed , failedPlace ) ;
builder . addOutputArc ( tPropagationFailed , propagationPlace ) ;
uint64_t tPropagationDontCare = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftAnd - > name ( ) +
" _prop_dontCare " ) ;
builder . setTransitionLayoutInfo ( tPropagationDontCare ,
storm : : gspn : : LayoutInfo ( xcenter + 14.0 , ycenter + 6.0 ) ) ;
builder . addInhibitionArc ( propagationPlace , tPropagationDontCare ) ;
builder . addInputArc ( dontCarePlace , tPropagationDontCare ) ;
builder . addOutputArc ( tPropagationDontCare , dontCarePlace ) ;
builder . addOutputArc ( tPropagationDontCare , propagationPlace ) ;
for ( auto const & child : dftAnd - > children ( ) ) {
if ( dontCareElements . count ( child - > id ( ) ) ) {
u_int64_t childDontCare = dontcareTransitions . at ( child - > id ( ) ) ;
builder . addInputArc ( propagationPlace , childDontCare ) ;
builder . addOutputArc ( childDontCare , propagationPlace ) ;
}
}
} else {
builder . addInhibitionArc ( failedPlace , tDontCare ) ;
builder . addOutputArc ( tDontCare , failedPlace ) ;
for ( auto const & child : dftAnd - > children ( ) ) {
if ( dontCareElements . count ( child - > id ( ) ) ) {
u_int64_t childDontCare = dontcareTransitions . at ( child - > id ( ) ) ;
builder . addInputArc ( failedPlace , childDontCare ) ;
builder . addOutputArc ( childDontCare , failedPlace ) ;
}
}
}
} else {
// If AND is TLE, simple failure propagation suffices
for ( auto const & child : dftAnd - > children ( ) ) {
if ( dontCareElements . count ( child - > id ( ) ) ) {
u_int64_t childDontCare = dontcareTransitions . at ( child - > id ( ) ) ;
builder . addInputArc ( failedPlace , childDontCare ) ;
builder . addOutputArc ( childDontCare , failedPlace ) ;
}
}
}
}
if ( ! smart | | mDft . isRepresentative ( dftAnd - > id ( ) ) ) {
uint64_t unavailablePlace = addUnavailablePlace ( dftAnd , storm : : gspn : : LayoutInfo ( xcenter + 6.0 , ycenter - 3.0 ) ) ;
uint64_t unavailablePlace = addUnavailablePlace ( dftAnd , storm : : gspn : : LayoutInfo ( xcenter + 6.0 ,
ycenter - 3.0 ) ) ;
builder . addOutputArc ( tFailed , unavailablePlace ) ;
}
@ -183,22 +279,87 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateOR ( std : : shared_ptr < storm : : storage : : DFTOr < ValueType > const > dftOr ) {
void DftToGspnTransformator < ValueType > : : translateOR (
std : : shared_ptr < storm : : storage : : DFTOr < ValueType > const > dftOr ) {
double xcenter = mDft . getElementLayoutInfo ( dftOr - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftOr - > id ( ) ) . y ;
uint64_t failedPlace = addFailedPlace ( dftOr , storm : : gspn : : LayoutInfo ( xcenter , ycenter - 3.0 ) ) ;
if ( dontCareElements . count ( dftOr - > id ( ) ) ) {
if ( dftOr - > id ( ) ! = mDft . getTopLevelIndex ( ) ) {
u_int64_t tDontCare = addDontcareTransition ( dftOr ,
storm : : gspn : : LayoutInfo ( xcenter + 16.0 , ycenter ) ) ;
if ( ! mergedDCFailed ) {
uint64_t dontCarePlace = builder . addPlace ( defaultPriority , 0 , dftOr - > name ( ) + STR_DONTCARE ) ;
builder . setPlaceLayoutInfo ( dontCarePlace ,
storm : : gspn : : LayoutInfo ( xcenter + 16.0 , ycenter + 4.0 ) ) ;
builder . addInhibitionArc ( dontCarePlace , tDontCare ) ;
builder . addOutputArc ( tDontCare , dontCarePlace ) ;
//Propagation
uint64_t propagationPlace = builder . addPlace ( defaultPriority , 0 , dftOr - > name ( ) + " _prop " ) ;
builder . setPlaceLayoutInfo ( propagationPlace ,
storm : : gspn : : LayoutInfo ( xcenter + 12.0 , ycenter + 8.0 ) ) ;
uint64_t tPropagationFailed = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftOr - > name ( ) + " _prop_fail " ) ;
builder . setTransitionLayoutInfo ( tPropagationFailed ,
storm : : gspn : : LayoutInfo ( xcenter + 10.0 , ycenter + 6.0 ) ) ;
builder . addInhibitionArc ( propagationPlace , tPropagationFailed ) ;
builder . addInputArc ( failedPlace , tPropagationFailed ) ;
builder . addOutputArc ( tPropagationFailed , failedPlace ) ;
builder . addOutputArc ( tPropagationFailed , propagationPlace ) ;
uint64_t tPropagationDontCare = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftOr - > name ( ) +
" _prop_dontCare " ) ;
builder . setTransitionLayoutInfo ( tPropagationDontCare ,
storm : : gspn : : LayoutInfo ( xcenter + 14.0 , ycenter + 6.0 ) ) ;
builder . addInhibitionArc ( propagationPlace , tPropagationDontCare ) ;
builder . addInputArc ( dontCarePlace , tPropagationDontCare ) ;
builder . addOutputArc ( tPropagationDontCare , dontCarePlace ) ;
builder . addOutputArc ( tPropagationDontCare , propagationPlace ) ;
for ( auto const & child : dftOr - > children ( ) ) {
if ( dontCareElements . count ( child - > id ( ) ) ) {
u_int64_t childDontCare = dontcareTransitions . at ( child - > id ( ) ) ;
builder . addInputArc ( propagationPlace , childDontCare ) ;
builder . addOutputArc ( childDontCare , propagationPlace ) ;
}
}
} else {
builder . addInhibitionArc ( failedPlace , tDontCare ) ;
builder . addOutputArc ( tDontCare , failedPlace ) ;
for ( auto const & child : dftOr - > children ( ) ) {
if ( dontCareElements . count ( child - > id ( ) ) ) {
u_int64_t childDontCare = dontcareTransitions . at ( child - > id ( ) ) ;
builder . addInputArc ( failedPlace , childDontCare ) ;
builder . addOutputArc ( childDontCare , failedPlace ) ;
}
}
}
} else {
// If OR is TLE, simple failure propagation suffices
for ( auto const & child : dftOr - > children ( ) ) {
if ( dontCareElements . count ( child - > id ( ) ) ) {
u_int64_t childDontCare = dontcareTransitions . at ( child - > id ( ) ) ;
builder . addInputArc ( failedPlace , childDontCare ) ;
builder . addOutputArc ( childDontCare , failedPlace ) ;
}
}
}
}
bool isRepresentative = mDft . isRepresentative ( dftOr - > id ( ) ) ;
uint64_t unavailablePlace = 0 ;
if ( ! smart | | isRepresentative ) {
unavailablePlace = addUnavailablePlace ( dftOr , storm : : gspn : : LayoutInfo ( xcenter + 6.0 , ycenter - 3.0 ) ) ;
unavailablePlace = addUnavailablePlace ( dftOr ,
storm : : gspn : : LayoutInfo ( xcenter + 6.0 , ycenter - 3.0 ) ) ;
}
for ( size_t i = 0 ; i < dftOr - > nrChildren ( ) ; + + i ) {
auto const & child = dftOr - > children ( ) . at ( i ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftOr ) , 0.0 , dftOr - > name ( ) + STR_FAILING + std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailed , storm : : gspn : : LayoutInfo ( xcenter - 5.0 + i * 3.0 , ycenter + 3.0 ) ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftOr ) , 0.0 ,
dftOr - > name ( ) + STR_FAILING + std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailed ,
storm : : gspn : : LayoutInfo ( xcenter - 5.0 + i * 3.0 , ycenter + 3.0 ) ) ;
builder . addInhibitionArc ( failedPlace , tFailed ) ;
builder . addOutputArc ( tFailed , failedPlace ) ;
if ( ! smart | | isRepresentative ) {
@ -210,7 +371,8 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateVOT ( std : : shared_ptr < storm : : storage : : DFTVot < ValueType > const > dftVot ) {
void DftToGspnTransformator < ValueType > : : translateVOT (
std : : shared_ptr < storm : : storage : : DFTVot < ValueType > const > dftVot ) {
// TODO: finish layouting
double xcenter = mDft . getElementLayoutInfo ( dftVot - > id ( ) ) . x ;
@ -218,12 +380,14 @@ namespace storm {
uint64_t failedPlace = addFailedPlace ( dftVot , storm : : gspn : : LayoutInfo ( xcenter , ycenter - 3.0 ) ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftVot ) , 0.0 , dftVot - > name ( ) + STR_FAILING ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftVot ) , 0.0 ,
dftVot - > name ( ) + STR_FAILING ) ;
builder . addOutputArc ( tFailed , failedPlace ) ;
builder . addInhibitionArc ( failedPlace , tFailed ) ;
if ( ! smart | | mDft . isRepresentative ( dftVot - > id ( ) ) ) {
uint64_t unavailablePlace = addUnavailablePlace ( dftVot , storm : : gspn : : LayoutInfo ( xcenter + 6.0 , ycenter - 3.0 ) ) ;
uint64_t unavailablePlace = addUnavailablePlace ( dftVot , storm : : gspn : : LayoutInfo ( xcenter + 6.0 ,
ycenter - 3.0 ) ) ;
builder . addOutputArc ( tFailed , unavailablePlace ) ;
}
@ -233,9 +397,12 @@ namespace storm {
for ( size_t i = 0 ; i < dftVot - > nrChildren ( ) ; + + i ) {
auto const & child = dftVot - > children ( ) . at ( i ) ;
uint64_t childNextPlace = builder . addPlace ( defaultCapacity , 1 , dftVot - > name ( ) + " _child_next " + std : : to_string ( i ) ) ;
uint64_t childNextPlace = builder . addPlace ( defaultCapacity , 1 ,
dftVot - > name ( ) + " _child_next " + std : : to_string ( i ) ) ;
uint64_t tCollect = builder . addImmediateTransition ( getFailPriority ( dftVot ) , 0.0 , dftVot - > name ( ) + " _child_collect " + std : : to_string ( i ) ) ;
uint64_t tCollect = builder . addImmediateTransition ( getFailPriority ( dftVot ) , 0.0 ,
dftVot - > name ( ) + " _child_collect " +
std : : to_string ( i ) ) ;
builder . addOutputArc ( tCollect , collectorPlace ) ;
builder . addInputArc ( childNextPlace , tCollect ) ;
builder . addInputArc ( getFailedPlace ( child ) , tCollect ) ;
@ -244,19 +411,22 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translatePAND ( std : : shared_ptr < storm : : storage : : DFTPand < ValueType > const > dftPand , bool inclusive ) {
void DftToGspnTransformator < ValueType > : : translatePAND (
std : : shared_ptr < storm : : storage : : DFTPand < ValueType > const > dftPand , bool inclusive ) {
double xcenter = mDft . getElementLayoutInfo ( dftPand - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftPand - > id ( ) ) . y ;
uint64_t failedPlace = addFailedPlace ( dftPand , storm : : gspn : : LayoutInfo ( xcenter + 3.0 , ycenter - 3.0 ) ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftPand ) , 0.0 , dftPand - > name ( ) + STR_FAILING ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftPand ) , 0.0 ,
dftPand - > name ( ) + STR_FAILING ) ;
builder . setTransitionLayoutInfo ( tFailed , storm : : gspn : : LayoutInfo ( xcenter + 3.0 , ycenter + 3.0 ) ) ;
builder . addInhibitionArc ( failedPlace , tFailed ) ;
builder . addOutputArc ( tFailed , failedPlace ) ;
if ( ! smart | | mDft . isRepresentative ( dftPand - > id ( ) ) ) {
uint64_t unavailablePlace = addUnavailablePlace ( dftPand , storm : : gspn : : LayoutInfo ( xcenter + 9.0 , ycenter - 3.0 ) ) ;
uint64_t unavailablePlace = addUnavailablePlace ( dftPand , storm : : gspn : : LayoutInfo ( xcenter + 9.0 ,
ycenter - 3.0 ) ) ;
builder . addOutputArc ( tFailed , unavailablePlace ) ;
}
@ -275,8 +445,11 @@ namespace storm {
// Transitions for fail-safe place
for ( uint64_t i = 1 ; i < dftPand - > nrChildren ( ) ; + + i ) {
auto const & child = dftPand - > children ( ) . at ( i ) ;
uint64_t tFailSafe = builder . addImmediateTransition ( getFailPriority ( dftPand ) , 0.0 , dftPand - > name ( ) + STR_FAILSAVING + std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailSafe , storm : : gspn : : LayoutInfo ( xcenter - 6.0 + i * 3.0 , ycenter + 3.0 ) ) ;
uint64_t tFailSafe = builder . addImmediateTransition ( getFailPriority ( dftPand ) , 0.0 ,
dftPand - > name ( ) + STR_FAILSAVING +
std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailSafe , storm : : gspn : : LayoutInfo ( xcenter - 6.0 + i * 3.0 ,
ycenter + 3.0 ) ) ;
builder . addInputArc ( getFailedPlace ( child ) , tFailSafe ) ;
builder . addOutputArc ( tFailSafe , getFailedPlace ( child ) ) ;
@ -298,8 +471,11 @@ namespace storm {
if ( i < dftPand - > nrChildren ( ) - 1 ) {
// Not last child
tFailSafeX = builder . addImmediateTransition ( getFailPriority ( dftPand ) , 0.0 , dftPand - > name ( ) + STR_FAILING + " _ " + std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailSafeX , storm : : gspn : : LayoutInfo ( xcenter - 3.0 , ycenter + 3.0 ) ) ;
tFailSafeX = builder . addImmediateTransition ( getFailPriority ( dftPand ) , 0.0 ,
dftPand - > name ( ) + STR_FAILING + " _ " +
std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailSafeX ,
storm : : gspn : : LayoutInfo ( xcenter - 3.0 , ycenter + 3.0 ) ) ;
} else {
// Last child
tFailSafeX = tFailed ;
@ -313,8 +489,10 @@ namespace storm {
if ( i < dftPand - > nrChildren ( ) - 1 ) {
// Add fail-safe X place
failSafeXPlace = builder . addPlace ( defaultCapacity , 0 , dftPand - > name ( ) + " _F_ " + std : : to_string ( i ) ) ;
builder . setPlaceLayoutInfo ( failSafeXPlace , storm : : gspn : : LayoutInfo ( xcenter - 3.0 + i * 3.0 , ycenter ) ) ;
failSafeXPlace = builder . addPlace ( defaultCapacity , 0 ,
dftPand - > name ( ) + " _F_ " + std : : to_string ( i ) ) ;
builder . setPlaceLayoutInfo ( failSafeXPlace ,
storm : : gspn : : LayoutInfo ( xcenter - 3.0 + i * 3.0 , ycenter ) ) ;
builder . addOutputArc ( tFailSafeX , failSafeXPlace ) ;
builder . addInhibitionArc ( failSafeXPlace , tFailSafeX ) ;
}
@ -323,13 +501,15 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translatePOR ( std : : shared_ptr < storm : : storage : : DFTPor < ValueType > const > dftPor , bool inclusive ) {
void DftToGspnTransformator < ValueType > : : translatePOR (
std : : shared_ptr < storm : : storage : : DFTPor < ValueType > const > dftPor , bool inclusive ) {
double xcenter = mDft . getElementLayoutInfo ( dftPor - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftPor - > id ( ) ) . y ;
uint64_t failedPlace = addFailedPlace ( dftPor , storm : : gspn : : LayoutInfo ( xcenter + 3.0 , ycenter - 3.0 ) ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftPor ) , 0.0 , dftPor - > name ( ) + STR_FAILING ) ;
uint64_t tFailed = builder . addImmediateTransition ( getFailPriority ( dftPor ) , 0.0 ,
dftPor - > name ( ) + STR_FAILING ) ;
builder . setTransitionLayoutInfo ( tFailed , storm : : gspn : : LayoutInfo ( xcenter + 3.0 , ycenter + 3.0 ) ) ;
builder . addOutputArc ( tFailed , failedPlace ) ;
builder . addInhibitionArc ( failedPlace , tFailed ) ;
@ -339,7 +519,8 @@ namespace storm {
builder . addOutputArc ( tFailed , getFailedPlace ( dftPor - > children ( ) . front ( ) ) ) ;
if ( ! smart | | mDft . isRepresentative ( dftPor - > id ( ) ) ) {
uint64_t unavailablePlace = addUnavailablePlace ( dftPor , storm : : gspn : : LayoutInfo ( xcenter + 9.0 , ycenter - 3.0 ) ) ;
uint64_t unavailablePlace = addUnavailablePlace ( dftPor , storm : : gspn : : LayoutInfo ( xcenter + 9.0 ,
ycenter - 3.0 ) ) ;
builder . addOutputArc ( tFailed , unavailablePlace ) ;
}
@ -353,8 +534,11 @@ namespace storm {
// For all children except the first one
for ( size_t i = 1 ; i < dftPor - > nrChildren ( ) ; + + i ) {
auto const & child = dftPor - > children ( ) . at ( i ) ;
uint64_t tFailSafe = builder . addImmediateTransition ( getFailPriority ( dftPor ) , 0.0 , dftPor - > name ( ) + STR_FAILSAVING + std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailSafe , storm : : gspn : : LayoutInfo ( xcenter - 3.0 + i * 3.0 , ycenter + 3.0 ) ) ;
uint64_t tFailSafe = builder . addImmediateTransition ( getFailPriority ( dftPor ) , 0.0 ,
dftPor - > name ( ) + STR_FAILSAVING +
std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tFailSafe , storm : : gspn : : LayoutInfo ( xcenter - 3.0 + i * 3.0 ,
ycenter + 3.0 ) ) ;
builder . addInputArc ( getFailedPlace ( child ) , tFailSafe ) ;
builder . addOutputArc ( tFailSafe , getFailedPlace ( child ) ) ;
@ -375,7 +559,8 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateSPARE ( std : : shared_ptr < storm : : storage : : DFTSpare < ValueType > const > dftSpare ) {
void DftToGspnTransformator < ValueType > : : translateSPARE (
std : : shared_ptr < storm : : storage : : DFTSpare < ValueType > const > dftSpare ) {
double xcenter = mDft . getElementLayoutInfo ( dftSpare - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftSpare - > id ( ) ) . y ;
@ -384,10 +569,12 @@ namespace storm {
bool isRepresentative = mDft . isRepresentative ( dftSpare - > id ( ) ) ;
uint64_t unavailablePlace = 0 ;
if ( ! smart | | isRepresentative ) {
unavailablePlace = addUnavailablePlace ( dftSpare , storm : : gspn : : LayoutInfo ( xcenter + 16.0 , ycenter - 8.0 ) ) ;
unavailablePlace = addUnavailablePlace ( dftSpare ,
storm : : gspn : : LayoutInfo ( xcenter + 16.0 , ycenter - 8.0 ) ) ;
}
uint64_t activePlace = builder . addPlace ( defaultCapacity , isActiveInitially ( dftSpare ) ? 1 : 0 , dftSpare - > name ( ) + STR_ACTIVATED ) ;
uint64_t activePlace = builder . addPlace ( defaultCapacity , isActiveInitially ( dftSpare ) ? 1 : 0 ,
dftSpare - > name ( ) + STR_ACTIVATED ) ;
builder . setPlaceLayoutInfo ( activePlace , storm : : gspn : : LayoutInfo ( xcenter - 20.0 , ycenter - 12.0 ) ) ;
activePlaces . emplace ( dftSpare - > id ( ) , activePlace ) ;
@ -396,8 +583,10 @@ namespace storm {
for ( size_t i = 0 ; i < dftSpare - > nrChildren ( ) ; + + i ) {
auto const & child = dftSpare - > children ( ) . at ( i ) ;
// Consider next child
size_t considerPlace = builder . addPlace ( defaultCapacity , i = = 0 ? 1 : 0 , dftSpare - > name ( ) + " _consider_ " + child - > name ( ) ) ;
builder . setPlaceLayoutInfo ( considerPlace , storm : : gspn : : LayoutInfo ( xcenter - 15.0 + i * 14.0 , ycenter - 8.0 ) ) ;
size_t considerPlace = builder . addPlace ( defaultCapacity , i = = 0 ? 1 : 0 ,
dftSpare - > name ( ) + " _consider_ " + child - > name ( ) ) ;
builder . setPlaceLayoutInfo ( considerPlace ,
storm : : gspn : : LayoutInfo ( xcenter - 15.0 + i * 14.0 , ycenter - 8.0 ) ) ;
if ( i > 0 ) {
// Set output transition from previous next_claim
@ -407,26 +596,36 @@ namespace storm {
}
// Cannot claim child
uint64_t tConsiderNext = builder . addImmediateTransition ( getFailPriority ( dftSpare ) , 0.0 , dftSpare - > name ( ) + " _cannot_claim_ " + child - > name ( ) ) ;
builder . setTransitionLayoutInfo ( tConsiderNext , storm : : gspn : : LayoutInfo ( xcenter - 7.0 + i * 14.0 , ycenter - 8.0 ) ) ;
uint64_t tConsiderNext = builder . addImmediateTransition ( getFailPriority ( dftSpare ) , 0.0 ,
dftSpare - > name ( ) + " _cannot_claim_ " +
child - > name ( ) ) ;
builder . setTransitionLayoutInfo ( tConsiderNext ,
storm : : gspn : : LayoutInfo ( xcenter - 7.0 + i * 14.0 , ycenter - 8.0 ) ) ;
builder . addInputArc ( considerPlace , tConsiderNext ) ;
builder . addInputArc ( unavailablePlaces . at ( child - > id ( ) ) , tConsiderNext ) ;
builder . addOutputArc ( tConsiderNext , unavailablePlaces . at ( child - > id ( ) ) ) ;
tNextConsiders . push_back ( tConsiderNext ) ;
// Claimed child
size_t claimedPlace = builder . addPlace ( defaultCapacity , 0 , dftSpare - > name ( ) + " _claimed_ " + child - > name ( ) ) ;
builder . setPlaceLayoutInfo ( claimedPlace , storm : : gspn : : LayoutInfo ( xcenter - 15.0 + i * 14.0 , ycenter + 5.0 ) ) ;
uint64_t tClaim = builder . addImmediateTransition ( getFailPriority ( dftSpare ) , 0.0 , dftSpare - > name ( ) + " _claim_ " + child - > name ( ) ) ;
builder . setTransitionLayoutInfo ( tClaim , storm : : gspn : : LayoutInfo ( xcenter - 15.0 + i * 14.0 , ycenter ) ) ;
size_t claimedPlace = builder . addPlace ( defaultCapacity , 0 ,
dftSpare - > name ( ) + " _claimed_ " + child - > name ( ) ) ;
builder . setPlaceLayoutInfo ( claimedPlace ,
storm : : gspn : : LayoutInfo ( xcenter - 15.0 + i * 14.0 , ycenter + 5.0 ) ) ;
uint64_t tClaim = builder . addImmediateTransition ( getFailPriority ( dftSpare ) , 0.0 ,
dftSpare - > name ( ) + " _claim_ " + child - > name ( ) ) ;
builder . setTransitionLayoutInfo ( tClaim ,
storm : : gspn : : LayoutInfo ( xcenter - 15.0 + i * 14.0 , ycenter ) ) ;
builder . addInhibitionArc ( unavailablePlaces . at ( child - > id ( ) ) , tClaim ) ;
builder . addInputArc ( considerPlace , tClaim ) ;
builder . addOutputArc ( tClaim , claimedPlace ) ;
builder . addOutputArc ( tClaim , unavailablePlaces . at ( child - > id ( ) ) ) ;
// Claim next
uint64_t tClaimNext = builder . addImmediateTransition ( getFailPriority ( dftSpare ) , 0.0 , dftSpare - > name ( ) + " _next_claim_ " + std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tClaimNext , storm : : gspn : : LayoutInfo ( xcenter - 7.0 + i * 14.0 , ycenter + 5.0 ) ) ;
uint64_t tClaimNext = builder . addImmediateTransition ( getFailPriority ( dftSpare ) , 0.0 ,
dftSpare - > name ( ) + " _next_claim_ " +
std : : to_string ( i ) ) ;
builder . setTransitionLayoutInfo ( tClaimNext ,
storm : : gspn : : LayoutInfo ( xcenter - 7.0 + i * 14.0 , ycenter + 5.0 ) ) ;
builder . addInputArc ( claimedPlace , tClaimNext ) ;
builder . addInputArc ( getFailedPlace ( child ) , tClaimNext ) ;
builder . addOutputArc ( tClaimNext , getFailedPlace ( child ) ) ;
@ -435,8 +634,12 @@ namespace storm {
// Activate all elements in spare module
uint64_t l = 0 ;
for ( uint64_t k : mDft . module ( child - > id ( ) ) ) {
uint64_t tActivate = builder . addImmediateTransition ( defaultPriority , 0.0 , dftSpare - > name ( ) + " _activate_ " + std : : to_string ( i ) + " _ " + std : : to_string ( k ) ) ;
builder . setTransitionLayoutInfo ( tActivate , storm : : gspn : : LayoutInfo ( xcenter - 18.0 + ( i + l ) * 3 , ycenter - 12.0 ) ) ;
uint64_t tActivate = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftSpare - > name ( ) + " _activate_ " +
std : : to_string ( i ) + " _ " +
std : : to_string ( k ) ) ;
builder . setTransitionLayoutInfo ( tActivate , storm : : gspn : : LayoutInfo ( xcenter - 18.0 + ( i + l ) * 3 ,
ycenter - 12.0 ) ) ;
builder . addInhibitionArc ( activePlaces . at ( k ) , tActivate ) ;
builder . addInputArc ( claimedPlace , tActivate ) ;
builder . addInputArc ( activePlace , tActivate ) ;
@ -458,7 +661,8 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translatePDEP ( std : : shared_ptr < storm : : storage : : DFTDependency < ValueType > const > dftDependency ) {
void DftToGspnTransformator < ValueType > : : translatePDEP (
std : : shared_ptr < storm : : storage : : DFTDependency < ValueType > const > dftDependency ) {
double xcenter = mDft . getElementLayoutInfo ( dftDependency - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftDependency - > id ( ) ) . y ;
@ -476,7 +680,8 @@ namespace storm {
uint64_t coinPlace = builder . addPlace ( defaultCapacity , 1 , dftDependency - > name ( ) + " _coin " ) ;
builder . setPlaceLayoutInfo ( coinPlace , storm : : gspn : : LayoutInfo ( xcenter - 5.0 , ycenter + 2.0 ) ) ;
uint64_t tStartFlip = builder . addImmediateTransition ( defaultPriority , 0.0 , dftDependency - > name ( ) + " _start_flip " ) ;
uint64_t tStartFlip = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftDependency - > name ( ) + " _start_flip " ) ;
builder . addInputArc ( coinPlace , tStartFlip ) ;
builder . addInputArc ( getFailedPlace ( dftDependency - > triggerEvent ( ) ) , tStartFlip ) ;
builder . addOutputArc ( tStartFlip , getFailedPlace ( dftDependency - > triggerEvent ( ) ) ) ;
@ -485,11 +690,14 @@ namespace storm {
builder . setPlaceLayoutInfo ( flipPlace , storm : : gspn : : LayoutInfo ( xcenter - 2.0 , ycenter + 2.0 ) ) ;
builder . addOutputArc ( tStartFlip , flipPlace ) ;
uint64_t tWinFlip = builder . addImmediateTransition ( defaultPriority , dftDependency - > probability ( ) , " _win_flip " ) ;
uint64_t tWinFlip = builder . addImmediateTransition ( defaultPriority , dftDependency - > probability ( ) ,
" _win_flip " ) ;
builder . addInputArc ( flipPlace , tWinFlip ) ;
builder . addOutputArc ( tWinFlip , forwardPlace ) ;
uint64_t tLooseFlip = builder . addImmediateTransition ( defaultPriority , storm : : utility : : one < ValueType > ( ) - dftDependency - > probability ( ) , " _loose_flip " ) ;
uint64_t tLooseFlip = builder . addImmediateTransition ( defaultPriority ,
storm : : utility : : one < ValueType > ( ) -
dftDependency - > probability ( ) , " _loose_flip " ) ;
builder . addInputArc ( flipPlace , tLooseFlip ) ;
} else {
// FDEP
@ -497,7 +705,9 @@ namespace storm {
}
for ( auto const & child : dftDependency - > dependentEvents ( ) ) {
uint64_t tForwardFailure = builder . addImmediateTransition ( defaultPriority , 0.0 , dftDependency - > name ( ) + " _propagate_ " + child - > name ( ) ) ;
uint64_t tForwardFailure = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftDependency - > name ( ) + " _propagate_ " +
child - > name ( ) ) ;
builder . addInputArc ( forwardPlace , tForwardFailure ) ;
builder . addOutputArc ( tForwardFailure , forwardPlace ) ;
builder . addOutputArc ( tForwardFailure , getFailedPlace ( child ) ) ;
@ -512,8 +722,10 @@ namespace storm {
}
template < typename ValueType >
void DftToGspnTransformator < ValueType > : : translateSeq ( std : : shared_ptr < storm : : storage : : DFTSeq < ValueType > const > dftSeq ) {
STORM_LOG_THROW ( dftSeq - > allChildrenBEs ( ) , storm : : exceptions : : NotImplementedException , " Sequence enforcers with gates as children are currently not supported " ) ;
void DftToGspnTransformator < ValueType > : : translateSeq (
std : : shared_ptr < storm : : storage : : DFTSeq < ValueType > const > dftSeq ) {
STORM_LOG_THROW ( dftSeq - > allChildrenBEs ( ) , storm : : exceptions : : NotImplementedException ,
" Sequence enforcers with gates as children are currently not supported " ) ;
double xcenter = mDft . getElementLayoutInfo ( dftSeq - > id ( ) ) . x ;
double ycenter = mDft . getElementLayoutInfo ( dftSeq - > id ( ) ) . y ;
@ -527,14 +739,18 @@ namespace storm {
for ( size_t i = 0 ; i < dftSeq - > nrChildren ( ) ; + + i ) {
auto const & child = dftSeq - > children ( ) . at ( i ) ;
nextPlace = builder . addPlace ( defaultCapacity , i = = 0 ? 1 : 0 , dftSeq - > name ( ) + " _next_ " + child - > name ( ) ) ;
builder . setPlaceLayoutInfo ( nextPlace , storm : : gspn : : LayoutInfo ( xcenter - 5.0 + i * 3.0 , ycenter - 3.0 ) ) ;
nextPlace = builder . addPlace ( defaultCapacity , i = = 0 ? 1 : 0 ,
dftSeq - > name ( ) + " _next_ " + child - > name ( ) ) ;
builder . setPlaceLayoutInfo ( nextPlace ,
storm : : gspn : : LayoutInfo ( xcenter - 5.0 + i * 3.0 , ycenter - 3.0 ) ) ;
if ( i > 0 ) {
builder . addOutputArc ( tEnable , nextPlace ) ;
}
tEnable = builder . addImmediateTransition ( defaultPriority , 0.0 , dftSeq - > name ( ) + " _unblock_ " + child - > name ( ) ) ;
builder . setTransitionLayoutInfo ( tEnable , storm : : gspn : : LayoutInfo ( xcenter - 5.0 + i * 3.0 , ycenter + 3.0 ) ) ;
tEnable = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftSeq - > name ( ) + " _unblock_ " + child - > name ( ) ) ;
builder . setTransitionLayoutInfo ( tEnable ,
storm : : gspn : : LayoutInfo ( xcenter - 5.0 + i * 3.0 , ycenter + 3.0 ) ) ;
builder . addInputArc ( nextPlace , tEnable ) ;
builder . addInputArc ( disabledPlaces . at ( child - > id ( ) ) , tEnable ) ;
if ( i > 0 ) {
@ -546,9 +762,12 @@ namespace storm {
template < typename ValueType >
uint64_t
DftToGspnTransformator < ValueType > : : addFailedPlace ( std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement , storm : : gspn : : LayoutInfo const & layoutInfo ,
bool initialFailed ) {
uint64_t failedPlace = builder . addPlace ( defaultCapacity , initialFailed ? 1 : 0 , dftElement - > name ( ) + STR_FAILED ) ;
DftToGspnTransformator < ValueType > : : addFailedPlace (
std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ,
storm : : gspn : : LayoutInfo const & layoutInfo ,
bool initialFailed ) {
uint64_t failedPlace = builder . addPlace ( defaultCapacity , initialFailed ? 1 : 0 ,
dftElement - > name ( ) + STR_FAILED ) ;
assert ( failedPlaces . size ( ) = = dftElement - > id ( ) ) ;
failedPlaces . push_back ( failedPlace ) ;
builder . setPlaceLayoutInfo ( failedPlace , layoutInfo ) ;
@ -557,9 +776,11 @@ namespace storm {
template < typename ValueType >
uint64_t DftToGspnTransformator < ValueType > : : addUnavailablePlace ( std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ,
storm : : gspn : : LayoutInfo const & layoutInfo , bool initialAvailable ) {
uint64_t unavailablePlace = builder . addPlace ( defaultCapacity , initialAvailable ? 0 : 1 , dftElement - > name ( ) + " _unavail " ) ;
uint64_t DftToGspnTransformator < ValueType > : : addUnavailablePlace (
std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ,
storm : : gspn : : LayoutInfo const & layoutInfo , bool initialAvailable ) {
uint64_t unavailablePlace = builder . addPlace ( defaultCapacity , initialAvailable ? 0 : 1 ,
dftElement - > name ( ) + " _unavail " ) ;
unavailablePlaces . emplace ( dftElement - > id ( ) , unavailablePlace ) ;
builder . setPlaceLayoutInfo ( unavailablePlace , layoutInfo ) ;
return unavailablePlace ;
@ -567,21 +788,39 @@ namespace storm {
template < typename ValueType >
uint64_t
DftToGspnTransformator < ValueType > : : addDisabledPlace ( std : : shared_ptr < const storm : : storage : : DFTBE < ValueType > > dftBe , storm : : gspn : : LayoutInfo const & layoutInfo ) {
uint64_t disabledPlace = builder . addPlace ( dftBe - > nrRestrictions ( ) , dftBe - > nrRestrictions ( ) , dftBe - > name ( ) + " _dabled " ) ;
DftToGspnTransformator < ValueType > : : addDisabledPlace (
std : : shared_ptr < const storm : : storage : : DFTBE < ValueType > > dftBe ,
storm : : gspn : : LayoutInfo const & layoutInfo ) {
uint64_t disabledPlace = builder . addPlace ( dftBe - > nrRestrictions ( ) , dftBe - > nrRestrictions ( ) ,
dftBe - > name ( ) + " _dabled " ) ;
disabledPlaces . emplace ( dftBe - > id ( ) , disabledPlace ) ;
builder . setPlaceLayoutInfo ( disabledPlace , layoutInfo ) ;
return disabledPlace ;
}
template < typename ValueType >
bool DftToGspnTransformator < ValueType > : : isActiveInitially ( std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ) {
uint64_t
DftToGspnTransformator < ValueType > : : addDontcareTransition (
std : : shared_ptr < const storm : : storage : : DFTElement < ValueType > > dftElement ,
storm : : gspn : : LayoutInfo const & layoutInfo ) {
uint64_t dontcareTransition = builder . addImmediateTransition ( defaultPriority , 0.0 ,
dftElement - > name ( ) + STR_DONTCARE +
" _transition " ) ;
dontcareTransitions . emplace ( dftElement - > id ( ) , dontcareTransition ) ;
builder . setTransitionLayoutInfo ( dontcareTransition , layoutInfo ) ;
return dontcareTransition ;
}
template < typename ValueType >
bool DftToGspnTransformator < ValueType > : : isActiveInitially (
std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ) {
// If element is in the top module, return true.
return ! mDft . hasRepresentant ( dftElement - > id ( ) ) ;
}
template < typename ValueType >
uint64_t DftToGspnTransformator < ValueType > : : getFailPriority ( std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ) {
uint64_t DftToGspnTransformator < ValueType > : : getFailPriority (
std : : shared_ptr < storm : : storage : : DFTElement < ValueType > const > dftElement ) {
// Temporariliy use one priority for all
return defaultPriority ;
//return mDft.maxRank() - dftElement->rank() + 2;