@@ -407,7 +407,7 @@ typedef struct {
407407 size_t size ;
408408} addTargetEventTimesRes ;
409409
410- static inline size_t findNextEvent (size_t i , double * time , size_t n , double xabstol )
410+ static size_t findNextEvent (size_t i , double * time , size_t n , double xabstol )
411411{
412412 for (i ; i < n ; i ++ ) {
413413 if (almostEqualRelativeAndAbs (time [i - 1 ],time [i ],0 ,xabstol ) || (i < n - 1 && almostEqualRelativeAndAbs (time [i ],time [i + 1 ],0 ,xabstol ))) return i ;
@@ -508,10 +508,14 @@ static addTargetEventTimesRes mergeTimelines(addTargetEventTimesRes ref, addTarg
508508
509509static addTargetEventTimesRes removeUneventfulPoints (addTargetEventTimesRes in , int removeNonEvents , double reltol , double xabstol )
510510{
511- int i ,iter = 0 ;
511+ int i ,iter , niter = 0 ;
512512 addTargetEventTimesRes res ;
513513 res .values = (double * ) GC_malloc_atomic (in .size * sizeof (double ));
514514 res .time = (double * ) GC_malloc_atomic (in .size * sizeof (double ));
515+ // printf("niter x: %ld\n", in.size);
516+ tail :
517+ iter = 0 ;
518+ niter ++ ;
515519 /* Don't remove first point */
516520 res .values [0 ] = in .values [0 ];
517521 res .time [0 ] = in .time [0 ];
@@ -522,8 +526,8 @@ static addTargetEventTimesRes removeUneventfulPoints(addTargetEventTimesRes in,
522526 if (in .values [i ] == in .values [i - 1 ] && isEvent ) {
523527 continue ;
524528 }
525- double x0 = res .values [res .size - 1 ];
526- double y0 = res .time [res .size - 1 ];
529+ double x0 = res .time [res .size - 1 ];
530+ double y0 = res .values [res .size - 1 ];
527531 double x = in .time [i ];
528532 double y = in .values [i ];
529533 double x1 = in .time [i + 1 ];
@@ -551,14 +555,16 @@ static addTargetEventTimesRes removeUneventfulPoints(addTargetEventTimesRes in,
551555 res .size ++ ;
552556 }
553557 if (iter ) {
554- return removeUneventfulPoints (res ,removeNonEvents ,reltol / 4.0 ,xabstol );
558+ in = res ;
559+ reltol /= 10.0 ;
560+ goto tail ;
555561 } else {
556562 return res ;
557563 }
558564}
559565
560566/* Adds a relative tolerance compared to the reference signal. Overwrites the target values vector. */
561- static inline void addRelativeTolerance (double * targetValues , double * sourceValues , size_t length , double reltol , double abstol , int direction )
567+ static void addRelativeTolerance (double * targetValues , double * sourceValues , size_t length , double reltol , double abstol , int direction )
562568{
563569 int i ;
564570 if (direction > 0 ) {
0 commit comments