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 
27 namespace android {
28 
29 class Tokenizer
30 {
31 public:
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 {
run_trun_t44         run_t() {};
run_trun_t45         run_t(uint32_t f, uint32_t l) : first(f), length(l) {}
46         uint32_t    first;
47         uint32_t    length;
48     };
49 private:
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