Click here to Skip to main content
15,880,651 members
Articles / Programming Languages / C++

An Automated System with Pipeline Concurrent Kernel

Rate me:
Please Sign up or sign in to vote.
3.46/5 (4 votes)
26 Jan 2007CPOL17 min read 25.6K   247   15  
A multithreaded solution is provided as a concurrent pipeline kernel for an automated bartender machine. The application engine can pipeline three of four different kinds of cocktail recipes for the system.
#include "stdafx.h"



#include "..\AutoBartender1.h"
#include "..\AutoBartender1Dlg.h"

#include "Route.h"

//-- CCustomRouteContext
CCustomRouteContext::CCustomRouteContext(CMachine *pEngine)
{
	m_pCocktailRecipe = NULL;
	m_pEngineRef = pEngine;
}

CCustomRouteContext::~CCustomRouteContext()
{
}

void CCustomRouteContext::AllocateRecipe(CCocktailRecipeBase *pRecipe)
{
	m_pCocktailRecipe = pRecipe;
}

void CCustomRouteContext::DeAllocateRecipe()
{
	m_pCocktailRecipe = NULL;
}

CAutoBartender1Dlg*	CCustomRouteContext::GetDialog()
{
	return m_pEngineRef->m_pDlg;
}

//-- CRoute1
CRoute1::CRoute1(knEngine *pEngine, CCustomRouteContext *pCustomRouteContext)	:
			knRoute(CString("Route 1"), 
					(knEngine *) pEngine, 
					(knRouteContext *) pCustomRouteContext) 
{
}

void CRoute1::Construct_CreateRoute_AddTask()
{

	CT1* pT1 = new CT1(this);
	CreateRoute_AddTask(pT1);

	CTr1* pTr1 = new CTr1(this);
	CreateRoute_AddTask(pTr1);

	CT2* pT2 = new CT2(this);
	CreateRoute_AddTask(pT2);

	CT3* pT3 = new CT3(this);
	CreateRoute_AddTask(pT3);

	CTr3* pTr3 = new CTr3(this);
	CreateRoute_AddTask(pTr3);

	CT4* pT4 = new CT4(this);
	CreateRoute_AddTask(pT4);

	CT5* pT5 = new CT5(this);
	CreateRoute_AddTask(pT5);

	CTr5* pTr5 = new CTr5(this);
	CreateRoute_AddTask(pTr5);

	CT6* pT6 = new CT6(this);
	CreateRoute_AddTask(pT6);


}

void CRoute1::BeginRoute(knRouteContext *pRouteContext)
{
}

// This is when the cocktail is processed.
void CRoute1::EndRoute(knRouteContext *pRouteContext)
{
	CCustomRouteContext* pCustomRouteContext = (CCustomRouteContext*) pRouteContext;

	(pCustomRouteContext->GetDialog())->EnableMenuButton_Maitai();
}

//-- CRoute2
CRoute2::CRoute2(knEngine *pEngine, CCustomRouteContext *pCustomRouteContext)	:
			knRoute(CString("Route 2"),					
					(knEngine *) pEngine, 
					(knRouteContext *) pCustomRouteContext) 
{
}

void CRoute2::Construct_CreateRoute_AddTask()
{

	CT1* pT1 = new CT1(this);
	CreateRoute_AddTask(pT1);

	CTr1* pTr1 = new CTr1(this);
	CreateRoute_AddTask(pTr1);

	CT2* pT2 = new CT2(this);
	CreateRoute_AddTask(pT2);

	CT3* pT3 = new CT3(this);
	CreateRoute_AddTask(pT3);

	CTr3* pTr3 = new CTr3(this);
	CreateRoute_AddTask(pTr3);

	CT4* pT4 = new CT4(this);
	CreateRoute_AddTask(pT4);

	CT5* pT5 = new CT5(this);
	CreateRoute_AddTask(pT5);

	CTr5* pTr5 = new CTr5(this);
	CreateRoute_AddTask(pTr5);

	CT6* pT6 = new CT6(this);
	CreateRoute_AddTask(pT6);

}

void CRoute2::BeginRoute(knRouteContext *pRouteContext)
{
}

// This is when the cocktail is processed.
void CRoute2::EndRoute(knRouteContext *pRouteContext)
{
	CCustomRouteContext* pCustomRouteContext = (CCustomRouteContext*) pRouteContext;

	(pCustomRouteContext->GetDialog())->EnableMenuButton_ScorpionBowl();
}


//-- CRoute3
CRoute3::CRoute3(knEngine *pEngine, CCustomRouteContext *pCustomRouteContext)	:
			knRoute(CString("Route 3"),					
					(knEngine *) pEngine, 
					(knRouteContext *) pCustomRouteContext) 
{
}

void CRoute3::Construct_CreateRoute_AddTask()
{

	CCocktailRecipeStep* pRecipeStep = NULL;


	CT1* pT1 = new CT1(this);
	CreateRoute_AddTask(pT1);

	CTr1* pTr1 = new CTr1(this);
	CreateRoute_AddTask(pTr1);

	CT2* pT2 = new CT2(this);
	CreateRoute_AddTask(pT2);

	CT3* pT3 = new CT3(this);
	CreateRoute_AddTask(pT3);

	CTr3* pTr3 = new CTr3(this);
	CreateRoute_AddTask(pTr3);

	CT4* pT4 = new CT4(this);
	CreateRoute_AddTask(pT4);

	CT5* pT5 = new CT5(this);
	CreateRoute_AddTask(pT5);

	CTr5* pTr5 = new CTr5(this);
	CreateRoute_AddTask(pTr5);

	CT6* pT6 = new CT6(this);
	CreateRoute_AddTask(pT6);

}


void CRoute3::BeginRoute(knRouteContext *pRouteContext)
{
}

// This is when the cocktail is processed.
void CRoute3::EndRoute(knRouteContext *pRouteContext)
{
	CCustomRouteContext* pCustomRouteContext = (CCustomRouteContext*) pRouteContext;

	(pCustomRouteContext->GetDialog())->EnableMenuButton_Zombie();
}



//-- CRoute4_Short
CRoute4_Short::CRoute4_Short(knEngine *pEngine, CCustomRouteContext *pCustomRouteContext)	:
			knRoute(CString("Route 4 Short"),					
					(knEngine *) pEngine, 
					(knRouteContext *) pCustomRouteContext) 
{
}

void CRoute4_Short::Construct_CreateRoute_AddTask()
{

	CCocktailRecipeStep* pRecipeStep = NULL;


	CT1* pT1 = new CT1(this);
	CreateRoute_AddTask(pT1);

	CTr1* pTr1 = new CTr1(this);
	CreateRoute_AddTask(pTr1);

	CT2* pT2 = new CT2(this);
	CreateRoute_AddTask(pT2);

	CT3_Martini* pT3_Martini = new CT3_Martini(this);
	CreateRoute_AddTask(pT3_Martini);

	CTr3_Martini* pTr3_Martini = new CTr3_Martini(this);
	CreateRoute_AddTask(pTr3_Martini);

	CT6* pT6 = new CT6(this);
	CreateRoute_AddTask(pT6);
}


void CRoute4_Short::BeginRoute(knRouteContext *pRouteContext)
{
}

// This is when the cocktail is processed.
void CRoute4_Short::EndRoute(knRouteContext *pRouteContext)
{
	CCustomRouteContext* pCustomRouteContext = (CCustomRouteContext*) pRouteContext;

	(pCustomRouteContext->GetDialog())->EnableMenuButton_Martini();
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions