1 /*
2  *  tracker/PlayerCriticalSection.h
3  *
4  *  Copyright 2009 Peter Barth
5  *
6  *  This file is part of Milkytracker.
7  *
8  *  Milkytracker is free software: you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation, either version 3 of the License, or
11  *  (at your option) any later version.
12  *
13  *  Milkytracker is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with Milkytracker.  If not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22 
23 /*
24  *  PlayerCriticalSection.h
25  *  MilkyTracker
26  *
27  *  Created by Peter Barth on 12.12.07.
28  *
29  */
30 
31 #ifndef __PLAYERCRITICALSECTION_H__
32 #define __PLAYERCRITICALSECTION_H__
33 
34 #include "PlayerController.h"
35 
36 class PlayerCriticalSection
37 {
38 private:
39 	PlayerController& playerController;
40 	bool enabled;
41 
42 public:
PlayerCriticalSection(PlayerController & playerController)43 	PlayerCriticalSection(PlayerController& playerController) :
44 		playerController(playerController),
45 		enabled(false)
46 	{
47 	}
48 
49 	void enter(bool stopPlaying = true)
50 	{
51 		if (enabled)
52 			return;
53 		playerController.suspendPlayer(false, stopPlaying);
54 		enabled = true;
55 	}
56 
57 	void leave(bool continuePlaying = true)
58 	{
59 		if (!enabled)
60 			return;
61 		playerController.resumePlayer(continuePlaying);
62 		enabled = false;
63 	}
64 };
65 
66 #endif
67