| Index: src/record/SkRecordPattern.h
|
| diff --git a/src/record/SkRecordPattern.h b/src/record/SkRecordPattern.h
|
| index c5d87f2a20aeaa4cae597525e8e0f7734d42e3ad..b1334a87c6a2149478205d68d2f62cdfc7ec14ae 100644
|
| --- a/src/record/SkRecordPattern.h
|
| +++ b/src/record/SkRecordPattern.h
|
| @@ -17,13 +17,13 @@ public:
|
| typedef T type;
|
| type* get() { return fPtr; }
|
|
|
| - bool match(T* ptr) {
|
| + bool operator()(T* ptr) {
|
| fPtr = ptr;
|
| return true;
|
| }
|
|
|
| template <typename U>
|
| - bool match(U*) {
|
| + bool operator()(U*) {
|
| fPtr = NULL;
|
| return false;
|
| }
|
| @@ -42,19 +42,19 @@ public:
|
| type* get() { return fPaint; }
|
|
|
| template <typename T>
|
| - SK_WHEN(HasMember_paint<T>, bool) match(T* draw) {
|
| + SK_WHEN(HasMember_paint<T>, bool) operator()(T* draw) {
|
| fPaint = AsPtr(draw->paint);
|
| return true;
|
| }
|
|
|
| template <typename T>
|
| - SK_WHEN(!HasMember_paint<T>, bool) match(T*) {
|
| + SK_WHEN(!HasMember_paint<T>, bool) operator()(T*) {
|
| fPaint = NULL;
|
| return false;
|
| }
|
|
|
| // SaveLayer has an SkPaint named paint, but it's not a draw.
|
| - bool match(SaveLayer*) {
|
| + bool operator()(SaveLayer*) {
|
| fPaint = NULL;
|
| return false;
|
| }
|
| @@ -71,14 +71,14 @@ private:
|
| template <typename Matcher>
|
| struct Not {
|
| template <typename T>
|
| - bool match(T* ptr) { return !Matcher().match(ptr); }
|
| + bool operator()(T* ptr) { return !Matcher()(ptr); }
|
| };
|
|
|
| // Matches if either of A or B does. Stores nothing.
|
| template <typename A, typename B>
|
| struct Or {
|
| template <typename T>
|
| - bool match(T* ptr) { return A().match(ptr) || B().match(ptr); }
|
| + bool operator()(T* ptr) { return A()(ptr) || B()(ptr); }
|
| };
|
|
|
| // Matches if any of A, B or C does. Stores nothing.
|
| @@ -96,7 +96,7 @@ public:
|
| void reset() {}
|
|
|
| template <typename T>
|
| - bool match(T* ptr) { return Matcher().match(ptr); }
|
| + bool operator()(T* ptr) { return Matcher()(ptr); }
|
| };
|
|
|
| // This version stores a list of matches. It's enabled if Matcher stores something.
|
| @@ -109,9 +109,9 @@ public:
|
| void reset() { fMatches.rewind(); }
|
|
|
| template <typename T>
|
| - bool match(T* ptr) {
|
| + bool operator()(T* ptr) {
|
| Matcher matcher;
|
| - if (matcher.match(ptr)) {
|
| + if (matcher(ptr)) {
|
| fMatches.push(matcher.get());
|
| return true;
|
| }
|
| @@ -161,16 +161,11 @@ public:
|
| template <typename T> T* third() { return fTail.fTail.fHead.get(); }
|
|
|
| private:
|
| - template <typename T>
|
| - void operator()(T* r) { fHeadMatched = fHead.match(r); }
|
| -
|
| // If head isn't a Star, try to match at i once.
|
| template <typename T>
|
| unsigned matchHead(T*, SkRecord* record, unsigned i) {
|
| if (i < record->count()) {
|
| - fHeadMatched = false;
|
| - record->mutate(i, *this);
|
| - if (fHeadMatched) {
|
| + if (record->mutate<bool>(i, fHead)) {
|
| return i+1;
|
| }
|
| }
|
| @@ -182,9 +177,7 @@ private:
|
| unsigned matchHead(Star<T>*, SkRecord* record, unsigned i) {
|
| fHead.reset();
|
| while (i < record->count()) {
|
| - fHeadMatched = false;
|
| - record->mutate(i, *this);
|
| - if (!fHeadMatched) {
|
| + if (!record->mutate<bool>(i, fHead)) {
|
| return i;
|
| }
|
| i++;
|
| @@ -194,9 +187,6 @@ private:
|
|
|
| Matcher fHead;
|
| Pattern fTail;
|
| - bool fHeadMatched;
|
| -
|
| - friend class ::SkRecord; // So operator() can otherwise stay private.
|
|
|
| // All Cons are friends with each other. This lets first, second, and third work.
|
| template <typename, typename> friend class Cons;
|
|
|