#include "lfsaappl.h"
class FTskSimple : public LFsaAppl
{
public:
    LFsaAppl* Create(CVarFSA *pCVF) { Q_UNUSED(pCVF)return new FTskSimple(nameFsa); }
    bool FCreationOfLinksForVariables();
    FTskSimple(string strNam);
    virtual ~FTskSimple();
    CVar    *pVarF;
    CVar    *pVarN;
    CVar    *pVarStart;
    LFsaAppl *pFCall{nullptr};
protected:
    int x1();
    void y1(); void y2(); void y3();
};
#include "stdafx.h"
#include "FTskSimple.h"
#include "FSimpleFactorial.h"
LArc TT_Task[] = {
    LArc("st", "t1", "--",	"y1"),	
    LArc("t1", "t2", "x1",	"y3"),	
    LArc("t2", "t1", "--",	"y2"),	
    };
FTskSimple::FTskSimple(string strNam)
    :LFsaAppl(TT_Task, strNam)
{
}
FTskSimple::~FTskSimple() { if (pFCall) delete pFCall; }
bool FTskSimple::FCreationOfLinksForVariables() {
    pVarF = CreateLocVar("dF", CLocVar::vtDouble, "factorial value");
    pVarN = CreateLocVar("nN", CLocVar::vtInteger, "input value");
    pVarStart = CreateLocVar("bStart", CLocVar::vtBool, "start?");
    return true;
}
int FTskSimple::x1() { return pVarStart->GetDataSrc(); }
void FTskSimple::y1()
{
    
    pVarStart->SetDataSrc(this, 0.0);
    
    pFCall = new FSimpleFactorial(pVarN->GetDataSrc());
}
void FTskSimple::y2()
{
    
    pVarF->SetDataSrc(this, static_cast<FSimpleFactorial*>(pFCall)->dF);
}
void FTskSimple::y3()
{
    
    pVarStart->SetDataSrc(this, 0.0);
    static_cast<FSimpleFactorial*>(pFCall)->nN = pVarN->GetDataSrc();
    
    pFCall->FCall(this);
}