/*! \file piinit.h
 * \brief Initialization
*/
/*
	PIP - Platform Independent Primitives
	Initialization
	Ivan Pelipenko peri4ko@yandex.ru

	This program is free software: you can redistribute it and/or modify
	it under the terms of the GNU Lesser General Public License as published by
	the Free Software Foundation, either version 3 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public License
	along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef PIINIT_H
#define PIINIT_H

#include "piincludes.h"


class PIFile;
class PIStringList;


class PIP_EXPORT __PIInit_Initializer__ {
public:
	__PIInit_Initializer__();
	~__PIInit_Initializer__();
	static int count_;
	static PIInit * __instance__;
};

static __PIInit_Initializer__ __piinit_initializer__;


class PIP_EXPORT PIInit {
	friend class __PIInit_Initializer__;
	friend class PIFile;
public:
	~PIInit();

	//! \brief Build options which PIP library was built
	enum BuildOption {
		ICU /*! Unicode support */ = 0x01,
		USB /*! USB support */ = 0x02,
		Crypt /*! Crypt support */ = 0x08,
		Introspection /*! Introspection */ = 0x010,
		FFTW /*! FFTW3 support */ = 0x40,
		Compress /*! Zlib compression support */ = 0x80,
		OpenCL /*! OpenCL support */ = 0x100,
		Cloud /*! Cloud transport support */ = 0x200,
	};
	static PIInit * instance() {return __PIInit_Initializer__::__instance__;}
	static bool isBuildOptionEnabled(BuildOption o);
	static PIStringList buildOptions();
private:
	explicit PIInit();
	void setFileCharset(const char *charset);
	bool fileExists(const PIString & p);
	PRIVATE_DECLARATION(PIP_EXPORT)
	char * file_charset;
};


#endif // PIINIT_H
