| 59 | | struct InternalRefCountPolicy |
|---|
| 60 | | { |
|---|
| 61 | | static void |
|---|
| 62 | | addRef(FieldContainerPtrConstArg pContainer); |
|---|
| 63 | | |
|---|
| 64 | | static void |
|---|
| 65 | | subRef(FieldContainerPtrConstArg pContainer); |
|---|
| 66 | | |
|---|
| 67 | | static FieldContainerPtr |
|---|
| 68 | | deref(FieldContainerPtrConstArg pContainer); |
|---|
| 69 | | }; |
|---|
| 70 | | |
|---|
| 71 | | struct RefCountPolicy |
|---|
| 72 | | { |
|---|
| 73 | | static void |
|---|
| 74 | | addRef(FieldContainerPtrConstArg pContainer); |
|---|
| 75 | | |
|---|
| 76 | | static void |
|---|
| 77 | | subRef(FieldContainerPtrConstArg pContainer); |
|---|
| 78 | | |
|---|
| 79 | | static FieldContainerPtr |
|---|
| 80 | | deref(FieldContainerPtrConstArg pContainer); |
|---|
| 81 | | }; |
|---|
| 82 | | |
|---|
| 83 | | struct MTRefCountPolicy |
|---|
| 84 | | { |
|---|
| 85 | | static void |
|---|
| 86 | | addRef(FieldContainerPtrConstArg pContainer); |
|---|
| 87 | | |
|---|
| 88 | | static void |
|---|
| 89 | | subRef(FieldContainerPtrConstArg pContainer); |
|---|
| 90 | | |
|---|
| 91 | | static FieldContainerPtr |
|---|
| 92 | | deref(FieldContainerPtrConstArg pContainer); |
|---|
| 93 | | }; |
|---|
| 94 | | |
|---|
| 95 | | struct WeakRefCountPolicy |
|---|
| 96 | | { |
|---|
| 97 | | static void |
|---|
| 98 | | addRef(FieldContainerPtrConstArg pContainer); |
|---|
| 99 | | |
|---|
| 100 | | static void |
|---|
| 101 | | subRef(FieldContainerPtrConstArg pContainer); |
|---|
| 102 | | |
|---|
| 103 | | static FieldContainerPtr |
|---|
| 104 | | deref(FieldContainerPtrConstArg pContainer); |
|---|
| 105 | | } |
|---|
| 106 | | |
|---|
| 107 | | /*! \ingroup GrpSystemFieldContainer |
|---|
| 108 | | */ |
|---|
| 109 | | |
|---|
| 110 | | template <class ContainerT, class RefCountPolicyT> |
|---|
| 111 | | class ReferenceCountPointer |
|---|
| | 61 | /*! \ingroup GrpSystemFieldContainer |
|---|
| | 62 | \class InternalRefCountPolicy<RootObjectT> |
|---|
| | 63 | */ |
|---|
| | 64 | |
|---|
| | 65 | template <class RootObjectT> |
|---|
| | 66 | struct OSG_SYSTEM_DLLMAPPING InternalRefCountPolicy |
|---|
| | 67 | { |
|---|
| | 68 | OSG_GEN_NAMED_CONTAINER_PTR(RootObjectT, RootObject) |
|---|
| | 69 | |
|---|
| | 70 | static void addRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 71 | static void subRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 72 | static RootObjectPtr deref (RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 73 | }; |
|---|
| | 74 | |
|---|
| | 75 | /*! \ingroup GrpSystemFieldContainer |
|---|
| | 76 | \class RefCountPolicy<RootObjectT> |
|---|
| | 77 | */ |
|---|
| | 78 | |
|---|
| | 79 | template <class RootObjectT> |
|---|
| | 80 | struct OSG_SYSTEM_DLLMAPPING RefCountPolicy |
|---|
| | 81 | { |
|---|
| | 82 | OSG_GEN_NAMED_CONTAINER_PTR(RootObjectT, RootObject) |
|---|
| | 83 | |
|---|
| | 84 | static void addRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 85 | static void subRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 86 | static RootObjectPtr deref (RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 87 | }; |
|---|
| | 88 | |
|---|
| | 89 | /*! \ingroup GrpSystemFieldContainer |
|---|
| | 90 | \class MTRefCountPolicy<RootObjectT> |
|---|
| | 91 | */ |
|---|
| | 92 | |
|---|
| | 93 | template <class RootObjectT> |
|---|
| | 94 | struct OSG_SYSTEM_DLLMAPPING MTRefCountPolicy |
|---|
| | 95 | { |
|---|
| | 96 | }; |
|---|
| | 97 | |
|---|
| | 98 | template <> |
|---|
| | 99 | struct OSG_SYSTEM_DLLMAPPING MTRefCountPolicy<FieldContainer> |
|---|
| | 100 | { |
|---|
| | 101 | OSG_GEN_NAMED_CONTAINER_PTR(FieldContainer, RootObject) |
|---|
| | 102 | |
|---|
| | 103 | static void addRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 104 | static void subRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 105 | static RootObjectPtr deref (RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 106 | }; |
|---|
| | 107 | |
|---|
| | 108 | template <> |
|---|
| | 109 | struct OSG_SYSTEM_DLLMAPPING MTRefCountPolicy<FieldBundle> |
|---|
| | 110 | { |
|---|
| | 111 | OSG_GEN_NAMED_CONTAINER_PTR(FieldBundle, RootObject) |
|---|
| | 112 | |
|---|
| | 113 | static void addRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 114 | static void subRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 115 | static RootObjectPtr deref (RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 116 | }; |
|---|
| | 117 | |
|---|
| | 118 | /*! \ingroup GrpSystemFieldContainer |
|---|
| | 119 | \class WeakRefCountPolicy<RootObjectT> |
|---|
| | 120 | */ |
|---|
| | 121 | |
|---|
| | 122 | template <class RootObjectT> |
|---|
| | 123 | struct OSG_SYSTEM_DLLMAPPING WeakRefCountPolicy |
|---|
| | 124 | { |
|---|
| | 125 | OSG_GEN_NAMED_CONTAINER_PTR(RootObjectT, RootObject) |
|---|
| | 126 | |
|---|
| | 127 | static void addRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 128 | static void subRef(RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 129 | static RootObjectPtr deref (RootObjectPtrConstArg rootObjectPtr); |
|---|
| | 130 | }; |
|---|
| | 131 | |
|---|
| | 132 | /*! \ingroup GrpSystemFieldContainer |
|---|
| | 133 | */ |
|---|
| | 134 | |
|---|
| | 135 | template <class ObjectT, |
|---|
| | 136 | class RefCountPolicyT, |
|---|
| | 137 | class RootObjectT = FieldContainer> |
|---|
| | 138 | class OSG_SYSTEM_DLLMAPPING ReferenceCountPointer |
|---|
| 220 | | operator==(ReferenceCountPointer<LHSContainerT, LHSRefCountPolicyT> const &lhs, |
|---|
| 221 | | ReferenceCountPointer<RHSContainerT, RHSRefCountPolicyT> const &rhs); |
|---|
| 222 | | |
|---|
| 223 | | |
|---|
| 224 | | template <class LHSContainerT, class LHSRefCountPolicyT, |
|---|
| 225 | | class RHSContainerT, class RHSRefCountPolicyT > |
|---|
| | 251 | operator==(ReferenceCountPointer<LHSObjectT, |
|---|
| | 252 | LHSRefCountPolicyT, |
|---|
| | 253 | RootObjectT > const &lhs, |
|---|
| | 254 | ReferenceCountPointer<RHSObjectT, |
|---|
| | 255 | RHSRefCountPolicyT, |
|---|
| | 256 | RootObjectT > const &rhs); |
|---|
| | 257 | |
|---|
| | 258 | |
|---|
| | 259 | template <class LHSObjectT, class LHSRefCountPolicyT, |
|---|
| | 260 | class RHSObjectT, class RHSRefCountPolicyT, |
|---|
| | 261 | class RootObjectT > |
|---|
| 234 | | operator<(ReferenceCountPointer<LHSContainerT, LHSRefCountPolicyT> const &lhs, |
|---|
| 235 | | ReferenceCountPointer<RHSContainerT, RHSRefCountPolicyT> const &rhs); |
|---|
| 236 | | |
|---|
| 237 | | |
|---|
| 238 | | template <class ContainerT> |
|---|
| 239 | | struct InternalRefCountPtrBuilder |
|---|
| 240 | | { |
|---|
| 241 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 242 | | InternalRefCountPolicy> Ptr; |
|---|
| 243 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 244 | | InternalRefCountPolicy> const PtrConst; |
|---|
| 245 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 246 | | InternalRefCountPolicy> ConstPtr; |
|---|
| 247 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 248 | | InternalRefCountPolicy> const ConstPtrConst; |
|---|
| 249 | | }; |
|---|
| 250 | | |
|---|
| 251 | | template <class ContainerT> |
|---|
| 252 | | struct RefCountPtrBuilder |
|---|
| 253 | | { |
|---|
| 254 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 255 | | RefCountPolicy > Ptr; |
|---|
| 256 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 257 | | RefCountPolicy > const PtrConst; |
|---|
| 258 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 259 | | RefCountPolicy > ConstPtr; |
|---|
| 260 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 261 | | RefCountPolicy > const ConstPtrConst; |
|---|
| 262 | | }; |
|---|
| 263 | | |
|---|
| 264 | | template <class ContainerT> |
|---|
| 265 | | struct MTRefCountPtrBuilder |
|---|
| 266 | | { |
|---|
| 267 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 268 | | MTRefCountPolicy > Ptr; |
|---|
| 269 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 270 | | MTRefCountPolicy > const PtrConst; |
|---|
| 271 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 272 | | MTRefCountPolicy > ConstPtr; |
|---|
| 273 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 274 | | MTRefCountPolicy > const ConstPtrConst; |
|---|
| 275 | | }; |
|---|
| 276 | | |
|---|
| 277 | | template <class ContainerT> |
|---|
| 278 | | struct WeakRefCountPtrBuilder |
|---|
| 279 | | { |
|---|
| 280 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 281 | | WeakRefCountPolicy> Ptr; |
|---|
| 282 | | typedef ReferenceCountPointer<ContainerT, |
|---|
| 283 | | WeakRefCountPolicy> const PtrConst; |
|---|
| 284 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 285 | | WeakRefCountPolicy> ConstPtr; |
|---|
| 286 | | typedef ReferenceCountPointer<ContainerT const, |
|---|
| 287 | | WeakRefCountPolicy> const ConstPtrConst; |
|---|
| 288 | | }; |
|---|
| | 275 | operator<(ReferenceCountPointer<LHSObjectT, |
|---|
| | 276 | LHSRefCountPolicyT, |
|---|
| | 277 | RootObjectT > const &lhs, |
|---|
| | 278 | ReferenceCountPointer<RHSObjectT, |
|---|
| | 279 | RHSRefCountPolicyT, |
|---|
| | 280 | RootObjectT > const &rhs); |
|---|