winamp/Src/Wasabi/bfc/parse/PathParseW.cpp
2024-09-24 14:54:57 +02:00

56 lines
1.2 KiB
C++

#include <bfc/bfc_assert.h>
#include "pathparse.h"
PathParserW::PathParserW(const wchar_t *_str, const wchar_t *sep, int uniquestrs) :
processed(FALSE), str(_str ? _str : L""), separators(sep), uniques(uniquestrs)
{
ASSERT(sep != NULL);
}
int PathParserW::getNumStrings() {
process();
return strings.getNumItems();
}
wchar_t *PathParserW::enumString(int i) {
process();
return strings[i];
}
wchar_t *PathParserW::enumStringSafe(int i, wchar_t *def_val) {
wchar_t *ret = enumString(i);
if (ret == NULL) ret = def_val;
return ret;
}
void PathParserW::process() {
if (processed) return;
processed = 1;
preProcess(str);
wchar_t *nonconst = str.getNonConstVal();
wchar_t *context=0;
wchar_t *pt = WCSTOK(nonconst, separators, &context);
if (pt == NULL) return;
postProcess(pt);
strings.addItem(pt);
for (;;) {
wchar_t *pt = WCSTOK(NULL, separators, &context);
if (pt == NULL) break;
postProcess(pt);
if (uniques) {
int exists = 0;
foreach(strings)
if (!WCSICMP(strings.getfor(), pt))
{
exists=1;
break;
}
endfor;
if (exists) continue;
}
strings.addItem(pt);
}
}