1// 2// Copyright (c) 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 <stddef.h> 11#include <vector> 12 13namespace pp 14{ 15 16// Holds and reads input for Lexer. 17class Input 18{ 19 public: 20 Input(); 21 Input(size_t count, const char *const string[], const int length[]); 22 23 size_t count() const 24 { 25 return mCount; 26 } 27 const char *string(size_t index) const 28 { 29 return mString[index]; 30 } 31 size_t length(size_t index) const 32 { 33 return mLength[index]; 34 } 35 36 size_t read(char *buf, size_t maxSize); 37 38 struct Location 39 { 40 size_t sIndex; // String index; 41 size_t cIndex; // Char index. 42 43 Location() 44 : sIndex(0), 45 cIndex(0) 46 { 47 } 48 }; 49 const Location &readLoc() const { return mReadLoc; } 50 51 private: 52 // Input. 53 size_t mCount; 54 const char * const *mString; 55 std::vector<size_t> mLength; 56 57 Location mReadLoc; 58}; 59 60} // namespace pp 61#endif // COMPILER_PREPROCESSOR_INPUT_H_ 62 63