123456789101112131415161718192021222324252627282930313233343536373839404142 |
- /*
- * Copyright 2019 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #include "src/gpu/GrSamplePatternDictionary.h"
- bool GrSamplePatternDictionary::LessThan::operator()(
- const SkTArray<SkPoint>& a, const SkTArray<SkPoint>& b) const {
- if (a.count() != b.count()) {
- return a.count() < b.count();
- }
- for (int i = 0; i < a.count(); ++i) {
- // This doesn't have geometric meaning. We just need to define an ordering for std::map.
- if (a[i].x() != b[i].x()) {
- return a[i].x() < b[i].x();
- }
- if (a[i].y() != b[i].y()) {
- return a[i].y() < b[i].y();
- }
- }
- return false; // Both sample patterns are equal, therefore, "a < b" is false.
- }
- int GrSamplePatternDictionary::findOrAssignSamplePatternKey(
- const SkTArray<SkPoint>& sampleLocations) {
- if (std::numeric_limits<int>::max() == fSampleLocationsArray.count()) {
- return 0;
- }
- const auto& insertResult = fSamplePatternKeyMap.insert(
- {sampleLocations, fSampleLocationsArray.count()});
- if (insertResult.second) {
- // This means the "insert" call did not find the pattern in the key map already, and
- // therefore an actual insertion took place. (We don't expect to see many unique sample
- // patterns.)
- const SkTArray<SkPoint>& sampleLocations = insertResult.first->first;
- fSampleLocationsArray.push_back(&sampleLocations);
- }
- return insertResult.first->second; // Return the new sample pattern key.
- }
|