am 2401ead7
: Add a way to retrieve a Region as a SharedBuffer
* commit '2401ead70099c982796ecc3ec63ec8a5570948fc': Add a way to retrieve a Region as a SharedBuffer
This commit is contained in:
commit
1251754a1f
@ -28,6 +28,7 @@
|
||||
namespace android {
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
class SharedBuffer;
|
||||
class String8;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@ -106,17 +107,24 @@ public:
|
||||
|
||||
|
||||
/* various ways to access the rectangle list */
|
||||
|
||||
|
||||
// STL-like iterators
|
||||
typedef Rect const* const_iterator;
|
||||
|
||||
const_iterator begin() const;
|
||||
const_iterator end() const;
|
||||
const_iterator begin() const;
|
||||
const_iterator end() const;
|
||||
|
||||
// returns an array of rect which has the same life-time has this
|
||||
// Region object.
|
||||
Rect const* getArray(size_t* count) const;
|
||||
|
||||
// returns a SharedBuffer as well as the number of rects.
|
||||
// ownership is transfered to the caller.
|
||||
// the caller must call SharedBuffer::release() to free the memory.
|
||||
SharedBuffer const* getSharedBuffer(size_t* count) const;
|
||||
|
||||
/* no user serviceable parts here... */
|
||||
|
||||
Rect const* getArray(size_t* count) const;
|
||||
|
||||
|
||||
// add a rectangle to the internal list. This rectangle must
|
||||
// be sorted in Y and X and must not make the region invalid.
|
||||
void addRectUnchecked(int l, int t, int r, int b);
|
||||
|
@ -96,7 +96,7 @@ private:
|
||||
inline ~SharedBuffer() { }
|
||||
inline SharedBuffer(const SharedBuffer&);
|
||||
|
||||
// 16 bytes. must be sized to preserve correct alingment.
|
||||
// 16 bytes. must be sized to preserve correct alignment.
|
||||
mutable int32_t mRefs;
|
||||
size_t mSize;
|
||||
uint32_t mReserved[2];
|
||||
|
@ -606,6 +606,18 @@ Rect const* Region::getArray(size_t* count) const {
|
||||
return b;
|
||||
}
|
||||
|
||||
SharedBuffer const* Region::getSharedBuffer(size_t* count) const {
|
||||
// We can get to the SharedBuffer of a Vector<Rect> because Rect has
|
||||
// a trivial destructor.
|
||||
SharedBuffer const* sb = SharedBuffer::bufferFromData(mStorage.array());
|
||||
if (count) {
|
||||
size_t numRects = isRect() ? 1 : mStorage.size() - 1;
|
||||
count[0] = numRects;
|
||||
}
|
||||
sb->acquire();
|
||||
return sb;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
void Region::dump(String8& out, const char* what, uint32_t flags) const
|
||||
|
Loading…
Reference in New Issue
Block a user