// **************************************************************************
//
//    eses                   eses
//   eses                     eses
//  eses    eseses  esesese    eses   Embedded Systems Group
//  ese    ese  ese ese         ese
//  ese    eseseses eseseses    ese   Department of Computer Science
//  eses   eses          ese   eses
//   eses   eseses  eseseses  eses    University of Kaiserslautern
//    eses                   eses
//
// **************************************************************************



macro N = ?, noH = ?, get = ?, dif = ?;

module Reset(
    [N]real h, off, x, [N][N]real ? a  
) { 
    int y; y = 0;
    while(y != noH) { 
        choose(i = 0..N-1) { 
            choose(j = 0..N-1) {
                if(((x[j]-x[i]) >= dif[i]) & (h[j] == 1.0) & (h[i] == 0.0) & (x[i] <= get[i]) & (a[j][i] == 1.0)) { 
                    next(h[j]) = 0.0 ; next(off[j]) = 0.0 ; 
                    next(h[i]) = 1.0 ; next(off[i]) = 0.0 ; 
                    next(y) = y + 1 ;
                } 
                flow{}until(true);
            }    
        } 
        next(y) = 0 ; 
    }
}