ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE/libmdtools/CompositeVisitor.cpp
Revision: 1126
Committed: Tue Apr 20 05:39:38 2004 UTC (20 years, 2 months ago) by tim
File size: 3178 byte(s)
Log Message:
DUMP2XYZ 0.99 version

File Contents

# User Rev Content
1 tim 1118 #include <cstring>
2     #include "CompositeVisitor.hpp"
3 tim 1120 #include "RigidBody.hpp"
4     #include "DirectionalAtom.hpp"
5 tim 1118 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 tim 1126 void CompositeVisitor::visit(Atom* atom){
43 tim 1118 VisitorIterator i;
44     BaseVisitor* curVisitor;
45    
46     for(curVisitor = beginVisitor(i); curVisitor; curVisitor = nextVisitor(i))
47 tim 1120 atom->accept(curVisitor);
48 tim 1118 }
49    
50 tim 1126 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 tim 1120 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 tim 1118 const string CompositeVisitor::toString(){
77     VisitorIterator i;
78 tim 1119 string result;
79 tim 1118 char buffer[65535];
80 tim 1126
81     sprintf(buffer ,"******************************************************************\n");
82     result += buffer;
83 tim 1118
84 tim 1126 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 tim 1118 for(i = visitorList.begin(); i != visitorList.end(); i++){
94 tim 1126 sprintf(buffer, "Priority = %d\tvisitor = %s\n", (*i).second, ((*i).first->getVisitorName()).c_str());
95 tim 1119 result += buffer;
96 tim 1118 }
97    
98 tim 1126 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 tim 1119 return result;
108 tim 1118 }
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 tim 1126 }

Properties

Name Value
svn:executable *