1 /*****************************************************************************/
2 /* XDMF */
3 /* eXtensible Data Model and Format */
4 /* */
5 /* Id : XdmfGrid.cpp */
6 /* */
7 /* Author: */
8 /* Kenneth Leiter */
9 /* kenneth.leiter@arl.army.mil */
10 /* US Army Research Laboratory */
11 /* Aberdeen Proving Ground, MD */
12 /* */
13 /* Copyright @ 2011 US Army Research Laboratory */
14 /* All Rights Reserved */
15 /* See Copyright.txt for details */
16 /* */
17 /* This software is distributed WITHOUT ANY WARRANTY; without */
18 /* even the implied warranty of MERCHANTABILITY or FITNESS */
19 /* FOR A PARTICULAR PURPOSE. See the above copyright notice */
20 /* for more information. */
21 /* */
22 /*****************************************************************************/
23
24 #include <utility>
25 #include "XdmfAttribute.hpp"
26 #include "XdmfGeometry.hpp"
27 #include "XdmfGrid.hpp"
28 #include "XdmfMap.hpp"
29 #include "XdmfSet.hpp"
30 #include "XdmfTime.hpp"
31 #include "XdmfTopology.hpp"
32
XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid,XdmfAttribute,Attribute,Name)33 XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid, XdmfAttribute, Attribute, Name)
34 XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid, XdmfMap, Map, Name)
35 XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid, XdmfSet, Set, Name)
36
37 XdmfGrid::XdmfGrid(const shared_ptr<XdmfGeometry> geometry,
38 const shared_ptr<XdmfTopology> topology,
39 const std::string & name) :
40 mGeometry(geometry),
41 mTopology(topology),
42 mName(name),
43 mTime(shared_ptr<XdmfTime>())
44 {
45 }
46
~XdmfGrid()47 XdmfGrid::~XdmfGrid()
48 {
49 }
50
51 const std::string XdmfGrid::ItemTag = "Grid";
52
53 shared_ptr<const XdmfGeometry>
getGeometry() const54 XdmfGrid::getGeometry() const
55 {
56 return mGeometry;
57 }
58
59 std::map<std::string, std::string>
getItemProperties() const60 XdmfGrid::getItemProperties() const
61 {
62 std::map<std::string, std::string> gridProperties;
63 gridProperties.insert(std::make_pair("Name", mName));
64 return gridProperties;
65 }
66
67 std::string
getItemTag() const68 XdmfGrid::getItemTag() const
69 {
70 return ItemTag;
71 }
72
73 std::string
getName() const74 XdmfGrid::getName() const
75 {
76 return mName;
77 }
78
79 shared_ptr<XdmfTime>
getTime()80 XdmfGrid::getTime()
81 {
82 return boost::const_pointer_cast<XdmfTime>
83 (static_cast<const XdmfGrid &>(*this).getTime());
84 }
85
86 shared_ptr<const XdmfTime>
getTime() const87 XdmfGrid::getTime() const
88 {
89 return mTime;
90 }
91
92 shared_ptr<const XdmfTopology>
getTopology() const93 XdmfGrid::getTopology() const
94 {
95 return mTopology;
96 }
97
98 void
populateItem(const std::map<std::string,std::string> & itemProperties,const std::vector<shared_ptr<XdmfItem>> & childItems,const XdmfCoreReader * const reader)99 XdmfGrid::populateItem(const std::map<std::string, std::string> & itemProperties,
100 const std::vector<shared_ptr<XdmfItem> > & childItems,
101 const XdmfCoreReader * const reader)
102 {
103 XdmfItem::populateItem(itemProperties, childItems, reader);
104 std::map<std::string, std::string>::const_iterator name =
105 itemProperties.find("Name");
106 if(name != itemProperties.end()) {
107 mName = name->second;
108 }
109 else {
110 mName = "";
111 }
112 for(std::vector<shared_ptr<XdmfItem> >::const_iterator iter =
113 childItems.begin();
114 iter != childItems.end();
115 ++iter) {
116 if(shared_ptr<XdmfAttribute> attribute =
117 shared_dynamic_cast<XdmfAttribute>(*iter)) {
118 this->insert(attribute);
119 }
120 else if(shared_ptr<XdmfGeometry> geometry =
121 shared_dynamic_cast<XdmfGeometry>(*iter)) {
122 mGeometry = geometry;
123 }
124 else if(shared_ptr<XdmfMap> map =
125 shared_dynamic_cast<XdmfMap>(*iter)) {
126 this->insert(map);
127 }
128 else if(shared_ptr<XdmfSet> set =
129 shared_dynamic_cast<XdmfSet>(*iter)) {
130 this->insert(set);
131 }
132 else if(shared_ptr<XdmfTime> time =
133 shared_dynamic_cast<XdmfTime>(*iter)) {
134 mTime = time;
135 }
136 else if(shared_ptr<XdmfTopology> topology =
137 shared_dynamic_cast<XdmfTopology>(*iter)) {
138 mTopology = topology;
139 }
140 }
141 }
142
143 void
setName(const std::string & name)144 XdmfGrid::setName(const std::string & name)
145 {
146 mName = name;
147 }
148
149 void
setTime(const shared_ptr<XdmfTime> time)150 XdmfGrid::setTime(const shared_ptr<XdmfTime> time)
151 {
152 mTime = time;
153 }
154
155 void
traverse(const shared_ptr<XdmfBaseVisitor> visitor)156 XdmfGrid::traverse(const shared_ptr<XdmfBaseVisitor> visitor)
157 {
158 XdmfItem::traverse(visitor);
159 if(mTime) {
160 mTime->accept(visitor);
161 }
162 if(mGeometry) {
163 mGeometry->accept(visitor);
164 }
165 if(mTopology) {
166 mTopology->accept(visitor);
167 }
168 for(std::vector<shared_ptr<XdmfAttribute> >::const_iterator iter =
169 mAttributes.begin();
170 iter != mAttributes.end();
171 ++iter) {
172 (*iter)->accept(visitor);
173 }
174 for(std::vector<shared_ptr<XdmfMap> >::const_iterator iter =
175 mMaps.begin();
176 iter != mMaps.end();
177 ++iter) {
178 (*iter)->accept(visitor);
179 }
180 for(std::vector<shared_ptr<XdmfSet> >::const_iterator iter = mSets.begin();
181 iter != mSets.end();
182 ++iter) {
183 (*iter)->accept(visitor);
184 }
185 }
186