1 // 2 // Copyright 2011 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 #ifndef COMPILER_PREPROCESSOR_INPUT_H_ 8 #define COMPILER_PREPROCESSOR_INPUT_H_ 9 10 #include <cstddef> 11 #include <vector> 12 13 namespace angle 14 { 15 16 namespace pp 17 { 18 19 // Holds and reads input for Lexer. 20 class Input 21 { 22 public: 23 Input(); 24 ~Input(); 25 Input(size_t count, const char *const string[], const int length[]); 26 count()27 size_t count() const { return mCount; } string(size_t index)28 const char *string(size_t index) const { return mString[index]; } length(size_t index)29 size_t length(size_t index) const { return mLength[index]; } 30 31 size_t read(char *buf, size_t maxSize, int *lineNo); 32 33 struct Location 34 { 35 size_t sIndex; // String index; 36 size_t cIndex; // Char index. 37 LocationLocation38 Location() : sIndex(0), cIndex(0) {} 39 }; readLoc()40 const Location &readLoc() const { return mReadLoc; } 41 42 private: 43 // Skip a character and return the next character after the one that was skipped. 44 // Return nullptr if data runs out. 45 const char *skipChar(); 46 47 // Input. 48 size_t mCount; 49 const char *const *mString; 50 std::vector<size_t> mLength; 51 52 Location mReadLoc; 53 }; 54 55 } // namespace pp 56 57 } // namespace angle 58 59 #endif // COMPILER_PREPROCESSOR_INPUT_H_ 60