ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/selection/NameFinder.cpp
(Generate patch)

Comparing trunk/OOPSE-4/src/selection/NameFinder.cpp (file contents):
Revision 1971 by tim, Fri Feb 4 05:42:49 2005 UTC vs.
Revision 1972 by tim, Fri Feb 4 22:39:26 2005 UTC

# Line 78 | Line 78 | void NameFinder::loadNames() {
78      root_->bs.setAll(); //
79      
80      for (mol = info_->beginMolecule(mi); mol != NULL; mol = info_->nextMolecule(mi)) {
81 <        TreeNode* currentMolNode;            
81 >          
82          std::string molName = mol->getMoleculeName();
83 <
84 <        foundIter = root_->children.find(molName);
85 <        if ( foundIter  == root_->children.end()) {
86 <            currentMolNode = new TreeNode;
87 <            currentMolNode->name = molName;
88 <            currentMolNode->bs.resize(nStuntDouble_);
89 <        }else {
90 <            currentMolNode = foundIter->second;
91 <        }
83 >         TreeNode* currentMolNode = createNode(root_, molName);
84          
85          for(atom = mol->beginAtom(ai); atom != NULL; atom = mol->nextAtom(ai)) {
86              std::string atomName = atom->getType();
87 <            TreeNode* currentAtomNode;
88 <            foundIter = currentMolNode->children.find(molName);
97 <            if (foundIter == currentMolNode->children.end()) {
98 <                currentAtomNode = new TreeNode;
99 <                currentAtomNode->name = atomName;
100 <                currentAtomNode->bs.resize(nStuntDouble_);
101 <            } else {
102 <                currentAtomNode = foundIter->second;
103 <            }
87 >            TreeNode* currentAtomNode = createNode(currentMolNode, atomName);
88 >            
89              currentMolNode->bs.setBitOn(atom->getGlobalIndex());
90              currentAtomNode->bs.setBitOn(atom->getGlobalIndex());
91          }
92  
93          for (rb = mol->beginRigidBody(rbIter); rb != NULL; rb = mol->nextRigidBody(rbIter)) {
94 <            std::string rbName = atom->getType();
95 <            TreeNode* currentRbNode;
111 <            foundIter = currentMolNode->children.find(molName);
112 <            if (foundIter == currentMolNode->children.end()) {
113 <                currentRbNode = new TreeNode;
114 <                currentRbNode->name = rbName;
115 <                currentRbNode->bs.resize(nStuntDouble_);
116 <            } else {
117 <                currentRbNode = foundIter->second;
118 <            }
94 >            std::string rbName = rb->getType();
95 >            TreeNode* currentRbNode = createNode(currentMolNode, rbName);
96              
97              currentMolNode->bs.setBitOn(rb->getGlobalIndex());
98              currentRbNode->bs.setBitOn(rb->getGlobalIndex());
99  
100              //create nodes for atoms belong to this rigidbody
101 <            for(atom = rb->beginAtom(ai); rb != NULL; atom = rb->nextAtom(ai)) {
101 >            for(atom = rb->beginAtom(ai); atom != NULL; atom = rb->nextAtom(ai)) {
102                  std::string rbAtomName = atom->getType();
103 <                TreeNode* currentRbAtomNode;
104 <                foundIter = currentRbNode->children.find(molName);
128 <                if (foundIter == currentRbNode->children.end()) {
129 <                    currentRbAtomNode = new TreeNode;
130 <                    currentRbAtomNode->name = rbAtomName;
131 <                    currentRbAtomNode->bs.resize(nStuntDouble_);
132 <                } else {
133 <                    currentRbAtomNode = foundIter->second;
134 <                }
103 >                TreeNode* currentRbAtomNode = createNode(currentRbNode, rbName);;
104 >
105                  currentRbAtomNode->bs.setBitOn(atom->getGlobalIndex());
106              }
107  
# Line 141 | Line 111 | bool NameFinder::match(const std::string& name, BitSet
111  
112   }
113  
114 < bool NameFinder::match(const std::string& name, BitSet& bs){
114 > TreeNode* NameFinder::createNode(TreeNode* parent, const std::string& name) {
115 >    TreeNode* node;    
116 >    std::map<std::string, TreeNode*>::iterator foundIter;
117 >    foundIter = parent->children.find(name);
118 >    if ( foundIter  == parent->children.end()) {
119 >        node = new TreeNode;
120 >        node->name = name;
121 >        node->bs.resize(nStuntDouble_);
122 >        parent->children.insert(std::make_pair(name, node));
123 >    }else {
124 >        node = foundIter->second;
125 >    }
126 >    return node;
127 > }
128  
129 <    bool hasError = false;
129 > BitSet NameFinder::match(const std::string& name){
130 >    BitSet bs(nStuntDouble_);
131 >  
132      StringTokenizer tokenizer(name, ".");
133  
134      std::vector<std::string> names;
# Line 175 | Line 160 | bool NameFinder::match(const std::string& name, BitSet
160              matchRigidAtoms(names[0], names[1], names[2], bs);
161              break;
162          default:      
163 <            hasError = true;        
163 >            std::cerr << "invalid name: " << name << std::endl;
164              break;          
165      }
166  
167 <    return hasError;
167 >    return bs;
168   }
169  
170   void NameFinder::matchMolecule(const std::string& molName, BitSet& bs) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines