#include "ElementData.h"

namespace AMDiS {

  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;
    };
  }

}