helpers.cpp

Go to the documentation of this file.
00001 /* $Id: helpers.cpp 9662 2007-04-17 20:23:13Z belugas $ */
00002 
00005 #include "stdafx.h"
00006 
00007 #include "openttd.h"
00008 #include "engine.h"
00009 
00010 #include <new>
00011 #include "misc/blob.hpp"
00012 
00013 /* Engine list manipulators - current implementation is only C wrapper around CBlobT<EngineID> (see yapf/blob.hpp) */
00014 
00015 /* we cannot expose CBlobT directly to C so we must cast EngineList* to CBlobT<EngineID>* always when we are called from C */
00016 #define B (*(CBlobT<EngineID>*)el)
00017 
00021 void EngList_Create(EngineList *el)
00022 {
00023   /* call CBlobT constructor explicitly */
00024   new (&B) CBlobT<EngineID>();
00025 }
00026 
00030 void EngList_Destroy(EngineList *el)
00031 {
00032   /* call CBlobT destructor explicitly */
00033   B.~CBlobT<EngineID>();
00034 }
00035 
00040 uint EngList_Count(const EngineList *el)
00041 {
00042   return B.Size();
00043 }
00044 
00049 void EngList_Add(EngineList *el, EngineID eid)
00050 {
00051   B.Append(eid);
00052 }
00053 
00058 EngineID* EngList_Items(EngineList *el)
00059 {
00060   return B.Data();
00061 }
00062 
00066 void EngList_RemoveAll(EngineList *el)
00067 {
00068   B.Clear();
00069 }
00070 
00075 void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare)
00076 {
00077   qsort(B.Data(), B.Size(), sizeof(**el), compare);
00078 }
00079 
00086 void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items)
00087 {
00088   assert(begin <= (uint)B.Size());
00089   assert(begin + num_items <= (uint)B.Size());
00090   qsort(B.Data() + begin, num_items, sizeof(**el), compare);
00091 }
00092 
00093 #undef B
00094 

Generated on Mon Sep 22 20:34:15 2008 for openttd by  doxygen 1.5.6