17static int ptwX_sort_descending(
void const *p1,
void const *p2 );
18static int ptwX_sort_ascending(
void const *p1,
void const *p2 );
77 if( size < length ) size = length;
78 if( ( ptwX =
ptwX_new( smr, size ) ) == NULL ) {
81 for( i1 = 0, p1 = ptwX->
points; i1 < length; i1++, p1++ ) *p1 = slope * i1 +
offset;
125 int64_t i1, i2, length;
137 if( index2 < index1 ) {
139 (
int) index1, (
int) index2 );
142 if( index2 > ptwX->
length ) {
144 (
int) index2, (
int) ptwX->
length );
148 length = ( index2 - index1 );
149 if( ( n1 =
ptwX_new( smr, length ) ) == NULL ) {
153 for( i2 = 0, i1 = index1; i1 < index2; i1++, i2++ ) n1->
points[i2] = ptwX->
points[i1];
169 if( size < ptwX->length ) size = ptwX->
length;
174 else if( ( ptwX->
allocatedSize > 2 * size ) || forceSmallerResize ) {
178 if( ptwX->
points == NULL ) {
249 for( i = 0; i < length; i++ ) ptwX->
points[i] = xs[i];
264 if( ( i1 < 0 ) || ( i1 > i2 ) || ( i2 > ptwX->
length ) ) {
266 (
int) i1, (
int) i2, (
int) ptwX->
length );
270 int64_t n1 = ptwX->
length - ( i2 - i1 );
287 if( ( index < 0 ) || ( index >= ptwX->
length ) ) {
289 (
int) index, (
int) ptwX->
length );
292 return( &(ptwX->
points[index]) );
299 return( ptwX->
points[index] );
311 if( ( index < 0 ) || ( index > ptwX->
length ) ) {
313 (
int) index, (
int) ptwX->
length );
332 int64_t i1, i2, n1p, size = n1 + ptwX->
length;
341 if( ( index < 0 ) || ( index > ptwX->
length ) ) {
343 (
int) index, (
int) ptwX->
length );
354 for( i1 = ptwX->
length - 1, i2 = size - 1, n1p = ptwX->
length - index; n1p > 0; i1--, i2--, n1p-- )
356 for( i1 = 0, i2 = index; i1 < n1; i1++, i2++ ) ptwX->
points[i2] = xs[i1];
379 if( ( x1 = ptwX->
points[0] ) < ( x2 = ptwX->
points[1] ) ) {
380 for( i1 = 2; i1 < ptwX->
length; i1++ ) {
390 for( i1 = 1; i1 < ptwX->
length; i1++ ) {
406 int64_t numberConverted;
414 if( ( ptwX =
ptwX_create( smr, numberConverted, numberConverted, doublePtr ) ) == NULL )
433 for( i1 = 0; i1 < ptwX->
length; i1++ ) {
434 if( ptwX->
points[i1] == value ) ++count;
443 int64_t i1, i2 = ptwX->
length - 1, n1 = ptwX->
length / 2;
451 for( i1 = 0; i1 < n1; i1++, i2-- ) {
463 int (*cmp)(
void const *,
void const * ) = ptwX_sort_descending;
477static int ptwX_sort_descending(
void const *p1,
void const *p2 ) {
return( -ptwX_sort_ascending( p1, p2 ) ); }
478static int ptwX_sort_ascending(
void const *p1,
void const *p2 ) {
480 double *d1 = (
double *) p1, *d2 = (
double *) p2;
482 if( *d1 < *d2 )
return( -1 );
483 if( *d1 == *d2 )
return( 0 );
497 double value, int64_t *index,
double *difference ) {
512 *difference = value - ptwX->
points[i1];
513 for( i1++; i1 < i2; i1++ ) {
514 d1 = value - ptwX->
points[i1];
515 if( fabs( *difference ) > fabs( d1 ) ) {
530 int64_t i1, i2, n1 = 0;
544 for( i1 = 0; i1 < ptwX->
length; i1++ ) {
546 for( i2 = 0, p2 = ptwX2->
points; i2 < ptwX2->length; i2++, p2++ ) {
547 if( *p2 == x1 )
break;
549 if( i2 == ptwX2->
length ) {
557 if( ( ptwX2 =
ptwX_clone( smr, ptwX ) ) == NULL ) {
569 for( i1 = 1; i1 < ptwX2->
length; i1++ ) {
570 if( x1 != ptwX2->
points[i1] ) {
598 for( i1 = 0, p1 = ptwX->
points; i1 < ptwX->length; i1++, p1++ ) *p1 = fabs( *p1 );
641 for( i1 = 0, p1 = ptwX->
points; i1 < ptwX->length; i1++, p1++ ) *p1 = slope * *p1 +
offset;
663 "length of source1 = %d not the same as length of source2 = %d.", (
int) ptwX1->
length, (
int) ptwX2->
length );
667 for( i1 = 0; i1 < ptwX1->
length; i1++, p1++, p2++ ) *p1 += *p2;
689 "length of source1 = %d not the same as length of source2 = %d.", (
int) ptwX1->
length, (
int) ptwX2->
length );
693 for( i1 = 0; i1 < ptwX1->
length; i1++, p1++, p2++ ) *p1 -= *p2;
701 int64_t i1, n1 = ptwX->
length;
702 *rangeMin = *rangeMax = 0;
703 double *p1 = ptwX->
points;
711 *rangeMin = *rangeMax = *(p1++);
712 for( i1 = 1; i1 < n1; ++i1, ++p1 ) {
713 if( *p1 < *rangeMin ) *rangeMin = *p1;
714 if( *p1 > *rangeMax ) *rangeMax = *p1;
724 int64_t i1, n1 = ptwX1->
length, n2 = ptwX2->
length, nn = n1;
737 if( nn > n2 ) nn = n2;
738 for( i1 = 0; i1 < nn; i1++, p1++, p2++ ) {
739 if( *p1 == *p2 )
continue;
741 if( *p1 < *p2 ) *comparison = -1;
760 int64_t i1, n1 = ptwX1->
length;
776 "length of source1 = %d not the same as length of source2 = %d.", (
int) ptwX1->
length, (
int) ptwX2->
length );
782 for( i1 = 0; i1 < n1; i1++, p1++, p2++ ) {
783 larger = fabs( *p1 );
784 if( fabs( *p2 ) > larger ) larger = fabs( *p2 );
785 if( fabs( *p2 - *p1 ) >
epsilon * larger )
break;
G4double epsilon(G4double density, G4double temperature)
G4ThreadLocal T * G4GeomSplitter< T >::offset
double * nfu_stringToListOfDoubles(statusMessageReporting *smr, char const *str, char sep, int64_t *numberConverted, char **endCharacter, int useSystem_strtod)
enum nfu_status_e nfu_status
@ ptwX_sort_order_descending
@ ptwX_sort_order_ascending
struct ptwXPoints_s ptwXPoints
nfu_status ptwX_reallocatePoints(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t size, int forceSmallerResize)
ptwXPoints * ptwX_clone(statusMessageReporting *smr, ptwXPoints *ptwX)
nfu_status ptwX_clear(statusMessageReporting *smr, ptwXPoints *ptwX)
nfu_status ptwX_copy(statusMessageReporting *smr, ptwXPoints *dest, ptwXPoints *src)
ptwXPoints * ptwX_fromString(statusMessageReporting *smr, char const *str, char sep, char **endCharacter)
nfu_status ptwX_release(statusMessageReporting *smr, ptwXPoints *ptwX)
int64_t ptwX_length(statusMessageReporting *smr, ptwXPoints *ptwX)
nfu_status ptwX_abs(statusMessageReporting *smr, ptwXPoints *ptwX)
nfu_status ptwX_mul_double(statusMessageReporting *smr, ptwXPoints *ptwX, double value)
nfu_status ptwX_insertPointsAtIndex(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index, int64_t n1, double const *xs)
int ptwX_countOccurrences(statusMessageReporting *smr, ptwXPoints *ptwX, double value)
nfu_status ptwX_closesDifferenceInRange(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t i1, int64_t i2, double value, int64_t *index, double *difference)
nfu_status ptwX_reverse(statusMessageReporting *smr, ptwXPoints *ptwX)
nfu_status ptwX_closesDifference(statusMessageReporting *smr, ptwXPoints *ptwX, double value, int64_t *index, double *difference)
nfu_status ptwX_ascendingOrder(statusMessageReporting *smr, ptwXPoints *ptwX, int *order)
nfu_status ptwX_compare(statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2, int *comparison)
nfu_status ptwX_deletePoints(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t i1, int64_t i2)
nfu_status ptwX_initialize(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t size)
nfu_status ptwX_close(statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2, int epsilonFactor, double epsilon, int *index)
nfu_status ptwX_neg(statusMessageReporting *smr, ptwXPoints *ptwX)
nfu_status ptwX_add_ptwX(statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2)
double ptwX_getPointAtIndex_Unsafely(ptwXPoints *ptwX, int64_t index)
nfu_status ptwX_range(statusMessageReporting *smr, ptwXPoints *ptwX, double *rangeMin, double *rangeMax)
double * ptwX_getPointAtIndex(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index)
ptwXPoints * ptwX_create(statusMessageReporting *smr, int64_t size, int64_t length, double const *xs)
ptwXPoints * ptwX_createLine(statusMessageReporting *smr, int64_t size, int64_t length, double slope, double offset)
nfu_status ptwX_setPointAtIndex(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index, double x)
nfu_status ptwX_sub_ptwX(statusMessageReporting *smr, ptwXPoints *ptwX1, ptwXPoints *ptwX2)
nfu_status ptwX_add_double(statusMessageReporting *smr, ptwXPoints *ptwX, double value)
ptwXPoints * ptwX_free(ptwXPoints *ptwX)
ptwXPoints * ptwX_unique(statusMessageReporting *smr, ptwXPoints *ptwX, int order)
nfu_status ptwX_sort(statusMessageReporting *smr, ptwXPoints *ptwX, enum ptwX_sort_order order)
nfu_status ptwX_setData(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t length, double const *xs)
nfu_status ptwX_slopeOffset(statusMessageReporting *smr, ptwXPoints *ptwX, double slope, double offset)
ptwXPoints * ptwX_slice(statusMessageReporting *smr, ptwXPoints *ptwX, int64_t index1, int64_t index2)
ptwXPoints * ptwX_new(statusMessageReporting *smr, int64_t size)
#define smr_setReportError2(smr, libraryID, code, fmt,...)
#define smr_setReportError2p(smr, libraryID, code, fmt)
#define smr_realloc2(smr, old, size, forItem)
#define smr_freeMemory2(p)
#define smr_malloc2(smr, size, zero, forItem)