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

📄 sortedchain.cpp

📁 机甲指挥官2源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//
//###########################################################################
// FindImplementation
//###########################################################################
//
Plug*
	SortedChain::FindImplementation(
		const void *value
	)
{
	Check_Object(this);
	SortedChainLink *link;

	if ((link = SearchForValue(value)) != NULL)
	{
		Check_Object(link);
		return link->GetPlug();
	}
	return NULL;
}

//
//#############################################################################
// IsEmpty
//#############################################################################
//
bool
	SortedChain::IsEmpty()
{
	Check_Object(this);
	return (head == NULL);
}

//
//###########################################################################
// SearchForValue
//###########################################################################
//
SortedChainLink*
	SortedChain::SearchForValue(
		const void *value
	)
{
	Check_Object(this);
	SortedChainLink *link;
	int ret;
	
	for (link = head; link != NULL; link = link->next)
	{
		Check_Object(link);
		if ((ret = CompareValueToSortedChainLink(value, link)) == 0)
			break;
		if (ret < 0)
      	return(NULL);
	}
	return link;
}

//
//###########################################################################
// SortedChainIterator
//###########################################################################
//
SortedChainIterator::SortedChainIterator(SortedChain *vchain):
	SortedIterator(vchain)
{
	Check_Object(vchain);
	currentLink = vchain->head;
}

//
//###########################################################################
// SortedChainIterator
//###########################################################################
//
SortedChainIterator::SortedChainIterator(const SortedChainIterator *iterator):
	SortedIterator(Cast_Object(SortedChain*, iterator->socket))
{
	Check_Object(iterator);
	currentLink = iterator->currentLink;
}

Iterator*
	SortedChainIterator::MakeClone()
{
	Check_Object(this);
	return new SortedChainIterator(*this);
}

//
//###########################################################################
//###########################################################################
//
SortedChainIterator::~SortedChainIterator()
{
	Check_Object(this);
}

//
//###########################################################################
// TestInstance
//###########################################################################
//
void
	SortedChainIterator::TestInstance() const
{
	SortedIterator::TestInstance();
	
	if (currentLink != NULL)
	{
		Check_Object(currentLink);
	}
}

//
//###########################################################################
// First
//###########################################################################
//
void
	SortedChainIterator::First()
{
	Check_Object(this);
	currentLink = Cast_Object(SortedChain*, socket)->head;
}

//
//###########################################################################
// Last
//###########################################################################
//
void
	SortedChainIterator::Last()
{
	Check_Object(this);
	currentLink = Cast_Object(SortedChain*, socket)->tail;
}

//
//###########################################################################
// Next
//###########################################################################
//
void
	SortedChainIterator::Next()
{
	Check_Object(this);
	Check_Object(currentLink);
	currentLink = currentLink->next;
}

//
//###########################################################################
// Previous
//###########################################################################
//
void
	SortedChainIterator::Previous()
{
	Check_Object(this);
	Check_Object(currentLink);
	currentLink = currentLink->prev;
}

//
//###########################################################################
// ReadAndNextImplementation
//###########################################################################
//
void
	*SortedChainIterator::ReadAndNextImplementation()
{
	Check_Object(this);
	if (currentLink != NULL)
	{
		Plug *plug;

		Check_Object(currentLink);
		plug = currentLink->GetPlug();
		currentLink = currentLink->next;
		return plug;
	}
	return NULL;
}

//
//###########################################################################
// ReadAndPreviousImplementation
//###########################################################################
//
void
	*SortedChainIterator::ReadAndPreviousImplementation()
{
	Check_Object(this);
	if (currentLink != NULL) 
	{
		Plug *plug;
		
		Check_Object(currentLink);
		plug = currentLink->plug;
		currentLink = currentLink->prev;
		return plug;
	}
	return NULL;
}

//
//###########################################################################
// GetCurrentImplementation
//###########################################################################
//
void
	*SortedChainIterator::GetCurrentImplementation()
{
	Check_Object(this);
	if (currentLink != NULL) 
	{
		Check_Object(currentLink);
		return currentLink->GetPlug();
	}
	return NULL;
}

//
//###########################################################################
// GetSize
//###########################################################################
//
CollectionSize
	SortedChainIterator::GetSize()
{
	Check_Object(this);
	SortedChainLink *link;
	CollectionSize count;

	count = 0;
	for (
		link = Cast_Object(SortedChain*, socket)->head;
		link != NULL;
		link = link->next
	)
	{
		Check_Object(link);
		count++;
	}
	return count;
}

//
//###########################################################################
// GetNthImplementation
//###########################################################################
//
void
	*SortedChainIterator::GetNthImplementation(
		CollectionSize index
	)
{
	Check_Object(this);
	SortedChainLink *link;
	CollectionSize count;
	
	count = 0;
	for (
		link = Cast_Object(SortedChain*, socket)->head;
		link != NULL;
		link = link->next
	) 
	{
		Check_Object(link);
		if (count == index) 
		{
			currentLink = link;
			return currentLink->GetPlug();
		}
		count++;
	}
	return NULL;
}

//
//###########################################################################
// Remove
//###########################################################################
//
void
	SortedChainIterator::Remove()
{
	Check_Object(this);
	Check_Object(currentLink);
	Unregister_Object(currentLink);
	delete currentLink;
}

//
//###########################################################################
// FindImplementation
//###########################################################################
//
Plug*
	SortedChainIterator::FindImplementation(
		const void *value
	)
{
	Check_Object(this);
	SortedChainLink *link;
	
	if ((link = Cast_Object(SortedChain*, socket)->SearchForValue(value)) != NULL)
	{
		Check_Object(link);
		return (currentLink = link)->GetPlug();
	}
	return NULL;
}

//
//###########################################################################
// ReceiveMemo
//###########################################################################
//
void
	SortedChainIterator::ReceiveMemo(
		IteratorMemo memo,
		void *content
	)
{
	Check_Object(this);
	if (memo == PlugRemoved) 
	{
		if (content == currentLink)
		{
			Next();
		}
	}
}

⌨️ 快捷键说明

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