Loading...
Searching...
No Matches
refBase.h
Go to the documentation of this file.
1//
2// Copyright 2016 Pixar
3//
4// Licensed under the Apache License, Version 2.0 (the "Apache License")
5// with the following modification; you may not use this file except in
6// compliance with the Apache License and the following modification to it:
7// Section 6. Trademarks. is deleted and replaced with:
8//
9// 6. Trademarks. This License does not grant permission to use the trade
10// names, trademarks, service marks, or product names of the Licensor
11// and its affiliates, except as required to comply with Section 4(c) of
12// the License and to reproduce the content of the NOTICE file.
13//
14// You may obtain a copy of the Apache License at
15//
16// http://www.apache.org/licenses/LICENSE-2.0
17//
18// Unless required by applicable law or agreed to in writing, software
19// distributed under the Apache License with the above modification is
20// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
21// KIND, either express or implied. See the Apache License for the specific
22// language governing permissions and limitations under the Apache License.
23//
24#ifndef PXR_BASE_TF_REF_BASE_H
25#define PXR_BASE_TF_REF_BASE_H
26
29
30#include "pxr/pxr.h"
31
33#include "pxr/base/tf/api.h"
34
35PXR_NAMESPACE_OPEN_SCOPE
36
37template <class T> class TfRefPtr;
38template <class T> class TfWeakPtr;
39
71class TfRefBase {
72public:
73
74 typedef void (*UniqueChangedFuncPtr)(TfRefBase const *, bool);
75 struct UniqueChangedListener {
76 void (*lock)();
77 UniqueChangedFuncPtr func;
78 void (*unlock)();
79 };
80
81 TfRefBase() : _shouldInvokeUniqueChangedListener(false) { }
82
84 size_t GetCurrentCount() const {
85 return GetRefCount().Get();
86 }
87
89 bool IsUnique() const {
90 return GetRefCount().Get() == 1;
91 }
92
93 const TfRefCount& GetRefCount() const {
94 return _refCount;
95 }
96
97 void SetShouldInvokeUniqueChangedListener(bool shouldCall) {
98 _shouldInvokeUniqueChangedListener = shouldCall;
99 }
100
101 TF_API static void SetUniqueChangedListener(UniqueChangedListener listener);
102
103protected:
104 /*
105 * Prohibit deletion through a TfRefBase pointer.
106 */
107 TF_API virtual ~TfRefBase();
108
109private:
110 TfRefCount _refCount;
111 bool _shouldInvokeUniqueChangedListener;
112
113 static UniqueChangedListener _uniqueChangedListener;
114 template <typename T> friend class TfRefPtr;
115 friend struct Tf_RefPtr_UniqueChangedCounter;
116 friend struct Tf_RefPtr_Counter;
117
118 template <typename T> friend TfRefPtr<T>
120};
121
132public:
133 TF_API virtual ~TfSimpleRefBase();
134};
135
136PXR_NAMESPACE_CLOSE_SCOPE
137
138#endif // PXR_BASE_TF_REF_BASE_H
Enable a concrete base class for use with TfRefPtr.
Definition: refBase.h:71
friend TfRefPtr< T > TfCreateRefPtrFromProtectedWeakPtr(TfWeakPtr< T > const &)
Thread-safe creation of a Tf ref pointer from a Tf weak pointer.
Definition: weakPtr.h:277
bool IsUnique() const
Return true if only one TfRefPtr points to this object.
Definition: refBase.h:89
size_t GetCurrentCount() const
Return the current reference count of this object.
Definition: refBase.h:84
Reference counter class.
Definition: refCount.h:71
int Get() const
Returns counter's value.
Definition: refCount.h:85
Reference-counted smart pointer utility class.
Definition: refPtr.h:576
Enable a concrete base class for use with TfRefPtr that inhibits the "unique changed" facility of TfR...
Definition: refBase.h:131
Pointer storage with deletion detection.
Definition: weakPtr.h:145