/*************************************************************************************************
** Project:     FSMGenerator
** Package:     FSMGenerator
** Module:      FSMGenerator::db
** File:        FSMState.cpp
** Date:        2002.08.01
** Author:      Pavel Bekkerman (chpavel@tx.technion.ac.il)
** Copyright:   Copyright (C) 2002 Pavel Bekkerman
** License:
**              This program is free software; you can redistribute it and/or
**              modify it under the terms of the GNU General Public License as
**              published by the Free Software Foundation; either version 2 of
**              the License, or (at your option) any later version.
**
**              This program is distributed in the hope that it will be useful,
**              but WITHOUT ANY WARRANTY; without even the implied warranty of
**              MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**              GNU General Public License for more details.
**
**              You should have received a copy of the GNU General Public License
**              along with this program; if not, write to the Free Software
**              Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
**
** Contact:     Pavel Bekkerman (chpavel@tx.technion.ac.il)
*************************************************************************************************/

#include "FSMState.h"
#include "../FSMGlobals.h"

//********************************************************* State Functions

//******************** Constructor

FSMGenerator::State::State(const string& strName, ID id)
	: m_strName(strName), m_id(id), 
	m_bFinal(false), m_indEnterCallback(NULL_INDEX), m_indExitCallback(NULL_INDEX)
{
}

//******************** Destructor

FSMGenerator::State::~State()
{
}

//******************** Name

const string&
FSMGenerator::State::Name()const 
{
	return m_strName;
}

//******************** GetID

ID
FSMGenerator::State::GetID()const 
{
	return m_id;
}

//******************** IsFinal

bool
FSMGenerator::State::IsFinal()const 
{
	return m_bFinal;
}

//******************** EnterCall
INDEX
FSMGenerator::State::EnterCall()const 
{
	return m_indEnterCallback;
}

//******************** ExitCall
INDEX
FSMGenerator::State::ExitCall()const 
{
	return m_indExitCallback;
}

//******************** SetCallbacks

void
FSMGenerator::State::SetCallbacks(INDEX indEnterCall, INDEX indExitCall)
{
	if(m_indEnterCallback != NULL_INDEX)
		throw string("Error: Enter Callback was already attached to '"+m_strName+"' state.");
	if(m_indExitCallback != NULL_INDEX)
		throw string("Error: Exit Callback was already attached to '"+m_strName+"' state.");

	m_indEnterCallback = indEnterCall;
	m_indExitCallback  = indExitCall;
}

//******************** SetFinal

void
FSMGenerator::State::SetFinal(bool bFinal)
{
	m_bFinal = bFinal;
}


