1/* libs/opengles/Tokenizer.h
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9**     http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18
19#ifndef ANDROID_OPENGLES_TOKENIZER_H
20#define ANDROID_OPENGLES_TOKENIZER_H
21
22#include <utils/Vector.h>
23#include <utils/Errors.h>
24
25// ----------------------------------------------------------------------------
26
27namespace android {
28
29class Tokenizer
30{
31public:
32                Tokenizer();
33                Tokenizer(const Tokenizer& other);
34                ~Tokenizer();
35
36    uint32_t    acquire();
37    status_t    reserve(uint32_t token);
38    status_t    release(uint32_t token);
39    bool        isAcquired(uint32_t token) const;
40
41    void dump() const;
42
43    struct run_t {
44        run_t() {};
45        run_t(uint32_t f, uint32_t l) : first(f), length(l) {}
46        uint32_t    first;
47        uint32_t    length;
48    };
49private:
50    ssize_t _indexOrderOf(uint32_t token, size_t* order=0) const;
51    ssize_t _insertTokenAt(uint32_t token, size_t index);
52    Vector<run_t>   mRanges;
53};
54
55}; // namespace android
56
57// ----------------------------------------------------------------------------
58
59#endif // ANDROID_OPENGLES_TOKENIZER_H
60