8 #if defined __cplusplus
22 MCGIDI_particle *particle = (MCGIDI_particle *) smr_malloc2( smr,
sizeof( MCGIDI_particle ), 0,
"particle" );
24 if( particle == NULL )
return( NULL );
33 memset( particle, 0,
sizeof( MCGIDI_particle ) );
45 if( *p == particle ) {
51 if( particle == particleListEnd ) particleListEnd = particle->prior;
52 if( particle == particleList ) particleList = particle->next;
53 if( particle->prior != NULL ) particle->prior->next = particle->next;
54 if( particle->next != NULL ) particle->next->prior = particle->prior;
81 int i, iCmp,
min, mid,
max, Z,
A,
m, level;
82 MCGIDI_particle *particle;
89 mid = ( min +
max ) / 2;
90 iCmp = strcmp( name, particleSortedList[mid]->name );
91 if( iCmp == 0 )
return( particleSortedList[mid] );
94 if( mid == 0 ) max = 0; }
97 if( min > max ) min =
max;
101 if( numberOfParticles > 0 ) {
102 iCmp = strcmp( name, particleSortedList[mid]->name );
103 if( iCmp == 0 )
return( particleSortedList[mid] );
104 if( ( iCmp < 0 ) && ( mid != 0 ) ) {
106 iCmp = strcmp( name, particleSortedList[mid]->name );
111 if( ( particle->name =
smr_allocateCopyString( smr, name,
"particle->name", __FILE__, __LINE__, __func__ ) ) == NULL )
goto err;
113 particle->prior = NULL;
114 particle->next = NULL;
121 particle->mass_MeV = pop->mass_MeV;
131 if( ( particleSortedList = (MCGIDI_particle **) smr_realloc2( smr, particleSortedList,
sizeOfParticleSortedList *
sizeof( MCGIDI_particle * ),
132 "particleSortedList" ) ) == NULL )
goto err;
135 if( particleList == NULL ) {
136 particle->ordinal = 0;
137 particleListEnd = particleList = particle; }
139 particle->ordinal = particleListEnd->ordinal + 1;
141 particleListEnd->next = particle;
142 particleListEnd = particle;
145 if( ( mid != 0 ) || ( iCmp > 0 ) ) mid++;
146 for( i = numberOfParticles; i > mid; i-- ) particleSortedList[i] = particleSortedList[i-1];
147 particleSortedList[mid] = particle;
167 #if defined __cplusplus
MCGIDI_particle * MCGIDI_particle_getInternalID(statusMessageReporting *smr, const char *const name, MCGIDI_POPs *pops)
static int numberOfParticles
static MCGIDI_particle * particleListEnd
int MCGIDI_miscNameToZAm(statusMessageReporting *smr, const char *name, int *Z, int *A, int *m, int *level)
static int initialSizeOfList
int MCGIDI_particle_printInternalSortedList(statusMessageReporting *)
char * smr_allocateCopyString(statusMessageReporting *smr, char const *s, char const *forItem, char const *file, int line, char const *function)
static MCGIDI_particle ** particleSortedList
static int sizeOfParticleSortedList
static MCGIDI_particle * particleList
double A(double temperature)
MCGIDI_POP * MCGIDI_POPs_findParticle(MCGIDI_POPs *pops, char const *name)
int smr_isOk(statusMessageReporting *smr)
void * smr_freeMemory(void **p)
int MCGIDI_particle_freeInternalList(statusMessageReporting *smr)
double MCGIDI_particleMass_AMU(statusMessageReporting *smr, const char *name)
static int incrementalSizeOfList
T max(const T t1, const T t2)
brief Return the largest of the two arguments
int MCGIDI_particle_initialize(statusMessageReporting *, MCGIDI_particle *particle)
MCGIDI_particle * MCGIDI_particle_free(statusMessageReporting *smr, MCGIDI_particle *particle)
T min(const T t1, const T t2)
brief Return the smallest of the two arguments
MCGIDI_particle * MCGIDI_particle_new(statusMessageReporting *smr)
int MCGIDI_particle_release(statusMessageReporting *, MCGIDI_particle *particle)