PathParseW.cpp 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #include <bfc/bfc_assert.h>
  2. #include "pathparse.h"
  3. PathParserW::PathParserW(const wchar_t *_str, const wchar_t *sep, int uniquestrs) :
  4. processed(FALSE), str(_str ? _str : L""), separators(sep), uniques(uniquestrs)
  5. {
  6. ASSERT(sep != NULL);
  7. }
  8. int PathParserW::getNumStrings() {
  9. process();
  10. return strings.getNumItems();
  11. }
  12. wchar_t *PathParserW::enumString(int i) {
  13. process();
  14. return strings[i];
  15. }
  16. wchar_t *PathParserW::enumStringSafe(int i, wchar_t *def_val) {
  17. wchar_t *ret = enumString(i);
  18. if (ret == NULL) ret = def_val;
  19. return ret;
  20. }
  21. void PathParserW::process() {
  22. if (processed) return;
  23. processed = 1;
  24. preProcess(str);
  25. wchar_t *nonconst = str.getNonConstVal();
  26. wchar_t *context=0;
  27. wchar_t *pt = WCSTOK(nonconst, separators, &context);
  28. if (pt == NULL) return;
  29. postProcess(pt);
  30. strings.addItem(pt);
  31. for (;;) {
  32. wchar_t *pt = WCSTOK(NULL, separators, &context);
  33. if (pt == NULL) break;
  34. postProcess(pt);
  35. if (uniques) {
  36. int exists = 0;
  37. foreach(strings)
  38. if (!WCSICMP(strings.getfor(), pt))
  39. {
  40. exists=1;
  41. break;
  42. }
  43. endfor;
  44. if (exists) continue;
  45. }
  46. strings.addItem(pt);
  47. }
  48. }