⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stoplight.cpp

📁 SMC takes a state machine stored in a .sm file and generates a State pattern in twelve programming l
💻 CPP
字号:
//// The contents of this file are subject to the Mozilla Public// License Version 1.1 (the "License"); you may not use this file// except in compliance with the License. You may obtain a copy of// the License at http://www.mozilla.org/MPL/// // Software distributed under the License is distributed on an "AS// IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or// implied. See the License for the specific language governing// rights and limitations under the License.// // The Original Code is State Machine Compiler (SMC).// // The Initial Developer of the Original Code is Charles W. Rapp.// Portions created by Charles W. Rapp are// Copyright (C) 2000 - 2003 Charles W. Rapp.// All Rights Reserved.// // Contributor(s): //// Class//	Stoplight//// Member Functions//	Stoplight()						   - Default constructor.//	Stoplight(Directions)			   - Set initial direction.//	TurnLight(StopLights, LightColors) - Change directions.//	SetTimer(int)					   - Start a timer.//	Initialize(Directions)			   - Set start state and timer.//// RCS ID// $Id: stoplight.cpp,v 1.7 2008/04/23 12:08:33 fperrad Exp $//// CHANGE LOG// $Log: stoplight.cpp,v $// Revision 1.7  2008/04/23 12:08:33  fperrad// + fix #1934479 (tested on Ubuntu 7.10, gcc 4.1.3)//// Revision 1.6  2005/05/28 13:31:18  cwrapp// Updated C++ examples.//// Revision 1.0  2003/12/14 19:25:59  charlesr// Initial revision//#ifdef WIN32#pragma warning(disable: 4355)#endif#ifdef WIN32#include <windows.h>#include <winbase.h>#else#include <sys/time.h>#endif#include <stdlib.h>#include "stoplight.h"const static char _rcs_id[] = "$Id: stoplight.cpp,v 1.7 2008/04/23 12:08:33 fperrad Exp $";using namespace std;extern int NSGreenTimer;extern int EWGreenTimer;#ifdef WIN32extern DWORD Gtimeout;#endifnamespace cpp_ex4{    Stoplight::Stoplight()        : _fsm(*this)    {        Initialize(NORTH_SOUTH);        // Uncomment to see debug messages.        // _fsm.setDebugFlag(true);    }    Stoplight::Stoplight(Directions direction)        : _fsm(*this)    {        Initialize(direction);    }    void Stoplight::TurnLight(StopLights light, LightColors color)    {        cout << "Turning the ";        switch(light)        {            case EWLIGHT:                cout << "east-west lights ";                break;            case NSLIGHT:                cout << "north-south lights ";                break;        }        switch(color)        {            case GREEN:                cout << "green." << endl;                break;            case YELLOW:                cout << "yellow." << endl;                break;            case RED:                cout << "red." << endl;                break;        }        return;    }    void Stoplight::SetTimer(int seconds)    {#ifdef WIN32        Gtimeout = seconds * 1000;#else        itimerval timeout;        timeout.it_value.tv_sec = seconds;        timeout.it_value.tv_usec = 0;        timeout.it_interval.tv_sec = 0;        timeout.it_interval.tv_usec = 0;        if (setitimer(ITIMER_REAL, &timeout, (itimerval *) NULL) < 0)        {            cerr << "Failed to set timer. Quitting application." << endl;            exit(1);        }#endif        return;    }    void Stoplight::Initialize(Directions direction)    {        switch(direction)        {            case NORTH_SOUTH:                cout << "Turning the north-south lights green." << endl;                _fsm.setState(StopMap::NorthSouthGreen);                SetTimer(NSGreenTimer);                break;            case EAST_WEST:                cout << "Turning the east-west lights green." << endl;                _fsm.setState(StopMap::EastWestGreen);                SetTimer(EWGreenTimer);                break;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -