AHierarchicalStateMachine.h revision 05ca3bfb847ff3c1980f2f0922a4d494c0e7ebab
127c174483a8ae9688d5d4897c19074f62c7f1701James Dong/*
227c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Copyright (C) 2010 The Android Open Source Project
327c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
427c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Licensed under the Apache License, Version 2.0 (the "License");
527c174483a8ae9688d5d4897c19074f62c7f1701James Dong * you may not use this file except in compliance with the License.
627c174483a8ae9688d5d4897c19074f62c7f1701James Dong * You may obtain a copy of the License at
727c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
827c174483a8ae9688d5d4897c19074f62c7f1701James Dong *      http://www.apache.org/licenses/LICENSE-2.0
927c174483a8ae9688d5d4897c19074f62c7f1701James Dong *
1027c174483a8ae9688d5d4897c19074f62c7f1701James Dong * Unless required by applicable law or agreed to in writing, software
1127c174483a8ae9688d5d4897c19074f62c7f1701James Dong * distributed under the License is distributed on an "AS IS" BASIS,
1227c174483a8ae9688d5d4897c19074f62c7f1701James Dong * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1327c174483a8ae9688d5d4897c19074f62c7f1701James Dong * See the License for the specific language governing permissions and
1427c174483a8ae9688d5d4897c19074f62c7f1701James Dong * limitations under the License.
1527c174483a8ae9688d5d4897c19074f62c7f1701James Dong */
1627c174483a8ae9688d5d4897c19074f62c7f1701James Dong
17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#ifndef A_HIERARCHICAL_STATE_MACHINE_H_
18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define A_HIERARCHICAL_STATE_MACHINE_H_
20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/AHandler.h>
22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
23f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android {
24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
25f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct AState : public RefBase {
26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    AState(const sp<AState> &parentState = NULL);
27f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
28f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<AState> parentState();
29f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
30f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected:
31f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual ~AState();
32f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual void stateEntered();
34f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual void stateExited();
35f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
36f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual bool onMessageReceived(const sp<AMessage> &msg) = 0;
37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
38f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate:
39f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    friend struct AHierarchicalStateMachine;
40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
41f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<AState> mParentState;
42f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
43f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(AState);
44f933441648ef6a71dee783d733aac17b9508b452Andreas Huber};
45f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
4605ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnarstruct AHierarchicalStateMachine {
47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    AHierarchicalStateMachine();
48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
49f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected:
50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    virtual ~AHierarchicalStateMachine();
51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
5205ca3bfb847ff3c1980f2f0922a4d494c0e7ebabLajos Molnar    virtual void handleMessage(const sp<AMessage> &msg);
53f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
54f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    // Only to be called in response to a message.
55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    void changeState(const sp<AState> &state);
56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
57f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate:
58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    sp<AState> mState;
59f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber    DISALLOW_EVIL_CONSTRUCTORS(AHierarchicalStateMachine);
61f933441648ef6a71dee783d733aac17b9508b452Andreas Huber};
62f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
63f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}  // namespace android
64f933441648ef6a71dee783d733aac17b9508b452Andreas Huber
65f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif  // A_HIERARCHICAL_STATE_MACHINE_H_
66