1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MediaQueryInputStream_h
6#define MediaQueryInputStream_h
7
8#include "wtf/text/WTFString.h"
9
10namespace blink {
11
12class MediaQueryInputStream {
13    WTF_MAKE_NONCOPYABLE(MediaQueryInputStream);
14    WTF_MAKE_FAST_ALLOCATED;
15public:
16    MediaQueryInputStream(String input);
17
18    UChar peek(unsigned);
19    inline UChar nextInputChar()
20    {
21        return peek(0);
22    }
23
24    void advance(unsigned = 1);
25    void pushBack(UChar);
26
27    inline size_t maxLength()
28    {
29        return m_string.length() + 1;
30    }
31
32    inline size_t leftChars()
33    {
34        return m_string.length() - m_offset;
35
36    }
37
38    unsigned long long getUInt(unsigned start, unsigned end);
39    double getDouble(unsigned start, unsigned end);
40
41    template<bool characterPredicate(UChar)>
42    unsigned skipWhilePredicate(unsigned offset)
43    {
44        while ((m_offset + offset) < m_string.length() && characterPredicate(m_string[m_offset + offset]))
45            ++offset;
46        return offset;
47    }
48
49private:
50    size_t m_offset;
51    String m_string;
52};
53
54} // namespace blink
55
56#endif // MediaQueryInputStream_h
57
58