/**
* Ashita - Copyright ( c ) 2014 - 2021 atom0s [ atom0s @ live . com ]
*
* This work is licensed under the Creative Commons Attribution - NonCommercial - NoDerivatives 4.0 International License .
* To view a copy of this license , visit http : //creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to
* Creative Commons , PO Box 1866 , Mountain View , CA 94042 , USA .
*
* By using Ashita , you agree to the above license and its terms .
*
* Attribution - You must give appropriate credit , provide a link to the license and indicate if changes were
* made . You must do so in any reasonable manner , but not in any way that suggests the licensor
* endorses you or your use .
*
* Non - Commercial - You may not use the material ( Ashita ) for commercial purposes .
*
* No - Derivatives - If you remix , transform , or build upon the material ( Ashita ) , you may not distribute the
* modified material . You are , however , allowed to submit the modified works back to the original
* Ashita project in attempt to have it added to the original project .
*
* You may not apply legal terms or technological measures that legally restrict others
* from doing anything the license permits .
*
* No warranties are given .
*/
# ifndef __ASHITA_AS_LOCKABLEOBJECT_H_INCLUDED__
# define __ASHITA_AS_LOCKABLEOBJECT_H_INCLUDED__
# if defined (_MSC_VER) && (_MSC_VER >= 1020)
# pragma once
# endif
# include <Windows.h>
namespace Ashita
{
namespace Threading
{
class AS_LockableObject
{
CRITICAL_SECTION m_CriticalSection ;
// Delete the copy constructor.
AS_LockableObject ( const AS_LockableObject & obj ) = delete ;
public :
/**
* Constructor and Deconstructor
*/
AS_LockableObject ( void )
{
: : InitializeCriticalSection ( & this - > m_CriticalSection ) ;
}
virtual AS_LockableObject : : ~ AS_LockableObject ( void )
{
: : DeleteCriticalSection ( & this - > m_CriticalSection ) ;
}
public :
/**
* Locks the object for exclusive usage .
*/
void Lock ( void )
{
: : EnterCriticalSection ( & this - > m_CriticalSection ) ;
}
/**
* Unlocks the object from exclusive usage .
*/
void Unlock ( void )
{
: : LeaveCriticalSection ( & this - > m_CriticalSection ) ;
}
} ;
} ; // namespace Threading
} ; // namespace Ashita
# endif // __ASHITA_AS_LOCKABLEOBJECT_H_INCLUDED__