#include <string.h>
#include <tpia_target.h>
Go to the source code of this file.
Functions | |
tpia_particle * | tpia_particle_create (statusMessageReporting *smr) |
int | tpia_particle_initialize (statusMessageReporting *, tpia_particle *particle) |
tpia_particle * | tpia_particle_free (statusMessageReporting *smr, tpia_particle *particle) |
int | tpia_particle_release (statusMessageReporting *smr, tpia_particle *particle) |
int | tpia_particle_freeInternalList (statusMessageReporting *smr) |
tpia_particle * | tpia_particle_getInternalID (statusMessageReporting *smr, const char *const name) |
int | tpia_particle_printInternalSortedList (statusMessageReporting *) |
tpia_particle* tpia_particle_create | ( | statusMessageReporting * | smr | ) |
Definition at line 51 of file tpia_particle.cc.
References tpia_particle_initialize().
Referenced by tpia_particle_getInternalID().
00051 { 00052 00053 //tpia_particle *particle = xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" ); 00054 tpia_particle *particle = (tpia_particle*) xData_malloc2( smr, sizeof( tpia_particle ), 0, "particle" ); 00055 00056 if( particle == NULL ) return( NULL ); 00057 tpia_particle_initialize( smr, particle ); 00058 return( particle ); 00059 }
tpia_particle* tpia_particle_free | ( | statusMessageReporting * | smr, | |
tpia_particle * | particle | |||
) |
Definition at line 72 of file tpia_particle.cc.
References tpia_particle_release(), and xData_free().
Referenced by tpia_particle_freeInternalList(), and tpia_particle_getInternalID().
00072 { 00073 00074 int i, j; 00075 tpia_particle **p; 00076 00077 for( i = 0, p = particleSortedList; i < numberOfParticles; i++, p++ ) { 00078 if( *p == particle ) { 00079 numberOfParticles--; 00080 for( j = i; j < numberOfParticles; j++, p++ ) *p = p[1]; 00081 break; 00082 } 00083 } 00084 if( particle == particleListEnd ) particleListEnd = particle->prior; 00085 if( particle == particleList ) particleList = particle->next; 00086 if( particle->prior != NULL ) particle->prior->next = particle->next; 00087 if( particle->next != NULL ) particle->next->prior = particle->prior; 00088 tpia_particle_release( smr, particle ); 00089 xData_free( smr, particle ); 00090 return( NULL ); 00091 }
int tpia_particle_freeInternalList | ( | statusMessageReporting * | smr | ) |
Definition at line 103 of file tpia_particle.cc.
References tpia_particle_free(), and xData_free().
00103 { 00104 00105 while( particleList != NULL ) tpia_particle_free( smr, particleList ); 00106 //particleSortedList = xData_free( smr, particleSortedList ); 00107 particleSortedList = (tpia_particle**) xData_free( smr, particleSortedList ); 00108 return( 0 ); 00109 }
tpia_particle* tpia_particle_getInternalID | ( | statusMessageReporting * | smr, | |
const char *const | name | |||
) |
Definition at line 113 of file tpia_particle.cc.
References smr_isOk(), tpi_spectralID_parse(), tpia_miscNameToZAm(), tpia_particle_create(), tpia_particle_free(), and tpia_particleMass_AMU().
Referenced by tpia_product_getFromElement(), tpia_target_heated_read(), and tpia_target_read().
00113 { 00114 00115 int i, iCmp, min, mid, max, Z, A, m; 00116 tpia_particle *particle; 00117 char *EOP; 00118 00119 iCmp = 0; 00120 min = mid = 0; 00121 max = numberOfParticles; 00122 while( min != max ) { 00123 mid = ( min + max ) / 2; 00124 iCmp = strcmp( name, particleSortedList[mid]->name ); 00125 if( iCmp == 0 ) return( particleSortedList[mid] ); 00126 if( iCmp < 0 ) { 00127 max = mid - 1; 00128 if( mid == 0 ) max = 0; } 00129 else { 00130 min = mid + 1; 00131 if( min > max ) min = max; 00132 } 00133 } 00134 mid = min; 00135 if( numberOfParticles > 0 ) { 00136 iCmp = strcmp( name, particleSortedList[mid]->name ); 00137 if( iCmp == 0 ) return( particleSortedList[mid] ); 00138 if( ( iCmp < 0 ) && ( mid != 0 ) ) { 00139 mid--; 00140 iCmp = strcmp( name, particleSortedList[mid]->name ); 00141 } 00142 } 00143 00144 if( ( particle = tpia_particle_create( smr ) ) == NULL ) return( NULL ); 00145 if( ( particle->spectralID = tpi_spectralID_parse( smr, name, &(EOP) ) ) == NULL ) return( tpia_particle_free( smr, particle ) ); 00146 particle->name = particle->spectralID->name; 00147 if( tpia_miscNameToZAm( smr, particle->name, &Z, &A, &m ) != 0 ) return( tpia_particle_free( smr, particle ) ); 00148 particle->prior = NULL; 00149 particle->next = NULL; 00150 particle->Z = Z; 00151 particle->A = A; 00152 particle->m = m; 00153 particle->mass = tpia_particleMass_AMU( smr, particle->name ); 00154 if( !smr_isOk( smr ) ) return( tpia_particle_free( smr, particle ) ); 00155 particle->fullMass_MeV = tpia_AMU2MeV * particle->mass + particle->spectralID->level; 00156 00157 if( sizeOfParticleSortedList < ( numberOfParticles + 1 ) ) { 00158 if( sizeOfParticleSortedList == 0 ) { 00159 sizeOfParticleSortedList = initialSizeOfList; } 00160 else { 00161 sizeOfParticleSortedList += incrementalSizeOfList; 00162 } 00163 //if( ( particleSortedList = xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ), 00164 if( ( particleSortedList = (tpia_particle** ) xData_realloc2( smr, particleSortedList, sizeOfParticleSortedList * sizeof( tpia_particle * ), 00165 "particleSortedList" ) ) == NULL ) return( tpia_particle_free( smr, particle ) ); 00166 } 00167 00168 if( particleList == NULL ) { 00169 particle->ordinal = 0; 00170 particleListEnd = particleList = particle; } 00171 else { 00172 particle->ordinal = particleListEnd->ordinal + 1; 00173 particle->prior = particleListEnd; 00174 particleListEnd->next = particle; 00175 particleListEnd = particle; 00176 } 00177 00178 if( ( mid != 0 ) || ( iCmp > 0 ) ) mid++; 00179 for( i = numberOfParticles; i > mid; i-- ) particleSortedList[i] = particleSortedList[i-1]; 00180 particleSortedList[mid] = particle; 00181 numberOfParticles++; 00182 00183 return( particle ); 00184 }
int tpia_particle_initialize | ( | statusMessageReporting * | , | |
tpia_particle * | particle | |||
) |
int tpia_particle_printInternalSortedList | ( | statusMessageReporting * | ) |
Definition at line 189 of file tpia_particle.cc.
00189 { 00190 00191 int i; 00192 00193 for( i = 0; i < numberOfParticles; i++ ) printf( "%s\n", particleSortedList[i]->name ); 00194 return( 0 ); 00195 }
int tpia_particle_release | ( | statusMessageReporting * | smr, | |
tpia_particle * | particle | |||
) |
Definition at line 95 of file tpia_particle.cc.
References tpi_spectralID_free().
Referenced by tpia_particle_free().
00095 { 00096 00097 if( particle->spectralID != NULL ) tpi_spectralID_free( smr, particle->spectralID ); 00098 return( 0 ); 00099 }