blob: 14b7597cb48b8393a65137b6638f374d621533be [file] [log] [blame]
alokp@chromium.org4e4b8072011-08-07 05:36:04 +00001//
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
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000010#include <stddef.h>
alokp@chromium.org30a487c2012-05-02 17:30:46 +000011#include <vector>
alokp@chromium.org98eec912012-05-01 10:04:08 +000012
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000013namespace pp
14{
15
alokp@chromium.org98eec912012-05-01 10:04:08 +000016// Holds and reads input for Lexer.
17class Input
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000018{
alokp@chromium.org98eec912012-05-01 10:04:08 +000019 public:
alokp@chromium.org28182482012-04-24 23:07:34 +000020 Input();
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000021 Input(size_t count, const char* const string[], const int length[]);
alokp@chromium.org98eec912012-05-01 10:04:08 +000022
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000023 size_t count() const { return mCount; }
24 const char* string(size_t index) const { return mString[index]; }
25 size_t length(size_t index) const { return mLength[index]; }
alokp@chromium.org98eec912012-05-01 10:04:08 +000026
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000027 size_t read(char* buf, size_t maxSize);
alokp@chromium.org98eec912012-05-01 10:04:08 +000028
29 struct Location
30 {
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000031 size_t sIndex; // String index;
32 size_t cIndex; // Char index.
alokp@chromium.org98eec912012-05-01 10:04:08 +000033
34 Location() : sIndex(0), cIndex(0) { }
35 };
36 const Location& readLoc() const { return mReadLoc; }
37
38 private:
alokp@chromium.org98eec912012-05-01 10:04:08 +000039 // Input.
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000040 size_t mCount;
alokp@chromium.org98eec912012-05-01 10:04:08 +000041 const char* const* mString;
shannon.woods@transgaming.comd64b3da2013-02-28 23:19:26 +000042 std::vector<size_t> mLength;
alokp@chromium.org98eec912012-05-01 10:04:08 +000043
44 Location mReadLoc;
alokp@chromium.org4e4b8072011-08-07 05:36:04 +000045};
46
47} // namespace pp
48#endif // COMPILER_PREPROCESSOR_INPUT_H_
49