tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Input.h (1322B)


      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 
     27    size_t count() const { return mCount; }
     28    const char *string(size_t index) const { return mString[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 
     38        Location() : sIndex(0), cIndex(0) {}
     39    };
     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_