14e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org//
24e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org// Copyright (c) 2011 The ANGLE Project Authors. All rights reserved.
34e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org// Use of this source code is governed by a BSD-style license that can be
44e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org// found in the LICENSE file.
54e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org//
64e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
74e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org#ifndef COMPILER_PREPROCESSOR_INPUT_H_
84e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org#define COMPILER_PREPROCESSOR_INPUT_H_
94e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
10d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com#include <stddef.h>
1130a487c7288394ad26ed4a54846567bf868a8f13alokp@chromium.org#include <vector>
1298eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org
134e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.orgnamespace pp
144e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org{
154e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
1698eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org// Holds and reads input for Lexer.
1798eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.orgclass Input
184e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org{
1998eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org  public:
2098eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org    Input();
21d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    Input(size_t count, const char *const string[], const int length[]);
224e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
23d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    size_t count() const
24d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    {
25d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo        return mCount;
26d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    }
27d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    const char *string(size_t index) const
28d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    {
29d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo        return mString[index];
30d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    }
31d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    size_t length(size_t index) const
32d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    {
33d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo        return mLength[index];
34d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    }
354e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
36d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    size_t read(char *buf, size_t maxSize);
3798eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org
3898eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org    struct Location
3998eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org    {
40d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com        size_t sIndex;  // String index;
41d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com        size_t cIndex;  // Char index.
4298eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org
43d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo        Location()
44d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo            : sIndex(0),
45d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo              cIndex(0)
46d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo        {
47d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo        }
4898eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org    };
49d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    const Location &readLoc() const { return mReadLoc; }
5098eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org
5198eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org  private:
5298eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org    // Input.
53d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com    size_t mCount;
54d526f9895c0aa867adb74a78e53832a9240c6ad6Zhenyao Mo    const char * const *mString;
55d64b3dab06c30da1e5dd9ba12667ff86388540e2shannon.woods@transgaming.com    std::vector<size_t> mLength;
5698eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org
5798eec91296f500b38c0f274e9de6dcfa03fcfd41alokp@chromium.org    Location mReadLoc;
584e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org};
594e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
604e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org}  // namespace pp
614e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org#endif  // COMPILER_PREPROCESSOR_INPUT_H_
624e4b807d219f58fad5f7b96ed23c9fdd1fc5de15alokp@chromium.org
63