1/* 2 * Copyright 2020 Google LLC. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8#ifndef SKSL_MODIFIERSPOOL 9#define SKSL_MODIFIERSPOOL 10 11#include "include/private/SkSLModifiers.h" 12 13#include <unordered_set> 14 15namespace SkSL { 16 17/** 18 * Deduplicates Modifiers objects and stores them in a shared pool. Modifiers are fairly heavy, and 19 * tend to be reused a lot, so deduplication can be a significant win. 20 */ 21class ModifiersPool { 22public: 23 const Modifiers* add(const Modifiers& modifiers) { 24 auto [iter, wasInserted] = fModifiersSet.insert(modifiers); 25 return &*iter; 26 } 27 28 void clear() { 29 fModifiersSet.clear(); 30 } 31 32private: 33 std::unordered_set<Modifiers> fModifiersSet; 34}; 35 36} // namespace SkSL 37 38#endif 39