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

📄 innerwaitqueue.cpp

📁 电梯调度模拟,有mfc界面展现5部电梯的相互调度
💻 CPP
字号:
#include "stdafx.h"
#include "InnerWaitQueue.h"
#include "MyVariousState.h"

////////////////////////////////////////////////////////////

//利用位串来表明电梯内部的任务要求
CInnerReqStruNode::CInnerReqStruNode()
{
	m_iStrLen = 20;
	m_dBitString = DWORD(0);
}

CInnerReqStruNode::CInnerReqStruNode(int iStrLen)
{
	if(iStrLen>32) return;
	m_iStrLen = iStrLen;
	m_dBitString = DWORD(0);
}

CInnerReqStruNode::~CInnerReqStruNode()
{

}

//置位
void CInnerReqStruNode::setFloor(int index)
{
	if(index<1 || index>m_iStrLen) return;
	m_dBitString |= ((DWORD)(1) <<index);
    CString strTemp=_T(" ");

}

//取位
bool CInnerReqStruNode::getFloor(int index)
{
	if(index<1 || index>m_iStrLen) return FALSE;
	return (m_dBitString & ((DWORD)(1) <<index)) ? TRUE:FALSE;
}

//清位
void CInnerReqStruNode::clrMessage(int index)
{
	if(index<1 || index>m_iStrLen) return;
	m_dBitString &= ~((DWORD)(1) <<index);
}

//显示位串
CString CInnerReqStruNode::showBitString()
{
	CString strTemp=_T(" ");
	for(int i=m_iStrLen; i>0; i--) strTemp += (getFloor(i) ? "1":"0");
	return strTemp;
}
////////////////////////////////////////////////////////////////////////////////////////////

CInnerWaitQueue::CInnerWaitQueue()
{
	m_iCurPos =1;
	m_iMaxQueueLen = MAX_FLOOR_NUM;
	m_cBitString = new CInnerReqStruNode(m_iMaxQueueLen);
}

CInnerWaitQueue::CInnerWaitQueue(int iMaxQueueLen)
{
	m_iCurPos =1;
	m_iMaxQueueLen = iMaxQueueLen;
	m_cBitString = new CInnerReqStruNode(m_iMaxQueueLen);
}

CInnerWaitQueue::~CInnerWaitQueue()
{

}

void CInnerWaitQueue::addElement(int iDestFloor)
{
	m_cBitString->setFloor(iDestFloor);
}

void CInnerWaitQueue::removeElement(int iDestFloor)
{
	m_cBitString->clrMessage(iDestFloor);
}

//上升队列的到下一个目标地址
int CUpInnerWaitQueue::getNextAvail()
{
	int result =-1,i;

	for( i=1; i<=m_iMaxQueueLen; i++)
	{
		if(m_cBitString->getFloor(i)) 
		{
			result = i;
			break;
		}
	}

	if(result>0) m_iCurPos= i+1;
	return result;

}


CUpInnerWaitQueue::CUpInnerWaitQueue()
{

}

CUpInnerWaitQueue::CUpInnerWaitQueue(int iMaxQueueLen)
{

}


CDownInnerWaitQueue::CDownInnerWaitQueue()
{
	m_iCurPos =m_iMaxQueueLen;
}

CDownInnerWaitQueue::CDownInnerWaitQueue(int iMaxQueueLen)
{
	m_iCurPos =iMaxQueueLen;
}


//下降队列的到下一个目标地址
int CDownInnerWaitQueue::getNextAvail()
{
	int result =-1,i;

	for( i=m_iMaxQueueLen; i>0; i--)
	{
		if(m_cBitString->getFloor(i)) 
		{
			result = i;
			break;
		}
	}

	if(result>0) m_iCurPos= i-1;
	return result;

}

⌨️ 快捷键说明

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