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; |