36#include <Pt/Atomicity.h>
37#include <Pt/SerializationInfo.h>
107class InternalRefCounted
119 void link(
const InternalRefCounted& ptr, T*
object)
140 {
return _count ? *_count : 0; }
151 if ( _count && --*_count <= 0)
167 if(ptr._count == 0) {
168 _count =
new unsigned(1);
186class ExternalAtomicRefCounted
193 ExternalAtomicRefCounted()
197 bool unlink(T*
object)
210 void link(
const ExternalAtomicRefCounted& ptr, T*
object)
243 static void destroy(T* ptr)
249class FreeDestroyPolicy
257template <
typename ObjectType>
258class ArrayDestroyPolicy
261 static void destroy(ObjectType* ptr)
271 explicit AutoPtrRef(T* rhs)
293 typedef T element_type;
315 { this->destroy(ap); }
319 operator AutoPtrRef<Y>()
321 return AutoPtrRef<Y>(
release() );
353 operator bool ()
const
384AutoPtr<T> move(AutoPtr<T>& p)
393template <
typename T,
typename D,
typename T2,
typename D2>
395{
return a.
get() == b.
get(); }
401template <
typename T,
typename D,
typename T2>
403{
return a.
get() == b; }
410template <
typename T,
typename D,
typename T2,
typename D2>
412{
return a.
get() != b.
get(); }
418template <
typename T,
typename D,
typename T2>
420{
return a.
get() != b; }
427template <
typename T,
typename D,
typename T2,
typename D2>
429{
return a.v() < b.
get(); }
435template <
typename T,
typename D,
typename T2>
437{
return a.
get() < b; }
480 { this->
link(*
this, ptr); }
486 { this->
link(ptr, ptr.object); }
493 this->destroy(
object);
500 if(
object == ptr.object)
503 if( this->
unlink(
object) )
504 this->destroy(
object);
508 this->
link(ptr,
object);
513 void reset(T* ptr = 0)
518 if( this->
unlink(
object) )
519 this->destroy(
object);
523 this->
link(*
this,
object);
539 {
return object == 0; }
543 operator bool ()
const
544 {
return object != 0; }
562template <
typename T,
class O,
typename D,
typename T2,
typename O2,
typename D2>
564{
return a.
get() == b.
get(); }
570template <
typename T,
typename O,
typename D,
typename T2>
572{
return a.
get() == b; }
579template <
typename T,
typename O,
typename D,
typename T2,
typename O2,
typename D2>
581{
return a.
get() != b.
get(); }
587template <
typename T,
typename O,
typename D,
typename T2>
589{
return a.
get() != b; }
596template <
typename T,
typename O,
typename D,
typename T2,
typename O2,
typename D2>
598{
return a.
get() < b.
get(); }
604template <
typename T,
typename O,
typename D,
typename T2>
606{
return a.
get() < b; }
613template <
typename T,
typename M,
typename D >
631template <
typename T,
typename M,
typename D >
648template <
typename T,
typename M>
659template <
typename T,
typename M,
typename D >
662 if( ! sp.
get() || ! si.
save( *sp ) )
672template <
typename T,
typename M,
typename D >
675 if( sp.getPointer() )
681 si <<= sp.getPointer();
Policy based Auto pointer.
Definition SmartPtr.h:291
bool operator!=(const AutoPtr< T, D > &a, const AutoPtr< T2, D2 > &b)
Equality comparison operator.
Definition SmartPtr.h:411
T & operator*() const
Access value.
Definition SmartPtr.h:330
bool operator<(const AutoPtr< T, D > &a, const AutoPtr< T2, D2 > &b)
Less-than comparison operator.
Definition SmartPtr.h:428
bool operator<(const AutoPtr< T, D > &a, const T2 *b)
Less-than comparison operator.
Definition SmartPtr.h:436
T * release()
Release ownership.
Definition SmartPtr.h:357
~AutoPtr()
Destructor.
Definition SmartPtr.h:314
bool operator!() const
Returns true if nullptr.
Definition SmartPtr.h:341
AutoPtr(T *ptr=0)
Default constructor.
Definition SmartPtr.h:297
bool operator==(const AutoPtr< T, D > &a, const AutoPtr< T2, D2 > &b)
Equality comparison operator.
Definition SmartPtr.h:394
T * operator->() const
Access value.
Definition SmartPtr.h:335
bool operator==(const AutoPtr< T, D > &a, const T2 *b)
Equality comparison operator.
Definition SmartPtr.h:402
void reset(T *ptr=0)
Reset value.
Definition SmartPtr.h:365
AutoPtr & operator=(AutoPtrRef< T > rhs)
Assignment operator.
Definition SmartPtr.h:307
bool operator!=(const AutoPtr< T, D > &a, const T2 *b)
Equality comparison operator.
Definition SmartPtr.h:419
T * get() const
Access value.
Definition SmartPtr.h:325
AutoPtr(AutoPtrRef< T > rhs)
Copy constructor.
Definition SmartPtr.h:302
Deleter policy for SmartPtr.
Definition SmartPtr.h:241
Non-intrusive reference counting for SmartPtr.
Definition SmartPtr.h:136
int refs() const
Returns the refcount.
Definition SmartPtr.h:139
bool unlink(T *object)
unlink a smart pointer from a managed object
Definition SmartPtr.h:149
ExternalRefCounted()
Default constructor.
Definition SmartPtr.h:144
void link(const ExternalRefCounted &ptr, T *object)
link a smart pointer to a managed object
Definition SmartPtr.h:163
Fixup of references during serialization.
Definition FixupInfo.h:43
Loads referencable types.
Definition SerializationInfo.h:916
const SerializationInfo & in() const
Returns the SerializationInfo to load from.
Definition SerializationInfo.h:925
void load(T &type) const
Loads the type.
Definition SerializationInfo.h:931
bool unlink(T *object)
Unlink a smart pointer from a managed object.
Definition SmartPtr.h:64
RefLinked()
Default constructor.
Definition SmartPtr.h:58
void link(const RefLinked &ptr, T *object)
Link a smart pointer to a managed object.
Definition SmartPtr.h:84
Saves referencable types.
Definition SerializationInfo.h:843
SerializationInfo & out() const
Returns the SerializationInfo to save to.
Definition SerializationInfo.h:852
bool save(const T &type)
Returns true if type was saved, false if type was already saved.
Definition SerializationInfo.h:858
Represents arbitrary types during serialization.
Definition SerializationInfo.h:59
bool isReference() const
Returns true if reference.
Definition SerializationInfo.h:168
void loadReference(T &fixme, unsigned mid=0) const
Load a reference during deserialization.
Definition SerializationInfo.h:579
T * get()
Get non-owning pointer.
Definition SmartPtr.h:548
T & operator*() const
Access value.
Definition SmartPtr.h:533
SmartPtr(T *ptr)
Constructs from a pointer to manage.
Definition SmartPtr.h:478
bool unlink(T *object)
unlink a smart pointer from a managed object
Definition SmartPtr.h:111
bool operator==(const SmartPtr< T, O, D > &a, const T2 *b)
Equality comparison operator.
Definition SmartPtr.h:571
SmartPtr(const SmartPtr &ptr)
Copy constructor.
Definition SmartPtr.h:484
void fixup(const Pt::FixupInfo &fixup, SmartPtr< T, M, D > &fixme)
Custom fixup for deserialization.
Definition SmartPtr.h:614
bool operator!() const
Returns true if the raw pointer is null.
Definition SmartPtr.h:538
SmartPtr()
Default Constructor.
Definition SmartPtr.h:472
bool operator!=(const SmartPtr< T, O, D > &a, const T2 *b)
Equality comparison operator.
Definition SmartPtr.h:588
T * operator->() const
Access value.
Definition SmartPtr.h:528
void save(Pt::SaveInfo &si, const SmartPtr< T, M, D > &sp)
Custom saving for serialization.
Definition SmartPtr.h:660
bool operator<(const SmartPtr< T, O, D > &a, const T2 *b)
Less-than comparison operator.
Definition SmartPtr.h:605
SmartPtr & operator=(const SmartPtr &ptr)
Assign from another SmartPtr.
Definition SmartPtr.h:498
void load(const LoadInfo &li, SmartPtr< T, M, D > &sp)
Custom loading for deserialization.
Definition SmartPtr.h:632
bool operator<(const SmartPtr< T, O, D > &a, const SmartPtr< T2, O2, D2 > &b)
Less-than comparison operator.
Definition SmartPtr.h:597
void link(const InternalRefCounted &ptr, T *object)
link a smart pointer to a managed object
Definition SmartPtr.h:119
~SmartPtr()
Destructor.
Definition SmartPtr.h:490
bool operator==(const SmartPtr< T, O, D > &a, const SmartPtr< T2, O2, D2 > &b)
Equality comparison operator.
Definition SmartPtr.h:563
bool operator!=(const SmartPtr< T, O, D > &a, const SmartPtr< T2, O2, D2 > &b)
Equality comparison operator.
Definition SmartPtr.h:580
const T * get() const
Get non-owning pointer.
Definition SmartPtr.h:553
int atomicDecrement(volatile atomic_t &val)
Decreases a value by one as an atomic operation.
int atomicGet(volatile atomic_t &val)
Atomically get a value.
int atomicIncrement(volatile atomic_t &val)
Increases a value by one as an atomic operation.
Core module.
Definition Allocator.h:33
atomic_t(int v=0)
Construct with initial value.