ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-1.0/libmdtools/CompositeVisitor.cpp
Revision: 1334
Committed: Fri Jul 16 18:58:03 2004 UTC (19 years, 11 months ago) by gezelter
File size: 3178 byte(s)
Log Message:
Initial import of OOPSE-1.0 source tree

File Contents

# User Rev Content
1 gezelter 1334 #include <cstring>
2     #include "CompositeVisitor.hpp"
3     #include "RigidBody.hpp"
4     #include "DirectionalAtom.hpp"
5     CompositeVisitor::~CompositeVisitor(){
6     VisitorIterator i;
7     BaseVisitor* curVisitor;
8    
9     for(curVisitor = beginVisitor(i); curVisitor; curVisitor = nextVisitor(i))
10     delete curVisitor;
11    
12     visitorList.clear();
13    
14     }
15     void CompositeVisitor::addVisitor(BaseVisitor* newVisitor, int priority){
16     VisitorIterator i;
17     int curPriority;
18    
19     for(i = visitorList.begin(); i != visitorList.end(); i++){
20     curPriority = (*i).second;
21     //if new visitor has higher priority, just insert it before current visitor
22     if(priority > curPriority){
23     visitorList.insert(i, make_pair(newVisitor, priority));
24     }
25     }
26    
27     //if new visitor has lowest priority, insert it at the end of the list
28     visitorList.insert(visitorList.end(), make_pair(newVisitor, priority));
29     }
30    
31     BaseVisitor* CompositeVisitor::beginVisitor(VisitorIterator& i){
32     i = visitorList.begin();
33     return i != visitorList.end() ? (*i).first : NULL;
34     }
35    
36     BaseVisitor* CompositeVisitor::nextVisitor(VisitorIterator& i){
37     ++i;
38     return i != visitorList.end() ? (*i).first : NULL;
39    
40     }
41    
42     void CompositeVisitor::visit(Atom* atom){
43     VisitorIterator i;
44     BaseVisitor* curVisitor;
45    
46     for(curVisitor = beginVisitor(i); curVisitor; curVisitor = nextVisitor(i))
47     atom->accept(curVisitor);
48     }
49    
50     void CompositeVisitor::visit(DirectionalAtom* datom){
51     VisitorIterator i;
52     BaseVisitor* curVisitor;
53    
54     for(curVisitor = beginVisitor(i); curVisitor; curVisitor = nextVisitor(i))
55     datom->accept(curVisitor);
56     }
57     void CompositeVisitor::visit(RigidBody* rb){
58     VisitorIterator i;
59     BaseVisitor* curVisitor;
60     vector<Atom*> myAtoms;
61     vector<Atom*>::iterator atomIter;
62    
63     myAtoms = rb->getAtoms();
64    
65     for(curVisitor = beginVisitor(i); curVisitor; curVisitor = nextVisitor(i)){
66     rb->accept(curVisitor);
67    
68     for(atomIter = myAtoms.begin(); atomIter != myAtoms.end(); ++atomIter)
69     (*atomIter)->accept(curVisitor);
70     }
71    
72    
73    
74     }
75    
76     const string CompositeVisitor::toString(){
77     VisitorIterator i;
78     string result;
79     char buffer[65535];
80    
81     sprintf(buffer ,"******************************************************************\n");
82     result += buffer;
83    
84     sprintf(buffer ,"Visitor name: %s\n", visitorName.c_str());
85     result += buffer;
86    
87     sprintf(buffer , "Visitor Description: visitor manager maintaining a priority list\n");
88     result += buffer;
89    
90     sprintf(buffer , "visitors in current priority list:\n");
91     result += buffer;
92    
93     for(i = visitorList.begin(); i != visitorList.end(); i++){
94     sprintf(buffer, "Priority = %d\tvisitor = %s\n", (*i).second, ((*i).first->getVisitorName()).c_str());
95     result += buffer;
96     }
97    
98     sprintf(buffer, "Detail information about every visitor:\n");
99    
100    
101     for(i = visitorList.begin(); i != visitorList.end(); i++)
102     result += ((*i).first)->toString();
103    
104     sprintf(buffer ,"******************************************************************\n");
105     result += buffer;
106    
107     return result;
108     }
109    
110     void CompositeVisitor::update(){
111     VisitorIterator i;
112     BaseVisitor* curVisitor;
113    
114     for(curVisitor = beginVisitor(i); curVisitor; curVisitor = nextVisitor(i))
115     curVisitor->update();
116     }

Properties

Name Value
svn:executable *