//	Darkstar Engine  (c) UnderWorld Interactive Studio (all coding by Svarog    2007)
//
//      Данный файл является частью Darkstar Engine. Любое использование кода файла
//      без согласия компании, является нарушением закона об авторском праве (в слу-
//      чае если не оговорено обратное).
//
//      Имя файла: standardFileLoader.hpp
//      Краткое описание: загрузчик файлов из директории
//

#ifndef DSE_KERNEL_FILESYSTEM_STANDARDFILELOADER_HPP
#define DSE_KERNEL_FILESYSTEM_STANDARDFILELOADER_HPP

#include <Darkstar/common.hpp>
#include <Darkstar/Kernel/Log/log.hpp>
#include <Darkstar/Kernel/FileSystem/baseFileLoader.hpp>
#include <Darkstar/Kernel/FileSystem/fileManager.hpp>

#include <Darkstar/Kernel/threads.hpp>

namespace ker
{
	const int notify_information_struct_num = 100;

	class StandardFileLoader : public BaseFileLoader
	{
	private:
		std::string dir;

		std::set<std::string> filenames;

		shared_ptr<Thread> directory_viewer;

		struct data_struct
		{
			std::string dh;
			shared_ptr<std::set<std::string> > fn;
		};

		static DWORD WINAPI readDirChangeThread(LPVOID param);
	public:
		StandardFileLoader(const std::string& directory);
		~StandardFileLoader();

		bool open(const std::string& filename, FileData* data);
		bool close(const DFHANDLE id) const;
		bool read(const DFHANDLE id, const unsigned int size, void* read) const;
		bool skip(const DFHANDLE id, const unsigned int size) const;

		const std::set<std::string>& getSetOfChanges() const;
	};
};

#include <Darkstar/Kernel/FileSystem/standardFileLoader.inl>

#endif