diff options
Diffstat (limited to 'src/boost/libs/statechart/example/Camera/Main.cpp')
-rw-r--r-- | src/boost/libs/statechart/example/Camera/Main.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/boost/libs/statechart/example/Camera/Main.cpp b/src/boost/libs/statechart/example/Camera/Main.cpp new file mode 100644 index 000000000..d99bfe9e4 --- /dev/null +++ b/src/boost/libs/statechart/example/Camera/Main.cpp @@ -0,0 +1,110 @@ +////////////////////////////////////////////////////////////////////////////// +// Copyright 2002-2006 Andreas Huber Doenni +// Distributed under the Boost Software License, Version 1.0. (See accompany- +// ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +////////////////////////////////////////////////////////////////////////////// + + + +////////////////////////////////////////////////////////////////////////////// +// This program shows how a state machine can be spread over several +// translation units if necessary. The inner workings of a digital camera are +// modeled, the corresponding state chart looks as follows: +// +// --------------------------- +// | | +// | NotShooting | +// | | +// | ------------- |<---O +// | O--->| Idle | | -------------- +// | ------------- | EvShutterHalf | | +// | | ^ |------------------>| Shooting | +// | EvConfig | | EvConfig | | | +// | v | | EvShutterRelease | | +// | ------------- |<------------------| | +// | | Configuring | | | | +// | ------------- | -------------- +// --------------------------- +// +// The states Configuring and Shooting will contain a large amount of logic, +// so they are implemented in their own translation units. This way one team +// could implement the Configuring mode while the other would work on the +// Shooting mode. Once the above state chart is implemented, the teams could +// work completely independently of each other. + + + +#include "Precompiled.hpp" +#include "Camera.hpp" +#include <iostream> + + + +////////////////////////////////////////////////////////////////////////////// +char GetKey() +{ + char key; + std::cin >> key; + return key; +} + + +////////////////////////////////////////////////////////////////////////////// +int main() +{ + std::cout << "Boost.Statechart Camera example\n\n"; + + std::cout << "h<CR>: Press shutter half-way\n"; + std::cout << "f<CR>: Press shutter fully\n"; + std::cout << "r<CR>: Release shutter\n"; + std::cout << "c<CR>: Enter/exit configuration\n"; + std::cout << "e<CR>: Exits the program\n\n"; + std::cout << "You may chain commands, e.g. hfr<CR> first presses the shutter half-way,\n"; + std::cout << "fully and then releases it.\n\n"; + + + Camera myCamera; + myCamera.initiate(); + + char key = GetKey(); + + while ( key != 'e' ) + { + switch( key ) + { + case 'h': + { + myCamera.process_event( EvShutterHalf() ); + } + break; + + case 'f': + { + myCamera.process_event( EvShutterFull() ); + } + break; + + case 'r': + { + myCamera.process_event( EvShutterRelease() ); + } + break; + + case 'c': + { + myCamera.process_event( EvConfig() ); + } + break; + + default: + { + std::cout << "Invalid key!\n"; + } + break; + } + + key = GetKey(); + } + + return 0; +} |