author | rubidium |
Thu, 28 Dec 2006 19:49:31 +0000 | |
changeset 5658 | d52411b29630 |
parent 5189 | c3f55e80901c |
permissions | -rw-r--r-- |
5189
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
1 |
/* $Id$ */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
2 |
#include "stdafx.h" |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
3 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
4 |
EXTERN_C_BEGIN |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
5 |
#include "openttd.h" |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
6 |
#include "engine.h" |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
7 |
EXTERN_C_END |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
8 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
9 |
#include <new> |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
10 |
#include "yapf/blob.hpp" |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
11 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
12 |
/* Engine list manipulators - current implementation is only C wrapper around CBlobT<EngineID> (see yapf/blob.hpp) */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
13 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
14 |
/* we cannot expose CBlobT directly to C so we must cast EngineList* to CBlobT<EngineID>* always when we are called from C */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
15 |
#define B (*(CBlobT<EngineID>*)el) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
16 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
17 |
/** Create Engine List (and initialize it to empty) */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
18 |
void EngList_Create(EngineList *el) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
19 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
20 |
// call CBlobT constructor explicitly |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
21 |
new (&B) CBlobT<EngineID>(); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
22 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
23 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
24 |
/** Destroy Engine List (and free its contents) */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
25 |
void EngList_Destroy(EngineList *el) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
26 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
27 |
// call CBlobT destructor explicitly |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
28 |
B.~CBlobT<EngineID>(); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
29 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
30 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
31 |
/** Return number of items stored in the Engine List */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
32 |
uint EngList_Count(const EngineList *el) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
33 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
34 |
return B.Size(); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
35 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
36 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
37 |
/** Add new item at the end of Engine List */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
38 |
void EngList_Add(EngineList *el, EngineID eid) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
39 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
40 |
B.Append(eid); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
41 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
42 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
43 |
/** Return pointer to the items array held by Engine List */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
44 |
EngineID* EngList_Items(EngineList *el) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
45 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
46 |
return B.Data(); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
47 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
48 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
49 |
/** Clear the Engine List (by invalidating all its items == reseting item count to zero) */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
50 |
void EngList_RemoveAll(EngineList *el) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
51 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
52 |
B.Clear(); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
53 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
54 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
55 |
/** Sort all items using qsort() and given 'CompareItems' function */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
56 |
void EngList_Sort(EngineList *el, EngList_SortTypeFunction compare) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
57 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
58 |
qsort(B.Data(), B.Size(), sizeof(**el), compare); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
59 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
60 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
61 |
/** Sort selected range of items (on indices @ <begin, begin+num_items-1>) */ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
62 |
void EngList_SortPartial(EngineList *el, EngList_SortTypeFunction compare, uint begin, uint num_items) |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
63 |
{ |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
64 |
assert(begin <= (uint)B.Size()); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
65 |
assert(begin + num_items <= (uint)B.Size()); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
66 |
qsort(B.Data() + begin, num_items, sizeof(**el), compare); |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
67 |
} |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
68 |
|
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
69 |
#undef B |
c3f55e80901c
(svn r7301) -Fix: (r7299) Forgotten $Id$ and eol-style (peter1138)
KUDr
parents:
5187
diff
changeset
|
70 |