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