Ajout version Release/x64 avec les libraries x64 et tuning de la version Debug
This commit is contained in:
		
							
								
								
									
										119
									
								
								SQCSim2021/external/irrKlang-64bit-1.6.0/include/ik_IRefCounted.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								SQCSim2021/external/irrKlang-64bit-1.6.0/include/ik_IRefCounted.h
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| // Copyright (C) 2002-2018 Nikolaus Gebhardt | ||||
| // This file is part of the "irrKlang" library. | ||||
| // For conditions of distribution and use, see copyright notice in irrKlang.h | ||||
|  | ||||
| #ifndef __I_IRRKLANG_IREFERENCE_COUNTED_H_INCLUDED__ | ||||
| #define __I_IRRKLANG_IREFERENCE_COUNTED_H_INCLUDED__ | ||||
|  | ||||
| #include "ik_irrKlangTypes.h" | ||||
|  | ||||
| namespace irrklang | ||||
| { | ||||
| 	//! Base class of most objects of the irrKlang. | ||||
| 	/** This class provides reference counting through the methods grab() and drop(). | ||||
| 	It also is able to store a debug string for every instance of an object. | ||||
| 	Most objects of irrKlang are derived from IRefCounted, and so they are reference counted. | ||||
|  | ||||
| 	When you receive an object in irrKlang (for example an ISound using play2D() or | ||||
| 	play3D()), and you no longer need the object, you have  | ||||
| 	to call drop(). This will destroy the object, if grab() was not called | ||||
| 	in another part of you program, because this part still needs the object. | ||||
| 	Note, that you only don't need to call drop() for all objects you receive, it | ||||
| 	will be explicitely noted in the documentation. | ||||
|  | ||||
| 	A simple example: | ||||
|  | ||||
| 	If you want to play a sound, you may want to call the method | ||||
| 	ISoundEngine::play2D. You call | ||||
| 	ISound* mysound = engine->play2D("foobar.mp3", false, false true); | ||||
| 	If you no longer need the sound interface, call mysound->drop(). The  | ||||
| 	sound may still play on after this because the engine still has a reference | ||||
| 	to that sound, but you can be sure that it's memory will be released as soon | ||||
| 	the sound is no longer used. | ||||
|  | ||||
| 	If you want to add a sound source, you may want to call a method | ||||
| 	ISoundEngine::addSoundSourceFromFile. You do this like | ||||
| 	ISoundSource* mysource = engine->addSoundSourceFromFile("example.jpg"); | ||||
| 	You will not have to drop the pointer to the source, because | ||||
| 	sound sources are managed by the engine (it will live as long as the sound engine) and | ||||
| 	the documentation says so.  | ||||
| 	*/ | ||||
| 	class IRefCounted | ||||
| 	{ | ||||
| 	public: | ||||
|  | ||||
| 		//! Constructor. | ||||
| 		IRefCounted() | ||||
| 			: ReferenceCounter(1) | ||||
| 		{ | ||||
| 		} | ||||
|  | ||||
| 		//! Destructor. | ||||
| 		virtual ~IRefCounted() | ||||
| 		{ | ||||
| 		} | ||||
|  | ||||
| 		//! Grabs the object. Increments the reference counter by one. | ||||
| 		//! Someone who calls grab() to an object, should later also call | ||||
| 		//! drop() to it. If an object never gets as much drop() as grab() | ||||
| 		//! calls, it will never be destroyed. | ||||
| 		//! The IRefCounted class provides a basic reference counting mechanism | ||||
| 		//! with its methods grab() and drop(). Most objects of irrklang | ||||
| 		//! are derived from IRefCounted, and so they are reference counted. | ||||
| 		//! | ||||
| 		//! When you receive an object in irrKlang (for example an ISound using play2D() or | ||||
| 		//! play3D()), and you no longer need the object, you have  | ||||
| 		//! to call drop(). This will destroy the object, if grab() was not called | ||||
| 		//! in another part of you program, because this part still needs the object. | ||||
| 		//! Note, that you only don't need to call drop() for all objects you receive, it | ||||
| 		//! will be explicitely noted in the documentation. | ||||
| 		//!  | ||||
| 		//! A simple example: | ||||
| 		//!  | ||||
| 		//! If you want to play a sound, you may want to call the method | ||||
| 		//! ISoundEngine::play2D. You call | ||||
| 		//! ISound* mysound = engine->play2D("foobar.mp3", false, false true); | ||||
| 		//! If you no longer need the sound interface, call mysound->drop(). The  | ||||
| 		//! sound may still play on after this because the engine still has a reference | ||||
| 		//! to that sound, but you can be sure that it's memory will be released as soon | ||||
| 		//! the sound is no longer used. | ||||
| 		void grab() { ++ReferenceCounter; } | ||||
|  | ||||
| 		//! When you receive an object in irrKlang (for example an ISound using play2D() or | ||||
| 		//! play3D()), and you no longer need the object, you have  | ||||
| 		//! to call drop(). This will destroy the object, if grab() was not called | ||||
| 		//! in another part of you program, because this part still needs the object. | ||||
| 		//! Note, that you only don't need to call drop() for all objects you receive, it | ||||
| 		//! will be explicitely noted in the documentation. | ||||
| 		//!  | ||||
| 		//! A simple example: | ||||
| 		//!  | ||||
| 		//! If you want to play a sound, you may want to call the method | ||||
| 		//! ISoundEngine::play2D. You call | ||||
| 		//! ISound* mysound = engine->play2D("foobar.mp3", false, false true); | ||||
| 		//! If you no longer need the sound interface, call mysound->drop(). The  | ||||
| 		//! sound may still play on after this because the engine still has a reference | ||||
| 		//! to that sound, but you can be sure that it's memory will be released as soon | ||||
| 		//! the sound is no longer used. | ||||
| 		bool drop() | ||||
| 		{ | ||||
| 			--ReferenceCounter; | ||||
|  | ||||
| 			if (!ReferenceCounter) | ||||
| 			{ | ||||
| 				delete this; | ||||
| 				return true; | ||||
| 			} | ||||
|  | ||||
| 			return false; | ||||
| 		} | ||||
|  | ||||
| 	private: | ||||
|  | ||||
| 		ik_s32	ReferenceCounter; | ||||
| 	}; | ||||
|  | ||||
| } // end namespace irr | ||||
|  | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user