helpers.cpp
author bjarni
Tue, 05 Dec 2006 22:40:42 +0000
changeset 5255 b693a9941b8c
parent 5189 a2b200911b2c
permissions -rw-r--r--
(svn r7385) -Fix: FS#418 Deleting Train in depot with autoreplace failes
This turned out to be due to continue to drag the old vehicle, that autoreplace sold
This could also be triggered if more than one player used the same company
Now deleting a vehicle will remove all depot highlights of that vehicle
/* $Id$ */
#include "stdafx.h"

EXTERN_C_BEGIN
#include "openttd.h"
#include "engine.h"
EXTERN_C_END

#include <new>
#include "yapf/blob.hpp"

/* Engine list manipulators - current implementation is only C wrapper around CBlobT<EngineID> (see yapf/blob.hpp) */

/* we cannot expose CBlobT directly to C so we must cast EngineList* to CBlobT<EngineID>* always when we are called from C */
#define B (*(CBlobT<EngineID>*)el)

/** Create Engine List (and initialize it to empty) */
void EngList_Create(EngineList *el)
{
	// call CBlobT constructor explicitly
	new (&B) CBlobT<EngineID>();
}

/** Destroy Engine List (and free its contents) */
void EngList_Destroy(EngineList *el)
{
	// call CBlobT destructor explicitly
	B.~CBlobT<EngineID>();
}

/** Return number of items stored in the Engine List */
uint EngList_Count(const EngineList *el)
{
	return B.Size();
}

/** Add new item at the end of Engine List */
void EngList_Add(EngineList *el, EngineID eid)
{
	B.Append(eid);
}

/** Return pointer to the items array held by Engine List */
EngineID* EngList_Items(EngineList *el)
{
	return B.Data();
}

/** Clear the Engine List (by invalidating all its items == reseting item count to zero) */
void EngList_RemoveAll(EngineList *el)
{
	B.Clear();
}

/** Sort all items using qsort() and given 'CompareItems' function */
void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare)
{
	qsort(B.Data(), B.Size(), sizeof(**el), compare);
}

/** Sort selected range of items (on indices @ <begin, begin+num_items-1>) */
void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items)
{
	assert(begin <= (uint)B.Size());
	assert(begin + num_items <= (uint)B.Size());
	qsort(B.Data() + begin, num_items, sizeof(**el), compare);
}

#undef B