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

Comparing trunk/OOPSE-4/src/io/SectionParserManager.cpp (file contents):
Revision 2204 by gezelter, Fri Apr 15 22:04:00 2005 UTC vs.
Revision 2211 by chrisfen, Thu Apr 21 14:12:19 2005 UTC

# Line 72 | Line 72 | namespace oopse {
72          
73        std::string line = trimLeftCopy(buffer);
74        //a line begins with "//" is a comment line
75 <      if ( line.empty() || (line.size() >= 2 && line[0] == '/' && line[1] == '/')) {
75 >      if ( line.empty() || (line.size() >= 2 && line[0] == '/'
76 >                            && line[1] == '/') ) {
77          continue;
78        } else {        
79          StringTokenizer tokenizer(line);
# Line 84 | Line 85 | namespace oopse {
85            if (keyword == "begin") {
86              std::string section = tokenizer.nextToken();
87              sectionNameStack.push(section);
88 <
89 <            i = std::find_if(sectionParsers_.begin(), sectionParsers_.end(), SameSectionParserFunctor(section));
88 >
89 >            i = std::find_if(sectionParsers_.begin(), sectionParsers_.end(),
90 >                       SameSectionParserFunctor(section));
91              if (i == sectionParsers_.end()){
92 <              sprintf(painCave.errMsg, "SectionParserManager Error: Can not find corresponding section parser for %s\n",
93 <                      section.c_str());
92 >              sprintf(painCave.errMsg,
93 >                "SectionParserManager Error: Can not find corresponding "
94 >                "section parser for %s\n",
95 >                section.c_str());
96                painCave.isFatal = 1;
97                simError();                        
98              } else {
99                if (i->isActive) {
100 <                sprintf(painCave.errMsg, "SectionParserManager Error:find multiple %s section\n",
101 <                        section.c_str());
102 <                painCave.isFatal = 1;
103 <                simError();                        
100 >          sprintf(painCave.errMsg, "SectionParserManager Error:find multiple %s "
101 >                  "section\n",
102 >                  section.c_str());
103 >          painCave.isFatal = 1;
104 >          simError();                        
105                } else {                        
106 <                i->isActive = true;
107 <                i->lineNo = lineNo;
108 <                i->offset = input.tellg();
106 >          i->isActive = true;
107 >          i->lineNo = lineNo;
108 >          i->offset = input.tellg();
109                }
110              }
111            } else if (keyword == "end") {
# Line 109 | Line 114 | namespace oopse {
114                sectionNameStack.pop();
115              } else {
116                sprintf(painCave.errMsg, "SectionParserManager Error: begin %s and end %s does not match at line %d\n",
117 <                      sectionNameStack.top().c_str(), section.c_str(), lineNo);
117 >                sectionNameStack.top().c_str(), section.c_str(), lineNo);
118                painCave.isFatal = 1;
119                simError();
120              }
121 <                    
121 >      
122            } else {
123              continue;
124            }
125          }
126        }
127 <        
127 >      
128      }
129 <
129 >    
130      if (!sectionNameStack.empty()) {
131        sprintf(painCave.errMsg, "SectionParserManager Error: stack is not empty\n");
132        painCave.isFatal = 1;
133        simError();
134      }
135 <
135 >    
136      //invoke parser
137      for (i = sectionParsers_.begin(); i != sectionParsers_.end(); ++i) {
138        if (i->isActive) {
139 <        //C++ standard does not guarantee seekg  reset EOF, in that case, seekg will fail
140 <        //It is always a good idea to call clear() before seek
141 <        input.clear();            
142 <        input.seekg(i->offset);
143 <        (i->sectionParser)->parse(input, ff, i->lineNo);
139 >        //C++ standard does not guarantee seekg  reset EOF, in that case, seekg will fail
140 >        //It is always a good idea to call clear() before seek
141 >        input.clear();            
142 >        input.seekg(i->offset);
143 >        (i->sectionParser)->parse(input, ff, i->lineNo);
144        }
145      }
146      
147    }
148 <
148 >  
149    void SectionParserManager::push_front(SectionParser* sp) {
150      SectionParserManager::iterator i;
151      i = findSectionParser(sp->getSectionName());
152      if (i != sectionParsers_.end()) {
153 <      std::cerr << sp->getSectionName() << " section parser is alway existed" << std::endl;
153 >      std::cerr << sp->getSectionName() << " section parser is alway existed"
154 >      << std::endl;
155        return;
156      }
157      
# Line 156 | Line 162 | namespace oopse {
162      } else {
163        context.priority = sectionParsers_.front().priority - priorityDifference_;
164      }
165 <
165 >    
166      context.sectionParser = sp;
167      context.lineNo = 0;
168      context.offset = 0;
# Line 169 | Line 175 | namespace oopse {
175      SectionParserManager::iterator i;
176      i = findSectionParser(sp->getSectionName());
177      if (i != sectionParsers_.end()) {
178 <      std::cerr << sp->getSectionName() << " section parser is alway existed" << std::endl;
178 >      std::cerr << sp->getSectionName() << " section parser is alway existed"
179 >      << std::endl;
180        return;
181      }
182  
# Line 193 | Line 200 | namespace oopse {
200      SectionParserManager::iterator i;
201      i = findSectionParser(sp->getSectionName());
202      if (i != sectionParsers_.end()) {
203 <      std::cerr << sp->getSectionName() << " section parser is alway existed" << std::endl;
203 >      std::cerr << sp->getSectionName() << " section parser is alway existed"
204 >      << std::endl;
205      }
206  
207      SectionParserContext context;    
# Line 226 | Line 234 | namespace oopse {
234      SectionParserManager::iterator i;
235      for (i = sectionParsers_.begin(); i != sectionParsers_.end(); ++i) {
236        if (i->sectionParser->getSectionName() == sectionName) {
237 <        break;
237 >        break;
238        }
239      }
240  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines