blob: 65fe7af1eb28b38becef95611f00eb4acc30ed30 [file] [log] [blame]
reed54dc4872016-09-13 08:09:45 -07001/*
2 * Copyright 2016 Google Inc.
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 SkRefSet_DEFINED
9#define SkRefSet_DEFINED
10
11#include "SkRefCnt.h"
Ben Wagner36fe60d2018-07-10 17:38:12 -040012#include "SkTArray.h"
reed54dc4872016-09-13 08:09:45 -070013
14template <typename T> class SkRefSet {
15public:
reed54dc4872016-09-13 08:09:45 -070016 T* get(int index) const {
17 SkASSERT((unsigned)index < (unsigned)fArray.count());
Ben Wagner36fe60d2018-07-10 17:38:12 -040018 return fArray[index].get();
reed54dc4872016-09-13 08:09:45 -070019 }
20
Ben Wagner36fe60d2018-07-10 17:38:12 -040021 bool set(int index, sk_sp<T> value) {
22 if (index < fArray.count()) {
23 fArray[index] = std::move(value);
reed54dc4872016-09-13 08:09:45 -070024 return true;
25 }
26 if (fArray.count() == index && value) {
Ben Wagner36fe60d2018-07-10 17:38:12 -040027 fArray.emplace_back(std::move(value));
reed54dc4872016-09-13 08:09:45 -070028 return true;
29 }
30 SkDebugf("SkRefSet: index [%d] out of range %d\n", index, fArray.count());
31 return false;
32 }
33
34private:
Ben Wagner36fe60d2018-07-10 17:38:12 -040035 SkTArray<sk_sp<T>, true> fArray;
reed54dc4872016-09-13 08:09:45 -070036};
37
38#endif