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