00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027
00028 #include "strl.hpp"
00029 #include "uti.h"
00030 #include "wrkbuff.h"
00031
00032
00033
00034 INT _strl_cmp(const String *s1, const String *s2);
00035 INT _strl_rcmp(const String *s1, const String *s2);
00036
00037
00038
00039 VOID StrList::append_s(const char *words )
00040 {
00041 static const char *separator=" \t\n";
00042
00043 if (!words) return;
00044
00045 size_t l;
00046 while (words) {
00047 words += strspn(words,separator);
00048 if (!(*words)) break;
00049 BOOL cute=FALSE;
00050 if (*words=='"') {
00051 words++;
00052 cute=TRUE;
00053 l=strcspn(words,"\"");
00054 }
00055 else l = strcspn(words,separator);
00056 if (l) append(String(words,l));
00057 words+=l;
00058 if (cute && (*words)) words++;
00059 }
00060 }
00061
00062
00063
00064 VOID StrList::append_sf(const char *fwords, ... )
00065 {
00066 va_list argptr;
00067 va_start(argptr, fwords);
00068 append_s(fwords, argptr);
00069 va_end(argptr);
00070 }
00071
00072
00073
00074 VOID StrList::append_s(const char *fwords, va_list v )
00075 {
00076 WRKBUFF(2048);
00077 if (!fwords) return;
00078 vsprintf(_wrkbuff, fwords, v);
00079 append_s(_wrkbuff);
00080 WRKBUFF_FREE();
00081 }
00082
00083
00084
00085 VOID StrList::append_s( const char *wordarray[] )
00086 {
00087 if (!wordarray) return;
00088 while (*wordarray) append(String(*(wordarray++)));
00089 }
00090
00091
00092
00093 VOID StrList::sort( BOOL reverse )
00094 {
00095 if (reverse) sortf(_strl_rcmp);
00096 else sortf(_strl_cmp);
00097 }
00098
00099
00100
00101 BOOL StrList::OK ( VOID ) const
00102 {
00103 if (!(l.OK())) return FALSE;
00104 for (Lix p=first(); p!=0; p=next(p)) if (!item(p).OK()) return FALSE;
00105 return TRUE;
00106 }
00107
00108
00109
00110 std::ostream& operator << (std::ostream &st, const StrList &l)
00111 {
00112 for (Lix p=l.first(); p!=0; p=l.next(p))
00113 st<< "\"" << l(p) << "\"" << std::endl;
00114 return st;
00115 }
00116
00117