
///////////////////////////////////////////////////////////////////////////////
//
// File   : Asura_Handler_System_Callbacks.h
// Author : Andy Tate
// Date   : 30-Jan-2008
//
// Copyright (C) 2008 Rebellion, All Rights Reserved.
//
///////////////////////////////////////////////////////////////////////////////

#ifdef ASURA_USE_PRAGMA_ONCE
	#pragma once
#endif   // ifdef ASURA_USE_PRAGMA_ONCE

#ifndef __ASURA_HANDLER_SYSTEM_CALLBACKS_H__
#define __ASURA_HANDLER_SYSTEM_CALLBACKS_H__

#if defined(ASURA_USE_MULTIPLE_HANDLERS)

////////////////////////////////////////////////////////////////////////////////
// Include files...
////////////////////////////////////////////////////////////////////////////////

#include "Core/Asura_Hash.h"


////////////////////////////////////////////////////////////////////////////////
// Forward class declarations...
////////////////////////////////////////////////////////////////////////////////

class Asura_Stream;


////////////////////////////////////////////////////////////////////////////////
// Class declaration...
////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////
// Class        : Asura_Handler_System_Callbacks
// Author       : Andy Tate
// Date         : 29-Jan-2008
//
// Description  : Abstract class used to create platform/project/platform-project
//				  specific functions for use by the handler-system.
////////////////////////////////////////////////////////////////////////////////

class Asura_Handler_System_Callbacks
{
public:
	// Public functions...

	// Abstract functions to be overridden for platform/project/platform-project data...
	virtual bool	CreateHandlerData(u_int& uHandlerIndex, const Asura_Hash_ID uHandlerHash, const u_int uDataIndex, const char* szName, const Asura_Hash_ID uParentHandlerHash)	= 0;
	virtual	bool	DestroyHandlerData(u_int& uHandlerIndex, const Asura_Hash_ID uHandlerHash, const u_int uDataIndex)	= 0;
	virtual void	ReparentAllHandlerData(const Asura_Hash_ID uHandlerHash, const Asura_Hash_ID uParentHandlerHash)	= 0;
	virtual void	SetAllHandlerData(const Asura_Hash_ID uHandlerHash, const u_int uDataIndex)	= 0;

	virtual bool	CreateZoneData(u_int& uHandlerIndex, const Asura_Hash_ID uHandlerHash, const u_int uDataIndex, const char* szName, const Asura_Hash_ID uParentHandlerHash, const Asura_Hash_ID uZoneHash, const bool bAllowEnvironment)	= 0;
	virtual bool	DestroyZoneData(u_int& uHandlerIndex, const Asura_Hash_ID uHandlerHash, const u_int uDataIndex, const bool bAllowEnvironment)	= 0;
	virtual void	ReparentAllZoneData(const Asura_Hash_ID uHandlerHash, const Asura_Hash_ID uParentHandlerHash)	= 0;
	virtual void	SetAllZoneData(const Asura_Hash_ID uHandlerHash, const u_int uDataIndex, const bool bAllowEnvironment)	= 0;

#if defined(ASURA_LOGFILES_ENABLED)
	virtual void	CreateReport(const Asura_Hash_ID uHandlerHash, Asura_Stream& xOutputStream)	= 0;
#endif	//defined(ASURA_LOGFILES_ENABLED)


protected:
	// Protected variables...
	Asura_Handler_System_Callbacks(void)		{}
	virtual ~Asura_Handler_System_Callbacks()	{}

	// Protected functions...


private:
	// Private variables...

	// Private functions...
	Asura_Handler_System_Callbacks(const Asura_Handler_System_Callbacks& xOther);

	Asura_Handler_System_Callbacks&	operator=(const Asura_Handler_System_Callbacks& xOther);

};   // End of class 'Asura_Handler_System_Callbacks'.

#endif	//defined(ASURA_USE_MULTIPLE_HANDLERS)

#endif	// ifndef __ASURA_HANDLER_SYSTEM_CALLBACKS_H__


/// End of file. ///
