ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/mdtools/interface_implementation/MakeStamps.cpp
(Generate patch)

Comparing trunk/mdtools/interface_implementation/MakeStamps.cpp (file contents):
Revision 176 by mmeineke, Thu Nov 14 22:00:44 2002 UTC vs.
Revision 198 by mmeineke, Fri Dec 6 21:20:42 2002 UTC

# Line 4 | Line 4
4   #include "MakeStamps.hpp"
5   #include "MoleculeStamp.hpp"
6   #include "simError.h"
7 + #ifdef IS_MPI
8   #include "mpiBASS.h"
9 + #endif // is_mpi
10  
11   LinkedMolStamp::~LinkedMolStamp(){
12    if( mol_stamp != NULL ) delete mol_stamp;
13    if( next != NULL ) delete next;
14   }
15  
16 + void LinkedMolStamp::add( LinkedMolStamp* newbie ){
17 +  
18 +  if( next != NULL ) next->add( newbie );
19 +  else{
20 +    next = newbie;
21 +    next->setPrev( this );
22 +  }
23 + }
24 +
25   MoleculeStamp* LinkedMolStamp::match( char* id ){
26  
27    if( mol_stamp != NULL ){
28 <    
29 <    if(!strcmp( mol_stamp->getID(), id )) return mol_stamp;
30 <    
31 <    if( next != NULL ) return next->match( id );
28 >    if(!strcmp( mol_stamp->getID(), id )){
29 >      
30 >      // make sure we aren't hiding somebody else with the same name
31 >      if(next != NULL ){
32 >        if( next->match( id ) != NULL){
33 >          sprintf( painCave.errMsg,
34 >                   "Molecule Stamp Error. Two separate of declarations of "
35 >                   "%s present.\n",
36 >                   id );
37 >          painCave.isFatal = 1;
38 >          simError();
39 > #ifdef IS_MPI
40 >          if( painCave.isEventLoop ){
41 >            if( worldRank == 0 ) mpiInterfaceExit();
42 >          }
43 > #endif //is_mpi
44 >        }
45 >        else return mol_stamp;
46 >      }
47 >      else  return mol_stamp;
48 >    }
49    }
50    
51 +  if( next != NULL ) return next->match( id );
52 +  
53    return NULL;
54   }
55  
56 + LinkedMolStamp* LinkedMolStamp::extract( char* id ){
57 +
58 +  if( mol_stamp != NULL ){
59 +    if(!strcmp( mol_stamp->getID(), id )){
60 +      
61 +      // make sure we aren't hiding somebody else with the same name
62 +      if(next != NULL ){
63 +        if( next->match( id ) != NULL){
64 +          sprintf( painCave.errMsg,
65 +                   "Molecule Stamp Error. Two separate of declarations of "
66 +                   "%s present.\n",
67 +                   id );
68 +          painCave.isFatal = 1;
69 +          simError();
70 + #ifdef IS_MPI
71 +          if( painCave.isEventLoop ){
72 +            if( worldRank == 0 ) mpiInterfaceExit();
73 +          }
74 + #endif //is_mpi
75 +        }
76 +      }
77 +          
78 +      prev->setNext( next );
79 +      if( next != NULL ) next->setPrev( prev );
80 +      return this;
81 +    }
82 +  }
83 +  
84 +  if( next != NULL ) return next->extract( id );
85 +  
86 +  return NULL;
87 + }
88 +
89   MakeStamps::MakeStamps(){
90    
91    int i;
92    
93    my_mols = new LinkedMolStamp*[hash_size];
94    for( i=0; i<hash_size; i++ ){
95 <    my_mols[i] = NULL;
95 >    my_mols[i] = new LinkedMolStamp();
96    }
97  
98   }
# Line 74 | Line 137 | MoleculeStamp* MakeStamps::getMolecule( char* the_id )
137    return key;
138   }
139  
140 < MoleculeStamp* MakeStamps::getMolecule( char* the_id ){
140 > LinkedMolStamp* MakeStamps::extractMolStamp( char* the_id ){
141    int key;
142    
143    key = hash( the_id );
144    if( my_mols[key] != NULL ){
145 <    return my_mols[key]->match( the_id );
145 >    return my_mols[key]->extract( the_id );
146    }
147    
148    return NULL;
# Line 94 | Line 157 | void MakeStamps::addMolStamp( MoleculeStamp* the_stamp
157  
158    linked_mol = new LinkedMolStamp;
159    linked_mol->setStamp( the_stamp );
97  linked_mol->setNext( my_mols[key] );
160  
161 <  my_mols[key] = linked_mol;
161 >  my_mols[key]->add( linked_mol );
162 >
163   }
164  
165  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines