line_split.cpp 793 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #include "line_split.h"
  2. TLineSplitter::TLineSplitter(IInputStream& stream)
  3. : Stream_(stream)
  4. {
  5. }
  6. size_t TLineSplitter::Next(TString& st) {
  7. st.clear();
  8. char c;
  9. size_t ret = 0;
  10. if (HasPendingLineChar_) {
  11. st.push_back(PendingLineChar_);
  12. HasPendingLineChar_ = false;
  13. ++ret;
  14. }
  15. while (Stream_.ReadChar(c)) {
  16. ++ret;
  17. if (c == '\n') {
  18. break;
  19. } else if (c == '\r') {
  20. if (Stream_.ReadChar(c)) {
  21. ++ret;
  22. if (c != '\n') {
  23. --ret;
  24. PendingLineChar_ = c;
  25. HasPendingLineChar_ = true;
  26. }
  27. }
  28. break;
  29. } else {
  30. st.push_back(c);
  31. }
  32. }
  33. return ret;
  34. }