ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/tengDissertation/Appendix.tex
(Generate patch)

Comparing trunk/tengDissertation/Appendix.tex (file contents):
Revision 2825 by tim, Thu Jun 8 19:38:39 2006 UTC vs.
Revision 2832 by tim, Thu Jun 8 21:09:22 2006 UTC

# Line 132 | Line 132 | class IntegratorFactory {
132   \begin{lstlisting}[float,caption={[A classic Singleton design pattern implementation(I)] Declaration of {\tt IntegratorFactory} class.},label={appendixScheme:singletonDeclaration}]
133  
134   class IntegratorFactory {
135 <  public:
136 <    static IntegratorFactory* getInstance();
137 <    protected:
138 <      IntegratorFactory();
139 <    private:
140 <      static IntegratorFactory* instance_;
135 > public:
136 >  static IntegratorFactory*
137 >  getInstance();
138 > protected:
139 >  IntegratorFactory();
140 > private:
141 >  static IntegratorFactory* instance_;
142   };
143  
144   \end{lstlisting}
# Line 176 | Line 177 | class IntegratorFactory {
177   \begin{lstlisting}[float,caption={[The implementation of Factory pattern (I)].},label={appendixScheme:factoryDeclaration}]
178  
179   class IntegratorFactory {
180 <  public:
181 <    typedef std::map<string, IntegratorCreator*> CreatorMapType;
180 > public:
181 >  typedef std::map<string, IntegratorCreator*> CreatorMapType;
182  
183 <    bool registerIntegrator(IntegratorCreator* creator);
183 >  bool registerIntegrator(IntegratorCreator* creator) {
184 >    return creatorMap_.insert(creator->getIdent(), creator).second;
185 >  }
186  
187 <    Integrator* createIntegrator(const string& id, SimInfo* info);
187 >  Integrator* createIntegrator(const string& id, SimInfo* info) {
188 >    Integrator* result = NULL;
189 >    CreatorMapType::iterator i = creatorMap_.find(id);
190 >    if (i != creatorMap_.end()) {
191 >      result = (i->second)->create(info);
192 >    }
193 >    return result;
194 >  }
195  
196 <  private:
197 <    CreatorMapType creatorMap_;
196 > private:
197 >  CreatorMapType creatorMap_;
198   };
189
199   \end{lstlisting}
200 + \begin{lstlisting}[float,caption={[The implementation of Factory pattern (III)]Souce code of creator classes.},label={appendixScheme:integratorCreator}]
201  
192 \begin{lstlisting}[float,caption={[The implementation of Factory pattern (II)].},label={appendixScheme:factoryDeclarationImplementation}]
193
194 bool IntegratorFactory::unregisterIntegrator(const string& id) {
195  return creatorMap_.erase(id) == 1;
196 }
197
198 Integrator* IntegratorFactory::createIntegrator(const string& id,
199                                                SimInfo* info) {
200  CreatorMapType::iterator i = creatorMap_.find(id);
201  if (i != creatorMap_.end()) {
202    return (i->second)->create(info);
203  } else {
204    return NULL;
205  }
206 }
207
208 \end{lstlisting}
209
210 \begin{lstlisting}[float,caption={[The implementation of Factory pattern (III)].},label={appendixScheme:integratorCreator}]
211
202   class IntegratorCreator {
203 <  public:
203 > public:
204      IntegratorCreator(const string& ident) : ident_(ident) {}
205  
206      const string& getIdent() const { return ident_; }
207  
208      virtual Integrator* create(SimInfo* info) const = 0;
209  
210 <  private:
210 > private:
211      string ident_;
212   };
213  
214 < template<class ConcreteIntegrator>
215 < class IntegratorBuilder : public IntegratorCreator {
216 <  public:
217 <    IntegratorBuilder(const string& ident) : IntegratorCreator(ident) {}
218 <    virtual  Integrator* create(SimInfo* info) const {
219 <      return new ConcreteIntegrator(info);
220 <    }
214 > template<class ConcreteIntegrator> class IntegratorBuilder : public
215 > IntegratorCreator {
216 > public:
217 >  IntegratorBuilder(const string& ident)
218 >                     : IntegratorCreator(ident) {}
219 >  virtual  Integrator* create(SimInfo* info) const {
220 >    return new ConcreteIntegrator(info);
221 >  }
222   };
223   \end{lstlisting}
224  
# Line 245 | Line 236 | extensively.
236  
237   \begin{figure}
238   \centering
239 < \includegraphics[width=\linewidth]{architecture.eps}
239 > \includegraphics[width=\linewidth]{visitor.eps}
240   \caption[The architecture of {\sc OOPSE}] {Overview of the structure
241   of {\sc OOPSE}} \label{appendixFig:visitorUML}
242   \end{figure}
# Line 253 | Line 244 | class BaseVisitor{
244   \begin{lstlisting}[float,caption={[The implementation of Visitor pattern (I)]Source code of the visitor classes.},label={appendixScheme:visitor}]
245  
246   class BaseVisitor{
247 <  public:
248 <    virtual void visit(Atom* atom);
249 <    virtual void visit(DirectionalAtom* datom);
250 <    virtual void visit(RigidBody* rb);
247 > public:
248 >  virtual void visit(Atom* atom);
249 >  virtual void visit(DirectionalAtom* datom);
250 >  virtual void visit(RigidBody* rb);
251   };
252  
253   \end{lstlisting}
# Line 264 | Line 255 | class StuntDouble {
255   \begin{lstlisting}[float,caption={[The implementation of Visitor pattern (II)]Source code of the element classes.},label={appendixScheme:element}]
256  
257   class StuntDouble {
258 <  public:
259 <    virtual void accept(BaseVisitor* v) = 0;
258 > public:
259 >  virtual void accept(BaseVisitor* v) = 0;
260   };
261  
262   class Atom: public StuntDouble {
263 <  public:
264 <    virtual void accept{BaseVisitor* v*} {
265 <      v->visit(this);
266 <    }
263 > public:
264 >  virtual void accept{BaseVisitor* v*} {
265 >    v->visit(this);
266 >  }
267   };
268  
269   class DirectionalAtom: public Atom {
270 <  public:
271 <    virtual void accept{BaseVisitor* v*} {
272 <      v->visit(this);
273 <    }
270 > public:
271 >  virtual void accept{BaseVisitor* v*} {
272 >    v->visit(this);
273 >  }
274   };
275  
276   class RigidBody: public StuntDouble {
277 <  public:
278 <    virtual void accept{BaseVisitor* v*} {
279 <      v->visit(this);
280 <    }
277 > public:
278 >  virtual void accept{BaseVisitor* v*} {
279 >    v->visit(this);
280 >  }
281   };
282  
283   \end{lstlisting}
284 +
285   \section{\label{appendixSection:concepts}Concepts}
286  
287   OOPSE manipulates both traditional atoms as well as some objects
288   that {\it behave like atoms}.  These objects can be rigid
289   collections of atoms or atoms which have orientational degrees of
290 < freedom.  Here is a diagram of the class heirarchy:
291 <
290 > freedom.  A diagram of the class heirarchy is illustrated in
291 > Fig.~\ref{oopseFig:heirarchy}. Every Molecule, Atom and
292 > DirectionalAtom in {\sc OOPSE} have their own names which are
293 > specified in the {\tt .md} file. In contrast, RigidBodies are
294 > denoted by their membership and index inside a particular molecule:
295 > [MoleculeName]\_RB\_[index] (the contents inside the brackets depend
296 > on the specifics of the simulation). The names of rigid bodies are
297 > generated automatically. For example, the name of the first rigid
298 > body in a DMPC molecule is DMPC\_RB\_0.
299   \begin{figure}
300   \centering
301 < \includegraphics[width=3in]{heirarchy.eps}
302 < \caption[Class heirarchy for StuntDoubles in {\sc oopse}-3.0]{ \\
303 < The class heirarchy of StuntDoubles in {\sc oopse}-3.0. The
305 < selection syntax allows the user to select any of the objects that
306 < are descended from a StuntDouble.} \label{oopseFig:heirarchy}
307 < \end{figure}
308 <
301 > \includegraphics[width=\linewidth]{heirarchy.eps}
302 > \caption[Class heirarchy for ojects in {\sc OOPSE}]{ A diagram of
303 > the class heirarchy.
304   \begin{itemize}
305   \item A {\bf StuntDouble} is {\it any} object that can be manipulated by the
306   integrators and minimizers.
# Line 314 | Line 309 | DirectionalAtom}s which behaves as a single unit.
309   \item A {\bf RigidBody} is a collection of {\bf Atom}s or {\bf
310   DirectionalAtom}s which behaves as a single unit.
311   \end{itemize}
312 <
313 < Every Molecule, Atom and DirectionalAtom in {\sc OOPSE} have their
319 < own names which are specified in the {\tt .md} file. In contrast,
320 < RigidBodies are denoted by their membership and index inside a
321 < particular molecule: [MoleculeName]\_RB\_[index] (the contents
322 < inside the brackets depend on the specifics of the simulation). The
323 < names of rigid bodies are generated automatically. For example, the
324 < name of the first rigid body in a DMPC molecule is DMPC\_RB\_0.
312 > } \label{oopseFig:heirarchy}
313 > \end{figure}
314  
315   \section{\label{appendixSection:syntax}Syntax of the Select Command}
316  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines