1dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu/*
2dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuCopyright (c) 2011 Stanislav Vitvitskiy
3dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
4dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuPermission is hereby granted, free of charge, to any person obtaining a copy of this
5dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhusoftware and associated documentation files (the "Software"), to deal in the Software
6dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuwithout restriction, including without limitation the rights to use, copy, modify,
7dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhumerge, publish, distribute, sublicense, and/or sell copies of the Software, and to
8dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupermit persons to whom the Software is furnished to do so, subject to the following
9dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhuconditions:
10dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
11dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuThe above copyright notice and this permission notice shall be included in all copies or
12dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhusubstantial portions of the Software.
13dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
14dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
15dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuINCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
16dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuPURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
17dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuFOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
18dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
19dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui ZhuOR OTHER DEALINGS IN THE SOFTWARE.
20dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu*/
21dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupackage com.googlecode.mp4parser.h264;
22dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
23dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhupublic class CharCache {
24dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private char[] cache;
25dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    private int pos;
26dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
27dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public CharCache(int capacity) {
28dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        cache = new char[capacity];
29dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
30dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
31dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void append(String str) {
32dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        char[] chars = str.toCharArray();
33dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int available = cache.length - pos;
34dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        int toWrite = chars.length < available ? chars.length : available;
35dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        System.arraycopy(chars, 0, cache, pos, toWrite);
36dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        pos += toWrite;
37dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
38dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
39dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public String toString() {
40dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return new String(cache, 0, pos);
41dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
42dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
43dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void clear() {
44dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        pos = 0;
45dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
46dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
47dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public void append(char c) {
48dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        if (pos < cache.length - 1) {
49dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            cache[pos] = c;
50dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu            pos++;
51dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        }
52dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
53dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu
54dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    public int length() {
55dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu        return pos;
56dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu    }
57dd9eb897ee7c7b507cbdcf80263bb4b5de6966bfTeng-Hui Zhu}
58