📄 innerwaitqueue.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 + -