⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 icenotifsystem.h

📁 使用stl技术,(还没看,是听说的)
💻 H
字号:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
 *	Contains the notification system.
 *	\file		IceNotifSystem.h
 *	\author		Pierre Terdiman
 *	\date		April, 20, 2001
 */
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __ICENOTIFSYSTEM_H__
#define __ICENOTIFSYSTEM_H__

	// Forward declarations
	class NotifSystem;

	// Create & return the global notification system
	FUNCTION ICECORE_API NotifSystem*	GetNotifSystem();
	// Release the global notification system
	FUNCTION ICECORE_API void			ReleaseNotifSystem();

	class ICECORE_API NotifSystem
	{
		private:
		// Constructor/Destructor
										NotifSystem();
										~NotifSystem();
		public:
		// Register notification
						bool			AddNotif	(Cell* owner, udword notif_index, NotifCallback callback, udword user_data);
		// Unregister notification
						bool			RemoveNotif	(Cell* owner, udword notif_index, NotifCallback callback=null);
						bool			RemoveNotif	(Cell* owner);
		// Execute notification
						bool			ExecNotif	(udword notif_index, udword param, bool& result);
						bool			ExecNotif	(Cell* owner, udword notif_index, udword param, bool& result);
		// Per object array
		inline_			udword			GetNotifArraySize()	const		{ return mNotifArraySize;	}
		inline_			void			SetNotifArraySize(udword size)	{ mNotifArraySize = size;	}
		// Memory stats
						udword			GetUsedRam();

										PREVENT_COPY(NotifSystem)
		private:
						udword			mFlags;					//!< System flags

						udword			mMaxNbNotifs;			//!< Number of dwords allocated in mOwners & mRefs
						udword			mCurNbNotifs;			//!< Number of used entries

						Cell**			mOwners;				//!< List of owners
						udword*			mNotifIndex;			//!< List of notification indices
						NotifCallback*	mCallbacks;				//!< List of callbacks
						udword*			mUserData;				//!< List of user-defined data

						udword*			mSortedNotifIndices;	//!< List of sorted notification indices
						udword*			mNotifsOffsets;			//!< Radix-like offsets for notification indices
						udword			mMinNotif;				//!< Smallest notification index
						udword			mMaxNotif;				//!< Largest notification index

						udword			mNotifArraySize;		//!< Size of the notif array for each object
		// Internal methods
						udword			GetNbOwners(udword notif_index);
						bool			CreateOffsets();
						bool			PurgeList(const Container& killed);

		friend ICECORE_API NotifSystem*	GetNotifSystem();
		friend ICECORE_API void			ReleaseNotifSystem();
	};

#endif // __ICENOTIFSYSTEM_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -