00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifdef HAVE_CONFIG_H
00016 #include "config.h"
00017 #endif
00018
00019 #include "StringList.h"
00020 #include "htString.h"
00021 #include "List.h"
00022
00023 #include <stdlib.h>
00024
00025
00026
00027
00028
00029 StringList::StringList()
00030 {
00031 }
00032
00033
00034
00035
00036 int StringList::Create(const char *str, const char *sep)
00037 {
00038 String word;
00039
00040 while (str && *str)
00041 {
00042 if (strchr(sep, *str))
00043 {
00044 if (word.length())
00045 {
00046 List::Add(new String(word));
00047 word = 0;
00048 }
00049 }
00050 else
00051 word << *str;
00052 str++;
00053 }
00054
00055
00056
00057
00058 if (word.length())
00059 List::Add(new String(word));
00060 return Count();
00061 }
00062
00063
00064
00065
00066
00067 int StringList::Create(const char *str, char sep)
00068 {
00069 String word;
00070
00071 while (str && *str)
00072 {
00073 if (*str == sep)
00074 {
00075 if (word.length())
00076 {
00077 List::Add(new String(word));
00078 word = 0;
00079 }
00080 }
00081 else
00082 word << *str;
00083 str++;
00084 }
00085
00086
00087
00088
00089 if (word.length())
00090 List::Add(new String(word));
00091 return Count();
00092 }
00093
00094
00095
00096
00097
00098 char *StringList::operator [] (int n)
00099 {
00100 String *str = (String *) Nth(n);
00101 if (str)
00102 return str->get();
00103 else
00104 return 0;
00105 }
00106
00107
00108
00109
00110
00111 void StringList::Add(char *str)
00112 {
00113 List::Add(new String(str));
00114 }
00115
00116
00117
00118
00119
00120 void StringList::Assign(char *str, int pos)
00121 {
00122 List::Assign(new String(str), pos);
00123 }
00124
00125
00126
00127
00128 void StringList::Insert(char *str, int pos)
00129 {
00130 List::Insert(new String(str), pos);
00131 }
00132
00133 static int StringCompare(const void *a, const void *b)
00134 {
00135 String *sa, *sb;
00136
00137 sa = *((String **) a);
00138 sb = *((String **) b);
00139
00140 return strcmp(sa->get(), sb->get());
00141 }
00142
00143
00144
00145
00146
00147 void StringList::Sort(int)
00148 {
00149 String **array = new String*[Count()];
00150 int i;
00151 int n = Count();
00152
00153 ListCursor cursor;
00154
00155 Start_Get(cursor);
00156 Object *obj;
00157 for(i = 0; i < n && (obj = Get_Next(cursor)); i++) {
00158 array[i] = (String*)obj;
00159 }
00160
00161 qsort((char *) array, (size_t) n, (size_t) sizeof(String *),
00162 StringCompare);
00163
00164 Release();
00165
00166 for (i = 0; i < n; i++)
00167 {
00168 List::Add(array[i]);
00169 }
00170
00171 delete array;
00172 }
00173
00174 String StringList::Join(char sep) const
00175 {
00176 String str;
00177 int i;
00178
00179 for (i=0; i < number; i++)
00180 {
00181 if (str.length())
00182 str.append(sep);
00183 str.append(*((const String *) Nth(i)));
00184 }
00185 return str;
00186 }