7
#include <ArrayClasses.h>
8
#include <CCINIClass.h>
10
template <typename T> class Enumerable
13
static DynamicVectorClass< T* > Array;
15
struct comparator : public std::binary_function<Enumerable<T>*, const char *, bool> {
16
bool operator()(Enumerable<T>* Item, const char* title) const { return !_strcmpi(Item->Name, title); }
19
static T** stl_Find(const char *Title) {
20
return std::find_if(Array.start(), Array.end(), std::bind2nd(comparator(), Title));
23
static int FindIndex(const char *Title)
25
for(int i = 0; i < Array.Count; ++i)
26
if(!_strcmpi(Title, Array.GetItem(i)->Name))
31
static T* Find(const char *Title)
33
/* for(int i = 0; i < Array.get_Count(); ++i)
34
if(!_strcmpi(Title, Array.GetItem(i)->Name))
35
return Array.GetItem(i);
37
T** result = Enumerable<T>::stl_Find(Title);
38
if(result == Array.end()) {
44
static T* FindOrAllocate(const char *Title)
46
T *find = Find(Title);
47
return find ? find : new T(Title);
50
static void ClearArray()
52
for(int i = Array.Count - 1; i >= 0; --i) {
58
static void LoadFromINIList(CCINIClass *pINI)
60
const char *section = GetMainSection();
61
int len = pINI->GetKeyCount(section);
62
for(int i = 0; i < len; ++i) {
63
const char *Key = pINI->GetKeyName(section, i);
66
for(int i = 0; i < Array.Count; ++i) {
67
Array[i]->LoadFromINI(pINI);
81
// template <typename T2>
82
static const char * GetMainSection();