/*****************************************************************************/ /* XDMF */ /* eXtensible Data Model and Format */ /* */ /* Id : XdmfGrid.cpp */ /* */ /* Author: */ /* Kenneth Leiter */ /* kenneth.leiter@arl.army.mil */ /* US Army Research Laboratory */ /* Aberdeen Proving Ground, MD */ /* */ /* Copyright @ 2011 US Army Research Laboratory */ /* All Rights Reserved */ /* See Copyright.txt for details */ /* */ /* This software is distributed WITHOUT ANY WARRANTY; without */ /* even the implied warranty of MERCHANTABILITY or FITNESS */ /* FOR A PARTICULAR PURPOSE. See the above copyright notice */ /* for more information. */ /* */ /*****************************************************************************/ #include #include #include "XdmfAttribute.hpp" #include "XdmfError.hpp" #include "XdmfGeometry.hpp" #include "XdmfGrid.hpp" #include "XdmfMap.hpp" #include "XdmfSet.hpp" #include "XdmfTime.hpp" #include "XdmfTopology.hpp" XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid, XdmfAttribute, Attribute, Name) XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid, XdmfMap, Map, Name) XDMF_CHILDREN_IMPLEMENTATION(XdmfGrid, XdmfSet, Set, Name) XdmfGrid::XdmfGrid(const shared_ptr geometry, const shared_ptr topology, const std::string & name) : mGeometry(geometry), mTopology(topology), mName(name), mTime(shared_ptr()) { } XdmfGrid::XdmfGrid(XdmfGrid &refGrid): XdmfItem(refGrid), mAttributes(refGrid.mAttributes), mSets(refGrid.mSets), mMaps(refGrid.mMaps), mGeometry(refGrid.mGeometry), mTopology(refGrid.mTopology), mName(refGrid.mName), mTime(refGrid.mTime) { XdmfGridImpl * holder = refGrid.mImpl; XdmfGridImpl * duplicateImpl = holder->duplicate(); mImpl = duplicateImpl; } XdmfGrid::~XdmfGrid() { } const std::string XdmfGrid::ItemTag = "Grid"; shared_ptr XdmfGrid::getGridController() { return mGridController; } void XdmfGrid::copyGrid(shared_ptr sourceGrid) { this->setName(sourceGrid->getName()); this->setTime(sourceGrid->getTime()); while(this->getNumberAttributes() > 0) { this->removeAttribute(0); } for (unsigned int i = 0; i < sourceGrid->getNumberAttributes(); ++i) { this->insert(sourceGrid->getAttribute(i)); } while(this->getNumberInformations() > 0) { this->removeInformation(0); } for (unsigned int i = 0; i < sourceGrid->getNumberInformations(); ++i) { this->insert(sourceGrid->getInformation(i)); } while(this->getNumberSets() > 0) { this->removeSet(0); } for (unsigned int i = 0; i < sourceGrid->getNumberSets(); ++i) { this->insert(sourceGrid->getSet(i)); } while(this->getNumberMaps() > 0) { this->removeMap(0); } for (unsigned int i = 0; i < sourceGrid->getNumberMaps(); ++i) { this->insert(sourceGrid->getMap(i)); } } shared_ptr XdmfGrid::getGeometry() const { return mGeometry; } std::map XdmfGrid::getItemProperties() const { std::map gridProperties; gridProperties.insert(std::make_pair("Name", mName)); return gridProperties; } std::string XdmfGrid::getItemTag() const { return ItemTag; } std::string XdmfGrid::getName() const { return mName; } shared_ptr XdmfGrid::getTime() { return boost::const_pointer_cast (static_cast(*this).getTime()); } shared_ptr XdmfGrid::getTime() const { return mTime; } shared_ptr XdmfGrid::getTopology() const { return mTopology; } void XdmfGrid::populateItem(const std::map & itemProperties, const std::vector > & childItems, const XdmfCoreReader * const reader) { XdmfItem::populateItem(itemProperties, childItems, reader); std::map::const_iterator name = itemProperties.find("Name"); if(name != itemProperties.end()) { mName = name->second; } else { mName = ""; } for(std::vector >::const_iterator iter = childItems.begin(); iter != childItems.end(); ++iter) { if(shared_ptr attribute = shared_dynamic_cast(*iter)) { this->insert(attribute); } else if(shared_ptr geometry = shared_dynamic_cast(*iter)) { mGeometry = geometry; } else if(shared_ptr map = shared_dynamic_cast(*iter)) { this->insert(map); } else if(shared_ptr set = shared_dynamic_cast(*iter)) { this->insert(set); } else if(shared_ptr time = shared_dynamic_cast(*iter)) { mTime = time; } else if(shared_ptr topology = shared_dynamic_cast(*iter)) { mTopology = topology; } else if(shared_ptr gridController = shared_dynamic_cast(*iter)) { this->setGridController(gridController); } } } void XdmfGrid::read() { } void XdmfGrid::release() { this->setName(""); this->setTime(shared_ptr()); while(this->getNumberAttributes() > 0) { this->removeAttribute(0); } while(this->getNumberInformations() > 0) { this->removeInformation(0); } while(this->getNumberSets() > 0) { this->removeSet(0); } while(this->getNumberMaps() > 0) { this->removeMap(0); } } void XdmfGrid::setGridController(shared_ptr newController) { mGridController = newController; } void XdmfGrid::setName(const std::string & name) { mName = name; this->setIsChanged(true); } void XdmfGrid::setTime(const shared_ptr time) { mTime = time; this->setIsChanged(true); } void XdmfGrid::traverse(const shared_ptr visitor) { XdmfItem::traverse(visitor); if (mGridController) { mGridController->accept(visitor); } if(mTime) { mTime->accept(visitor); } if(mGeometry) { mGeometry->accept(visitor); } if(mTopology) { mTopology->accept(visitor); } for (unsigned int i = 0; i < mAttributes.size(); ++i) { mAttributes[i]->accept(visitor); } for (unsigned int i = 0; i < mMaps.size(); ++i) { mMaps[i]->accept(visitor); } for (unsigned int i = 0; i < mSets.size(); ++i) { mSets[i]->accept(visitor); } } // C Wrappers XDMFATTRIBUTE * XdmfGridGetAttribute(XDMFGRID * grid, unsigned int index) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return (XDMFATTRIBUTE *)((void *)(gridPointer->getAttribute(index).get())); } XDMFATTRIBUTE * XdmfGridGetAttributeByName(XDMFGRID * grid, char * Name) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return (XDMFATTRIBUTE *)((void *)(gridPointer->getAttribute(Name).get())); } unsigned int XdmfGridGetNumberAttributes(XDMFGRID * grid) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return gridPointer->getNumberAttributes(); } void XdmfGridInsertAttribute(XDMFGRID * grid, XDMFATTRIBUTE * Attribute, int passControl) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); if (passControl) { gridPointer->insert(shared_ptr((XdmfAttribute *)Attribute)); } else { gridPointer->insert(shared_ptr((XdmfAttribute *)Attribute, XdmfNullDeleter())); } } void XdmfGridRemoveAttribute(XDMFGRID * grid, unsigned int index) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->removeAttribute(index); } void XdmfGridRemoveAttributeByName(XDMFGRID * grid, char * Name) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->removeAttribute(Name); } XDMFSET * XdmfGridGetSet(XDMFGRID * grid, unsigned int index) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return (XDMFSET *)((void *)(gridPointer->getSet(index).get())); } XDMFSET * XdmfGridGetSetByName(XDMFGRID * grid, char * Name) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return (XDMFSET *)((void *)(gridPointer->getSet(Name).get())); } unsigned int XdmfGridGetNumberSets(XDMFGRID * grid) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return gridPointer->getNumberSets(); } void XdmfGridInsertSet(XDMFGRID * grid, XDMFSET * Set, int passControl) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); if (passControl) { gridPointer->insert(shared_ptr((XdmfSet *)Set)); } else { gridPointer->insert(shared_ptr((XdmfSet *)Set, XdmfNullDeleter())); } } void XdmfGridRemoveSet(XDMFGRID * grid, unsigned int index) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->removeSet(index); } void XdmfGridRemoveSetByName(XDMFGRID * grid, char * Name) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->removeSet(Name); } XDMFMAP * XdmfGridGetMap(XDMFGRID * grid, unsigned int index) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return (XDMFMAP *)((void *)(gridPointer->getMap(index).get())); } XDMFMAP * XdmfGridGetMapByName(XDMFGRID * grid, char * Name) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return (XDMFMAP *)((void *)(gridPointer->getMap(Name).get())); } unsigned int XdmfGridGetNumberMaps(XDMFGRID * grid) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return gridPointer->getNumberMaps(); } void XdmfGridInsertMap(XDMFGRID * grid, XDMFMAP * Map, int passControl) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); if (passControl) { gridPointer->insert(shared_ptr((XdmfMap *)Map)); } else { gridPointer->insert(shared_ptr((XdmfMap *)Map, XdmfNullDeleter())); } } void XdmfGridRemoveMap(XDMFGRID * grid, unsigned int index) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->removeMap(index); } void XdmfGridRemoveMapByName(XDMFGRID * grid, char * Name) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->removeMap(Name); } XDMFGRIDCONTROLLER * XdmfGridGetGridController(XDMFGRID * grid) { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); shared_ptr generatedController = gridPointer->getGridController(); return (XDMFGRIDCONTROLLER *)((void *)(generatedController.get())); } char * XdmfGridGetName(XDMFGRID * grid) { XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); return strdup(gridPointer->getName().c_str()); } XDMFTIME * XdmfGridGetTime(XDMFGRID * grid) { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); shared_ptr generatedTime = gridPointer->getTime(); return (XDMFTIME *)((void *)(generatedTime.get())); } void XdmfGridRead(XDMFGRID * grid, int * status) { XDMF_ERROR_WRAP_START(status) try { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); gridPointer->read(); } catch (...) { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); gridPointer->read(); } XDMF_ERROR_WRAP_END(status) } void XdmfGridRelease(XDMFGRID * grid) { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); gridPointer->release(); } void XdmfGridSetGridController(XDMFGRID * grid, XDMFGRIDCONTROLLER * controller, int passControl) { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); XdmfItem * controllerPointer = (XdmfItem *) controller; XdmfGridController * classedController = dynamic_cast(controllerPointer); if (passControl) { gridPointer->setGridController(shared_ptr(classedController)); } else { gridPointer->setGridController(shared_ptr(classedController, XdmfNullDeleter())); } } void XdmfGridSetName(XDMFGRID * grid, char * name, int * status) { XDMF_ERROR_WRAP_START(status) XdmfItem * tempPointer = (XdmfItem *)(grid); XdmfGrid * gridPointer = dynamic_cast(tempPointer); gridPointer->setName(name); XDMF_ERROR_WRAP_END(status) } void XdmfGridSetTime(XDMFGRID * grid, XDMFTIME * time, int passControl) { XdmfItem * classedPointer = (XdmfItem *)grid; XdmfGrid * gridPointer = dynamic_cast(classedPointer); if (passControl) { gridPointer->setTime(shared_ptr((XdmfTime *)time)); } else { gridPointer->setTime(shared_ptr((XdmfTime *)time, XdmfNullDeleter())); } } XDMF_ITEM_C_CHILD_WRAPPER(XdmfGrid, XDMFGRID)