← index
Old.Learning.Projects/eternal_variables/eternal.h
Source: Old.Learning.Projects/eternal_variables/eternal.h
#include<fstream>


using namespace std;


template<class type>
class eternal {
	
	struct Data
	{
		type t;
		bool on;

		inline Data()
		{
			on = false;
		}
	};

	Data dat;

public:

	eternal(type t, char *filename);
	~eternal();
	type get();
	void save();
	void load();
	void operator=(type t);


	char *str;


};

template<class type>
eternal<type>::eternal(type init, char *filename)
{
	str = filename;
	load();
	if(dat.on == false)
	{
		dat.on = true;
		dat.t = init;
	}
}

template<class type>
eternal<type>::~eternal()
{
	save();
}

template<class type>
void eternal<type>::save()
{
	ofstream fout(str,ios::binary);
	fout.write((char*)&dat,sizeof(dat));
	fout.close();

}

template<class type>
void eternal<type>::load()
{
	ifstream fin(str,ios::binary);
	fin.read((char*)&dat,sizeof(dat));
	fin.close();
} 

template<class type>
type eternal<type>::get()
{
	return dat.t;
}

template<class type>
void eternal<type>::operator=(type x)
{
	dat.t = x;
}