
#pragma once

#include <fstream>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <string>
#include <chrono>
#include <sstream>
#include <string>
#include "Mesh.h"
#include "Mesh_IO.h"

class ElmerMesh_IO : public Mesh_IO
{

public:
	ElmerMesh_IO();

	//instances of virtual functions for reading and writing mesh
	void readMesh(std::string&, Mesh*);

	void writeMesh(std::string&, Mesh*);

private:
	void writeNodes(std::string&, Mesh* mesh);
	void writeElements(std::string&, Mesh* mesh);
	void writeBoundary(std::string&, Mesh* mesh);
	void writeHeader(std::string&, Mesh* mesh);

	std::map<int, int> node_id_map;
	std::map<int, int> element_id_map;
	std::map<int, int> etype_to_elmer;


};
