-static bool readLine(const char *&Start, const char *End, StringRef &S) {
- if (Start == End)
- return false;
-
- for (const char *I = Start; I != End; ++I) {
- assert(*I && "unexpected binary data");
- if (*I == '\n') {
- S = StringRef(Start, I - Start);
- Start = I + 1;
- return true;
- }
- }
-
- S = StringRef(Start, End - Start);
- Start = End;
- return true;
-}
-
-static StringRef getWord(const char *&Start, const char *End) {
- for (const char *I = Start; I != End; ++I)
- if (*I == ' ') {
- StringRef S(Start, I - Start);
- Start = I + 1;
- return S;
- }
- StringRef S(Start, End - Start);
- Start = End;
- return S;
-}
-
-static size_t splitWords(const StringRef &Line, std::vector<StringRef> &Words) {
- const char *Start = Line.data();
- const char *End = Line.data() + Line.size();
- Words.clear();
- while (Start != End)
- Words.push_back(getWord(Start, End));
- return Words.size();
-}
-
-static bool getNumber(const StringRef &S, uint64_t &N) {
- N = 0;
- for (StringRef::iterator I = S.begin(), E = S.end(); I != E; ++I)
- if (*I >= '0' && *I <= '9')
- N = N * 10 + (*I - '0');
- else
- return false;
-
- return true;
-}
-