
#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 Gmsh_IO: public Mesh_IO
{
private:

	// internal functions for reading parts of ascii file
	void readMeshFormat(std::ifstream&, Mesh*);
	void readNodes(std::ifstream&, Mesh*);
	void readPhysicalEntities(std::ifstream&, Mesh*);
	void readElements(std::ifstream&, Mesh*);

	void writeASCIIMesh(std::string&, Mesh*);
	void writeBinaryMesh(std::string&, Mesh*);
public:
	Gmsh_IO();

	//instances of virtual functions for reading and writing mesh
	void readMesh(std::string&, Mesh*);

	void writeMesh(std::string&, Mesh*);

};
