00001
00002
00003
00004 #include <stdio.h>
00005 #include <string.h>
00006 #include "ListTools.h"
00007
00008
00009
00010
00011 TMyList::TMyList()
00012 {
00013 freeItems = false;
00014 Head = Tail = NULL;
00015 count = ptrIndex = 0;
00016 }
00017
00018
00019
00020
00021 TMyList::~TMyList()
00022 {
00023 Clear();
00024 }
00031
00032
00033
00034
00035
00036 int TMyList::Add(void *item)
00037 {
00038 Ptr = new TMyListItem();
00039 Ptr->item = item;
00040 Ptr->Next = NULL;
00041 if (Tail)
00042 {
00043 Tail->Next = Ptr;
00044 Tail = Ptr;
00045 }
00046 else
00047 Head = Tail = Ptr;
00048 return ptrIndex = count++;
00049 }
00055
00056
00057
00058 void TMyList::Clear(void)
00059 {
00060 TMyListItem *ListItem;
00061
00062 Ptr = Head;
00063 while (Ptr)
00064 {
00065 ListItem = Ptr->Next;
00066 if (freeItems)
00067 delete [] (char *)Ptr->item;
00068 delete Ptr;
00069 Ptr = ListItem;
00070 }
00071 Head = Tail = NULL;
00072 count = ptrIndex = 0;
00073 }
00080
00081
00082
00083
00084 void TMyList::Delete(int index)
00085 {
00086 TMyListItem *DelItem;
00087
00088 if (index >= count || index < 0)
00089 return;
00090 if (index == 0)
00091 {
00092 DelItem = Head;
00093 Head = Head->Next;
00094 ptrIndex = 0;
00095 if (count == 1)
00096 Tail = NULL;
00097 }
00098 else
00099 {
00100 if (ptrIndex >= index)
00101 {
00102 Ptr = Head;
00103 ptrIndex = 0;
00104 }
00105 for (;ptrIndex < index - 1; ptrIndex++)
00106 Ptr = Ptr->Next;
00107 DelItem = Ptr->Next;
00108 Ptr->Next = DelItem->Next;
00109 if (index == count - 1)
00110 Tail = Ptr;
00111 }
00112 if (freeItems)
00113 delete [] (char *)DelItem->item;
00114 delete DelItem;
00115 count--;
00116 }
00123
00124
00125
00126
00127
00128 void TMyList::Insert(int index, void *item)
00129 {
00130 TMyListItem *ListItem = new TMyListItem();
00131
00132 if (index > count)
00133 index = count;
00134 else if (index < 0)
00135 index = 0;
00136 ListItem->item = item;
00137 if (index == 0)
00138 {
00139 ListItem->Next = Head;
00140 Head = ListItem;
00141 ptrIndex++;
00142 if (count == 0)
00143 Ptr = Tail = ListItem;
00144 }
00145 else
00146 {
00147 if (ptrIndex >= index)
00148 {
00149 Ptr = Head;
00150 ptrIndex = 0;
00151 }
00152 for (;ptrIndex < index - 1; ptrIndex++)
00153 Ptr = Ptr->Next;
00154 ListItem->Next = Ptr->Next;
00155 Ptr->Next = ListItem;
00156 if (index == count)
00157 Tail = ListItem;
00158 }
00159 count++;
00160 }
00166
00167
00168
00169
00170 void *TMyList::Items(int index)
00171 {
00172 if (index >= count || index < 0)
00173 return NULL;
00174 if (ptrIndex > index || index == 0)
00175 {
00176 Ptr = Head;
00177 ptrIndex = 0;
00178 }
00179 for (;ptrIndex < index; ptrIndex++)
00180 Ptr = Ptr->Next;
00181 return Ptr->item;
00182 }
00183
00184
00185
00186
00187 TMyStringList::TMyStringList() : TMyList()
00188 {
00189 freeItems = true;
00190 itemName[0] = '\0';
00191 }
00198
00199
00200
00201
00202
00203 int TMyStringList::Add(char *item)
00204 {
00205 char *newItem = new char[strlen(item) + 1];
00206 strcpy(newItem, item);
00207 return TMyList::Add(newItem);
00208 }
00215
00216
00217
00218
00219
00220 void TMyStringList::Insert(int index, char *item)
00221 {
00222 char *newItem = new char[strlen(item) + 1];
00223 strcpy(newItem, item);
00224 TMyList::Insert(index, newItem);
00225 }
00232
00233
00234
00235
00236
00237 char *TMyStringList::Names(int index)
00238 {
00239 char *str, *p;
00240
00241 str = Strings(index);
00242 if (str == NULL)
00243 return NULL;
00244 if ((p = strchr(str, '=')) == NULL)
00245 return strcpy(itemName, str);
00246 itemName[p - str] = '\0';
00247 return strncpy(itemName, str, p - str);
00248 }
00256
00257
00258
00259
00260
00261
00262 int TMyStringList::SetValue(char *name, char *item)
00263 {
00264 int i;
00265 char str[201];
00266
00267 sprintf(str, "%s=%s", name, item);
00268 for (i = 0; i < count; i++)
00269 if (strcmp(Names(i), name) == 0)
00270 break;
00271 if (i < count)
00272 {
00273 Delete(i);
00274 Insert(i, str);
00275 return i;
00276 }
00277 else
00278 return Add(str);
00279 }
00286
00287
00288
00289
00290
00291 char *TMyStringList::Strings(int index)
00292 {
00293 return (char *)Items(index);
00294 }
00301
00302
00303
00304
00305
00306 char *TMyStringList::Values(char *name)
00307 {
00308 static char *emptyStr = "\0";
00309 char *tempc = NULL;
00310 int i;
00311
00312 for (i = 0; i < count; i++)
00313 if (strcmp(Names(i), name) == 0)
00314 {
00315 tempc = strchr(Strings(i), '=');
00316 break;
00317 }
00318 return tempc != NULL? (tempc + 1) : emptyStr;
00319 }
00320