TokenIterator.cpp 807 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <TokenIterator.h>
  2. TokenIterator::TokenIterator(char* data, size_t length, const char sep)
  3. : data(data),
  4. current(data),
  5. length(length),
  6. sep(sep),
  7. i(0)
  8. {
  9. for (size_t i = 0; i < length; i++) {
  10. if (data[i] == sep) {
  11. data[i] = 0;
  12. }
  13. }
  14. }
  15. const char* TokenIterator::nextToken() {
  16. if (i >= length) {
  17. return NULL;
  18. }
  19. char* token = current;
  20. char* nextToken = current;
  21. for (; i < length && *nextToken != 0; i++, nextToken++);
  22. if (i == length) {
  23. nextToken = NULL;
  24. } else {
  25. i = (nextToken - data);
  26. if (i < length) {
  27. nextToken++;
  28. } else {
  29. nextToken = NULL;
  30. }
  31. }
  32. current = nextToken;
  33. return token;
  34. }
  35. void TokenIterator::reset() {
  36. current = data;
  37. i = 0;
  38. }
  39. bool TokenIterator::hasNext() {
  40. return i < length;
  41. }