11 #if defined __cplusplus    16 static double ptwXY_mod2( 
double v, 
double m, 
int pythonMod );
    19     int level, 
int isNAN1, 
int isNAN2 );
    33     for( i = 0, p = ptwXY->
points; i < nonOverflowLength; i++, p++ ) p->
y = slope * p->
y + offset;
    34     for( o = overflowHeader->
next; o != overflowHeader; o = o->
next ) o->
point.
y = slope * o->
point.
y + offset; 
    68         for( i = 0, p = ptwXY->
points; i < nonOverflowLength; i++, p++ ) p->
y = value / p->
y;
    69         for( o = overflowHeader->
next; o != overflowHeader; o = o->
next ) o->
point.
y = value / o->
point.
y; 
    85     for( i = 0, p = ptwXY->
points; i < nonOverflowLength; i++, p++ ) p->
y = 
ptwXY_mod2( p->
y, m, pythonMod );
    94     double r = std::fmod( std::fabs( v ), std::fabs( m ) );
    97         if( ( v * m ) < 0. ) r = std::fabs( m ) - std::fabs( r );
    98         if( m < 0. ) r *= -1.; }
   100         if( v < 0. ) r *= -1.;
   124     if( ( n = 
ptwXY_union( ptwXY1, ptwXY2, status, unionOptions ) ) != NULL ) {
   125         for( i = 0, p = n->
points; i < n->length; i++, p++ ) {
   127             p->
y = v1 * p->
y + v2 * y + v1v2 * y * p->
y;
   142     if( ptwXY1->
length == 0 ) {
   144     else if( ptwXY2->
length == 0 ) {
   158     if( ptwXY1->
length == 0 ) {
   161     else if( ptwXY2->
length == 0 ) {
   175     if( ptwXY1->
length == 0 ) {
   177     else if( ptwXY2->
length == 0 ) {
   192     double x1, 
y1, 
x2, 
y2, u1, u2, v1, v2, xz1 = 0, xz2 = 0, 
x;
   197     if( ( n = 
ptwXY_mul_ptwXY( ptwXY1, ptwXY2, status ) ) == NULL ) 
return( n );
   203         for( i = length - 1; i >= 0; i-- ) {             
   211                 xz1 = ( u1 * x2 - u2 * 
x1 ) / ( u1 - u2 );
   216                 xz2 = ( v1 * x2 - v2 * 
x1 ) / ( v1 - v2 );
   221                 x = 0.5 * ( xz1 + xz2 );
   233         for( i = n->
length - 2; i >= 0; i-- ) {             
   254     double u1, u2, v1, v2, 
x, 
y, yp, dx, 
a1, 
a2;
   263     if( ( u1 == u2 ) || ( v1 == v2 ) ) 
return( 
nfu_Okay );
   265     if( y1 == 0 ) a1 = 0.;                                  
   267     if( y2 == 0 ) a2 = 0.;                                  
   268     if( ( a1 == 0. ) || ( a2 == 0. ) ) {                    
   269         x = 0.5 * ( x1 + 
x2 ); }
   271         if( ( a1 * a2 < 0. ) ) 
return( 
nfu_Okay );  
   272         a1 = std::sqrt( std::fabs( a1 ) );
   273         a2 = std::sqrt( std::fabs( a2 ) );
   274         x = ( a2 * x1 + a1 * 
x2 ) / ( a2 + a1 );
   277     yp = ( u1 * v1 * ( x2 - 
x ) + u2 * v2 * ( x - x1 ) ) / dx;
   278     y = ( u1 * ( x2 - 
x ) + u2 * ( x - x1 ) ) * ( v1 * ( x2 - x ) + v2 * ( x - 
x1 ) ) / ( dx * dx );
   279     if( std::fabs( y - yp ) < std::fabs( y * n->
accuracy ) ) 
return( 
nfu_Okay );
   291     int64_t i, j, k, zeros = 0, length, iYs;
   292     double x1, 
x2, 
y1, 
y2, u1, u2, v1, v2, 
y, xz, nan = 
nfu_getNAN( ), s1, s2;
   306         for( i = 0, p = n->
points; i < n->length; i++, p++ ) {
   326                     if( i < ( n->
length - 1 ) ) {
   339                     p->
y = ( y1 + 
y2 ) / iYs; 
   356             for( i = length - 1; i >= 0; i-- ) {             
   363                     xz = ( u1 * x2 - u2 * 
x1 ) / ( u1 - u2 );
   372                     xz = ( v1 * x2 - v2 * 
x1 ) / ( v1 - v2 );
   382             for( i = n->
length - 2; i >= 0; i-- ) {             
   386                 if( !isNAN1 || !isNAN2 ) {
   413                     for( k = i + 1, j = i; k < n->
length; k++ ) {
   433         int level, 
int isNAN1, 
int isNAN2 ) {
   436     double u1, u2, v1, v2, 
v, 
x, 
y, yp, dx, 
a1, 
a2;
   446         x = 0.5 * ( x1 + 
x2 );
   451         x = 0.5 * ( x1 + 
x2 );
   456         if( ( u1 == u2 ) || ( v1 == v2 ) ) 
return( 
nfu_Okay );
   457         if( ( y1 == 0. ) || ( y2 == 0. ) ) {                    
   458             x = 0.5 * ( x1 + 
x2 ); }
   460             if( ( u1 * u2 < 0. ) ) 
return( 
nfu_Okay );  
   461             a1 = std::sqrt( std::fabs( u1 ) );
   462             a2 = std::sqrt( std::fabs( u2 ) );
   463             x = ( a2 * x1 + a1 * 
x2 ) / ( a2 + a1 );
   466         v = v1 * ( x2 - 
x ) + v2 * ( x - x1 );
   467         if( ( v1 == 0. ) || ( v2 == 0. ) || ( v == 0. ) ) 
return( 
nfu_Okay );     
   468         yp = ( u1 / v1 * ( x2 - 
x ) + u2 / v2 * ( x - x1 ) ) / dx;
   469         y = ( u1 * ( x2 - 
x ) + u2 * ( x - x1 ) ) / v;
   470         if( std::fabs( y - yp ) < std::fabs( y * n->
accuracy ) ) 
return( 
nfu_Okay );
   491         for( i = 0, p = n->
points; i < n->length; i++, p++ ) {
   494                 if( ( safeDivide ) && ( p->
y == 0 ) ) {
   520 #if defined __cplusplus 
#define ClosestAllowXFactor
 
nfu_status ptwXY_getValueAtX(ptwXYPoints *ptwXY, double x, double *y)
 
ptwXY_interpolation interpolation
 
static ptwXYPoints * ptwXY_div_ptwXY_forFlats(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int safeDivide)
 
nfu_status ptwXY_neg(ptwXYPoints *ptwXY)
 
ptwXYPoints * ptwXY_clone(ptwXYPoints *ptwXY, nfu_status *status)
 
nfu_status ptwXY_add_double(ptwXYPoints *ptwXY, double value)
 
ptwXYPoints * ptwXY_mul2_ptwXY(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status)
 
nfu_status ptwXY_sub_fromDouble(ptwXYPoints *ptwXY, double value)
 
static double ptwXY_mod2(double v, double m, int pythonMod)
 
nfu_status ptwXY_mul_double(ptwXYPoints *ptwXY, double value)
 
nfu_status ptwXY_sub_doubleFrom(ptwXYPoints *ptwXY, double value)
 
ptwXYPoints * ptwXY_free(ptwXYPoints *ptwXY)
 
nfu_status ptwXY_setValueAtX(ptwXYPoints *ptwXY, double x, double y)
 
int64_t ptwXY_getNonOverflowLength(ptwXYPoints const *ptwXY)
 
ptwXYPoints * ptwXY_union(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int unionOptions)
 
nfu_status ptwXY_div_doubleFrom(ptwXYPoints *ptwXY, double value)
 
enum nfu_status_e nfu_status
 
static nfu_status ptwXY_getValueAtX_ignore_XOutsideDomainError(ptwXYPoints *ptwXY1, double x, double *y)
 
ptwXYPoints * ptwXY_mul_ptwXY(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status)
 
static nfu_status ptwXY_div_s_ptwXY(ptwXYPoints *n, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double x1, double y1, double x2, double y2, int level, int isNAN1, int isNAN2)
 
nfu_status ptwXY_div_fromDouble(ptwXYPoints *ptwXY, double value)
 
nfu_status ptwXY_areDomainsMutual(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2)
 
ptwXYPoints * ptwXY_add_ptwXY(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status)
 
#define ptwXY_union_mergeClosePoints
 
struct ptwXYOverflowPoint_s * next
 
nfu_status ptwXY_simpleCoalescePoints(ptwXYPoints *ptwXY)
 
void ptwXY_update_biSectionMax(ptwXYPoints *ptwXY1, double oldLength)
 
nfu_status ptwXY_slopeOffset(ptwXYPoints *ptwXY, double slope, double offset)
 
nfu_status ptwXY_getSlopeAtX(ptwXYPoints *ptwXY, double x, const char side, double *slope)
 
ptwXYOverflowPoint overflowHeader
 
ptwXYPoints * ptwXY_sub_ptwXY(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status)
 
nfu_status ptwXY_mod(ptwXYPoints *ptwXY, double m, int pythonMod)
 
static nfu_status ptwXY_mul2_s_ptwXY(ptwXYPoints *n, ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double x1, double y1, double x2, double y2, int level)
 
ptwXYPoints * ptwXY_binary_ptwXY(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, double v1, double v2, double v1v2, nfu_status *status)
 
ptwXYPoints * ptwXY_div_ptwXY(ptwXYPoints *ptwXY1, ptwXYPoints *ptwXY2, nfu_status *status, int safeDivide)