Region.h revision 9f96145725ff3f265712d607d19078fb91a5c8ec
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License.
6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at
7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project *
10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and
14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License.
15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */
16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_UI_REGION_H
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_UI_REGION_H
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h>
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Vector.h>
24c5b2c0bf8007562536b822eb060fc54a01f8e08bMathias Agopian#include <binder/Parcel.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <ui/Rect.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <hardware/copybit.h>
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass String8;
34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass Region
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                        Region();
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                        Region(const Region& rhs);
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    explicit            Region(const Rect& rhs);
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    explicit            Region(const Parcel& parcel);
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    explicit            Region(const void* buffer);
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project                        ~Region();
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        Region& operator = (const Region& rhs);
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
4820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    inline  bool        isEmpty() const     { return mBounds.isEmpty();  }
4920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    inline  bool        isRect() const      { return mStorage.isEmpty(); }
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
5117b2ad027b4b72b96dfb663c0ea001972da7ef58Mathias Agopian    inline  Rect        getBounds() const   { return mBounds; }
5217b2ad027b4b72b96dfb663c0ea001972da7ef58Mathias Agopian    inline  Rect        bounds() const      { return getBounds(); }
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
549f96145725ff3f265712d607d19078fb91a5c8ecMathias Agopian            // the region becomes its bounds
559f96145725ff3f265712d607d19078fb91a5c8ecMathias Agopian            Region&     makeBoundsSelf();
569f96145725ff3f265712d607d19078fb91a5c8ecMathias Agopian
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        clear();
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            void        set(const Rect& r);
590926f50664c739eaee60341f8e8c694dc9a4f3ebMathias Agopian            void        set(uint32_t w, uint32_t h);
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Region&     orSelf(const Rect& rhs);
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Region&     andSelf(const Rect& rhs);
6320f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            Region&     subtractSelf(const Rect& rhs);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            // boolean operators, applied on this
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Region&     orSelf(const Region& rhs);
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Region&     andSelf(const Region& rhs);
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            Region&     subtractSelf(const Region& rhs);
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
7020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            // boolean operators
71bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      merge(const Rect& rhs) const;
72bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      intersect(const Rect& rhs) const;
73bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      subtract(const Rect& rhs) const;
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            // boolean operators
76bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      merge(const Region& rhs) const;
77bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      intersect(const Region& rhs) const;
78bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      subtract(const Region& rhs) const;
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            // these translate rhs first
8120f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            Region&     translateSelf(int dx, int dy);
8220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            Region&     orSelf(const Region& rhs, int dx, int dy);
8320f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            Region&     andSelf(const Region& rhs, int dx, int dy);
8420f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            Region&     subtractSelf(const Region& rhs, int dx, int dy);
8520f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
8620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            // these translate rhs first
87bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      translate(int dx, int dy) const;
88bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      merge(const Region& rhs, int dx, int dy) const;
89bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      intersect(const Region& rhs, int dx, int dy) const;
90bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const   Region      subtract(const Region& rhs, int dx, int dy) const;
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    // convenience operators overloads
93bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    inline  const Region      operator | (const Region& rhs) const;
94bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    inline  const Region      operator & (const Region& rhs) const;
95bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    inline  const Region      operator - (const Region& rhs) const;
96bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    inline  const Region      operator + (const Point& pt) const;
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  Region&     operator |= (const Region& rhs);
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  Region&     operator &= (const Region& rhs);
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  Region&     operator -= (const Region& rhs);
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline  Region&     operator += (const Point& pt);
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
10320f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
10420f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    /* various ways to access the rectangle list */
10520f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
10620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    typedef Rect const* const_iterator;
10720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
10820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            const_iterator begin() const;
10920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            const_iterator end() const;
11020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
11120f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    /* no user serviceable parts here... */
11220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
11320f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            size_t      getRects(Vector<Rect>& rectList) const;
11420f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            Rect const* getArray(size_t* count) const;
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
11620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
11720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            // add a rectangle to the internal list. This rectangle must
11820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            // be sorted in Y and X and must not make the region invalid.
11920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            void        addRectUnchecked(int l, int t, int r, int b);
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            // flatten/unflatten a region to/from a Parcel
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t    write(Parcel& parcel) const;
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            status_t    read(const Parcel& parcel);
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            // flatten/unflatten a region to/from a raw buffer
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t     write(void* buffer, size_t size) const;
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  ssize_t     writeEmpty(void* buffer, size_t size);
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project            ssize_t     read(const void* buffer);
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static  bool        isEmpty(void* buffer);
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void        dump(String8& out, const char* what, uint32_t flags=0) const;
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    void        dump(const char* what, uint32_t flags=0) const;
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
13620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    class rasterizer;
13720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    friend class rasterizer;
13820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
13920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    Region& operationSelf(const Rect& r, int op);
14020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    Region& operationSelf(const Region& r, int op);
14120f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    Region& operationSelf(const Region& r, int dx, int dy, int op);
142bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const Region operation(const Rect& rhs, int op) const;
143bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const Region operation(const Region& rhs, int op) const;
144bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopian    const Region operation(const Region& rhs, int dx, int dy, int op) const;
14520f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
14620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static void boolean_operation(int op, Region& dst,
14720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            const Region& lhs, const Region& rhs, int dx, int dy);
14820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static void boolean_operation(int op, Region& dst,
14920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            const Region& lhs, const Rect& rhs, int dx, int dy);
15020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
15120f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static void boolean_operation(int op, Region& dst,
15220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            const Region& lhs, const Region& rhs);
15320f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static void boolean_operation(int op, Region& dst,
15420f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            const Region& lhs, const Rect& rhs);
15520f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
15620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static void translate(Region& reg, int dx, int dy);
15720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static void translate(Region& dst, const Region& reg, int dx, int dy);
15820f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
15920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    static bool validate(const Region& reg, const char* name);
16020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
16120f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    Rect            mBounds;
16220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    Vector<Rect>    mStorage;
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
166bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopianconst Region Region::operator | (const Region& rhs) const {
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return merge(rhs);
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
169bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopianconst Region Region::operator & (const Region& rhs) const {
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return intersect(rhs);
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
172bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopianconst Region Region::operator - (const Region& rhs) const {
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return subtract(rhs);
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
175bed9dd128dfbdc7d9dbca005078536dadc0b9359Mathias Agopianconst Region Region::operator + (const Point& pt) const {
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return translate(pt.x, pt.y);
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::operator |= (const Region& rhs) {
181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return orSelf(rhs);
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::operator &= (const Region& rhs) {
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return andSelf(rhs);
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::operator -= (const Region& rhs) {
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return subtractSelf(rhs);
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectRegion& Region::operator += (const Point& pt) {
190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return translateSelf(pt.x, pt.y);
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct region_iterator : public copybit_region_t {
19620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    region_iterator(const Region& region)
19720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian        : b(region.begin()), e(region.end()) {
198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        this->next = iterate;
199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    static int iterate(copybit_region_t const * self, copybit_rect_t* rect) {
20220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian        region_iterator const* me = static_cast<region_iterator const*>(self);
20320f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian        if (me->b != me->e) {
20420f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            *reinterpret_cast<Rect*>(rect) = *me->b++;
20520f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian            return 1;
20620f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian        }
20720f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian        return 0;
208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
20920f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    mutable Region::const_iterator b;
21020f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian    Region::const_iterator const e;
211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
21220f68782a4ea71c6a977d7f87d8288d3daa265ecMathias Agopian
213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_UI_REGION_H
217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
218