NXEngine v1.0.0.6
[NXEngine.git] / common / StringList.cpp
blob8901ed8f953782847b29d202f7779d239e71a2f4
2 #include <stdlib.h>
3 #include <string.h>
5 #include "StringList.h"
6 #include "StringList.fdh"
9 StringList::~StringList()
11 MakeEmpty();
15 void c------------------------------() {}
18 void StringList::Shuffle()
20 int i, count = CountItems();
22 for(i=0;i<count;i++)
24 int swap = random(0, count - 1);
25 if (swap != i)
27 SwapItems(i, swap);
32 bool StringList::ContainsString(const char *term)
34 int i;
35 char *str;
37 for(i=0; (str = StringAt(i)); i++)
39 if (!strcmp(str, term))
40 return true;
43 return false;
46 bool StringList::ContainsCaseString(const char *term)
48 int i;
49 char *str;
51 for(i=0; (str = StringAt(i)); i++)
53 if (!strcasecmp(str, term))
54 return true;
57 return false;
61 void c------------------------------() {}
64 void StringList::AddString(const char *str)
66 BList::AddItem(strdup(str));
69 bool StringList::SetString(int index, const char *newstring)
71 char *str = StringAt(index);
72 if (!str) return 1;
73 if (str == newstring) return 0;
75 int copylen = strlen(newstring) + 1;
76 str = (char *)realloc(str, copylen);
77 memcpy(str, newstring, copylen);
79 BList::ReplaceItem(index, str);
80 return 0;
83 void StringList::RemoveString(int index)
85 char *str = StringAt(index);
86 if (str)
88 BList::RemoveItem(index);
89 free(str);
93 void StringList::RemoveString(const char *str)
95 int i;
96 char *entry;
98 for(i=0; (entry = StringAt(i)); i++)
100 if (!strcmp(entry, str))
102 BList::RemoveItem(i);
103 free(entry);
104 i--;
109 void StringList::RemoveIString(const char *str)
111 int i;
112 char *entry;
114 for(i=0; (entry = StringAt(i)); i++)
116 if (!strcasecmp(entry, str))
118 BList::RemoveItem(i);
119 free(entry);
120 i--;
126 void c------------------------------() {}
129 void StringList::SwapItems(int index1, int index2)
131 BList::SwapItems(index1, index2);
134 void StringList::DumpContents()
136 int i, count = CountItems();
138 stat("StringList %08x; %d entries", this, count);
139 for(i=0;i<count;i++)
141 char *str = StringAt(i);
142 stat("(%d) <%08x>: '%s'", i, str, str ? str : "(null)");
147 void c------------------------------() {}
150 char *StringList::StringAt(int index) const
152 return (char *)BList::ItemAt(index);
155 void StringList::MakeEmpty()
157 int i, count = CountItems();
158 for(i=0;i<count;i++)
160 free(ItemAt(i));
163 BList::MakeEmpty();
167 void c------------------------------() {}
170 StringList &StringList::operator= (const StringList &other)
172 StringList::MakeEmpty();
174 for(int i=0;;i++)
176 char *str = other.StringAt(i);
177 if (!str) break;
179 AddString(str);
182 return *this;
185 bool StringList::operator== (const StringList &other) const
187 if (CountItems() != other.CountItems())
188 return false;
190 for(int i=0;;i++)
192 char *str1 = StringAt(i);
193 char *str2 = other.StringAt(i);
195 if (!str1 || !str2)
196 return (!str1 && !str2);
198 if (strcmp(str1, str2) != 0)
199 return false;
203 bool StringList::operator!= (const StringList &other) const
205 return !(*this == other);