acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
aaa_gen_1.h
1
2// other global state
3class push_routing_frame
4{
5protected:
6 frame_window* pOldRoutingFrame;
7 _WINDOWS_DEFINITION_THREAD_STATE* pThreadState;
8 push_routing_frame* pOldPushRoutingFrame;
9
10public:
11 explicit push_routing_frame(frame_window* pNewRoutingFrame)
12 {
13 pThreadState = ::windows_definition::GetThreadState();
14 pOldPushRoutingFrame = pThreadState->m_pPushRoutingFrame;
15 pOldRoutingFrame = pThreadState->m_pRoutingFrame;
16 pThreadState->m_pRoutingFrame = pNewRoutingFrame;
17 pThreadState->m_pPushRoutingFrame = this;
18 }
19 ~push_routing_frame()
20 {
21 if (pThreadState != nullptr)
22 {
23 ASSERT( pThreadState->m_pPushRoutingFrame == this );
24 pThreadState->m_pRoutingFrame = pOldRoutingFrame;
25 pThreadState->m_pPushRoutingFrame = pOldPushRoutingFrame;
26 }
27 }
28 void pop()
29 {
30 ENSURE( pThreadState != nullptr );
31 ASSERT( pThreadState->m_pPushRoutingFrame == this );
32 pThreadState->m_pRoutingFrame = pOldRoutingFrame;
33 pThreadState->m_pPushRoutingFrame = pOldPushRoutingFrame;
34 pThreadState = nullptr;
35 }
36};