| Index: src/record/SkRecordPattern.h
|
| diff --git a/src/record/SkRecordPattern.h b/src/record/SkRecordPattern.h
|
| index b1334a87c6a2149478205d68d2f62cdfc7ec14ae..57779ffd761f032194302877dbf1fb7f82f31f6b 100644
|
| --- a/src/record/SkRecordPattern.h
|
| +++ b/src/record/SkRecordPattern.h
|
| @@ -85,44 +85,13 @@ struct Or {
|
| template <typename A, typename B, typename C>
|
| struct Or3 : Or<A, Or<B, C> > {};
|
|
|
| -// We'll use this to choose which implementation of Star suits each Matcher.
|
| -SK_CREATE_TYPE_DETECTOR(type);
|
| -
|
| -// Star is a special matcher that matches Matcher 0 or more times _greedily_ in the SkRecord.
|
| -// This version stores nothing. It's enabled when Matcher stores nothing.
|
| -template <typename Matcher, typename = void>
|
| -class Star {
|
| -public:
|
| - void reset() {}
|
| -
|
| - template <typename T>
|
| - bool operator()(T* ptr) { return Matcher()(ptr); }
|
| -};
|
| -
|
| -// This version stores a list of matches. It's enabled if Matcher stores something.
|
| +// Star is a special matcher that greedily matches Matcher 0 or more times. Stores nothing.
|
| template <typename Matcher>
|
| -class Star<Matcher, SK_WHEN(HasType_type<Matcher>, void)> {
|
| -public:
|
| - typedef SkTDArray<typename Matcher::type*> type;
|
| - type* get() { return &fMatches; }
|
| -
|
| - void reset() { fMatches.rewind(); }
|
| -
|
| +struct Star {
|
| template <typename T>
|
| - bool operator()(T* ptr) {
|
| - Matcher matcher;
|
| - if (matcher(ptr)) {
|
| - fMatches.push(matcher.get());
|
| - return true;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| -private:
|
| - type fMatches;
|
| + bool operator()(T* ptr) { return Matcher()(ptr); }
|
| };
|
|
|
| -
|
| // Cons builds a list of Matchers.
|
| // It first matches Matcher (something from above), then Pattern (another Cons or Nil).
|
| //
|
| @@ -175,7 +144,6 @@ private:
|
| // If head is a Star, walk i until it doesn't match.
|
| template <typename T>
|
| unsigned matchHead(Star<T>*, SkRecord* record, unsigned i) {
|
| - fHead.reset();
|
| while (i < record->count()) {
|
| if (!record->mutate<bool>(i, fHead)) {
|
| return i;
|
|
|