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 46f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct AHierarchicalStateMachine : public AHandler { 47f933441648ef6a71dee783d733aac17b9508b452Andreas Huber AHierarchicalStateMachine(); 48f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 49f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 50f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~AHierarchicalStateMachine(); 51f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 52f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(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