Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
IdleManager.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4
5namespace Stroika::Frameworks::Led {
6
7 /*
8 ********************************************************************************
9 ****************************** NonIdleContext **********************************
10 ********************************************************************************
11 */
12 inline IdleManager::NonIdleContext::NonIdleContext ()
13 {
14 IdleManager::Get ().SetInIdleMode (false);
15 ++IdleManager::Get ().fNonIdleContextCount;
16 }
17 inline IdleManager::NonIdleContext::~NonIdleContext ()
18 {
19 Assert (IdleManager::Get ().fNonIdleContextCount > 0);
20 --IdleManager::Get ().fNonIdleContextCount;
21 }
22
23 /*
24 ********************************************************************************
25 ********************************* IdleManager **********************************
26 ********************************************************************************
27 */
28 inline IdleManager::IdleManager ()
29 : fNonIdleContextCount{0}
30 , fIdleManagerOSImpl{nullptr}
31 , fIdlers{}
32 , fNeedMgrIdleCalls{false}
33 , fEnterIdlers{}
34 {
35 }
36 inline IdleManager& IdleManager::Get ()
37 {
38 static IdleManager sThe_;
39 return sThe_;
40 }
41 inline bool IdleManager::GetInIdleMode () const
42 {
43 return fInIdleMode_;
44 }
45 inline void IdleManager::SetInIdleMode (bool inIdleMode)
46 {
47 bool effectiveInIdleMode = inIdleMode and fNonIdleContextCount == 0;
48 bool enteringIdle = not fInIdleMode_ and effectiveInIdleMode;
49 fInIdleMode_ = effectiveInIdleMode;
50 if (enteringIdle) {
51 CallEnterIdle ();
52 }
53 }
54
55}