xref: /aosp_15_r20/external/angle/src/compiler/preprocessor/Input.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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