Skip to content
Snippets Groups Projects
ElementData.cc 1.55 KiB
#include "MemoryManager.h"
#include "ElementData.h"

namespace AMDiS {

  void ElementData::coarsenElementData(Element* parent, 
				       Element* thisChild,
				       Element* otherChild,
				       int elTypeParent) 
  {
    if (decorated_) {
      decorated_->coarsenElementData(parent, thisChild, otherChild, elTypeParent);
      delete decorated_;
      decorated_ = NULL;
    }
  }

  bool ElementData::deleteDecorated(int typeID)
  {
    if (decorated_) {
      if (decorated_->isOfType(typeID)) {
	ElementData *tmp = decorated_;
	decorated_ = decorated_->decorated_;
	delete tmp;
	tmp = NULL;
	return true;
      } else {
	return decorated_->deleteDecorated(typeID);
      }
    } 
    return false;    
  }

  void ElementData::deleteDecorated()
  {
    if (decorated_) {
      decorated_->deleteDecorated();
      DELETE decorated_;
    }
  }
  
  ElementData::~ElementData()
  {
  }

  void ElementData::serialize(std::ostream& out) 
  {
    std::string decoratedType;
    if (decorated_) {
      decoratedType = decorated_->getTypeName();
      out << decoratedType << "\n";
      decorated_->serialize(out);
    } else {
      out << "NULL\n";
    }
  }

  void ElementData::deserialize(std::istream& in) 
  {
    TEST_EXIT(decorated_ == NULL)
      ("there are already decorated element data\n");
    std::string decoratedType;
    in >> decoratedType; 
    in.get();
    if (decoratedType != "NULL") {
      decorated_ = CreatorMap<ElementData>::getCreator(decoratedType)->create();
      decorated_->deserialize(in);
    } else {
      decorated_ = NULL;
    }
  }

}