59 virtual void ref_to(
unsigned )
const {}
72 Rep() : _counter( 0 ) {}
76 Rep(
const Rep & ) : _counter( 0 ) {}
84 virtual ~Rep() {
if ( _counter )
throw(
this ); }
137 virtual const char *
repName()
const {
return "Rep"; }
143 virtual std::ostream &
dumpOn( std::ostream &
str )
const;
224 virtual std::ostream &
dumpOn( std::ostream &
str )
const;
269 template<
typename _Tp,
typename _Bt = _Tp>
285 void _assign( _Tp * new_r );
319 operator _Tp *()
const {
return _obj; }
326 void tryAssign( _Bt * ptr );
337 const Rep * refbase()
const;
340 template<
typename _Tp,
typename _Bt>
342 if ( new_r != _obj ) {
349 template<
typename _Tp,
typename _Bt>
351 _assign( dynamic_cast<_Tp*>(ptr) );
352 if ( !_obj && ptr && ! ptr->refCount() ) {
358 template<
typename _Tp,
typename _Bt>
361 template<
typename _Tp,
typename _Bt>
392 virtual const Rep * refbase()
const = 0;
400 operator const void *()
const {
return refbase(); }
415 template<
typename _Bt>
425 virtual _Bt *
base()
const = 0;
445 template<
typename _Bt>
453 virtual const _Bt * base()
const = 0;
473 template<
typename _Tp,
typename _Bt>
class constPtr;
481 template<
typename _Tp,
typename _Bt = _Tp>
507 Ptr( _Tp * ptr = 0 ) : _ptr( ptr ) {}
550 return const_cast<_Tp*
>(rhs.operator->());
562 template<
typename _Tp,
typename _Bt = _Tp>
581 virtual const _Bt *
base()
const {
return _ptr.
base(); }
673 friend std::ostream &
675 {
return str << obj.
_ptr; }
681 operator const void *()
const 699 { _assign( rhs.
_ptr ); }
703 { _assign( rhs.
_ptr );
return *
this; }
768 template<
typename _Rep>
819 template<
typename _Rep>
virtual const Rep * refbase() const
Definition: Rep.h:496
virtual void unref_to(unsigned) const
Definition: Rep.h:65
CountedRep(const CountedRep &rhs)
Definition: Rep.h:194
std::ostream & operator<<(std::ostream &str, const Rep &obj)
Definition: Rep.cc:38
CountedRep & operator=(const CountedRep &rhs)
Definition: Rep.h:198
virtual const char * repName() const
Definition: Rep.h:137
virtual const _Bt * base() const =0
Simple counted pointer with variable like const access.
Definition: Rep.h:769
constPtr & operator=(const constPtr &rhs)
Definition: Rep.h:607
#define str
Definition: scanner.cc:1003
constPtr(const Ptr< _Tp, _Bt > &rhs)
Definition: Rep.h:618
constPtr(const _Tp *ptr=0)
Definition: Rep.h:588
void ref() const
Definition: Rep.h:91
Ptr(_Tp *ptr=0)
Definition: Rep.h:507
constPtr(const constPtr &rhs)
Definition: Rep.h:592
Base class for reference counted objects. Provides numerical object ids.
Definition: Rep.h:167
unsigned objectId() const
Definition: Rep.h:212
RepPtrStore(const RepPtrStore &rhs)
Definition: Rep.h:300
BasicRepPtr(Rep *ptr)
Definition: Rep.h:693
~RepPtrStore()
Definition: Rep.h:314
void _assign(Rep *new_r)
Definition: Rep.h:726
Ptr(const Ptr &rhs)
Definition: Rep.h:511
static void unref(const Rep *obj_r)
Definition: Rep.h:120
const _Rep & operator*() const
Definition: Rep.h:803
static unsigned _objectCount
Definition: Rep.h:174
_Bt * getBase(const PtrBase &rhs) const
Definition: Rep.h:430
RepPtrStore()
Definition: Rep.h:292
Common base class for all counted pointer classes.
Definition: Rep.h:377
const _Tp * operator->() const
Definition: Rep.h:640
VarPtr()
Definition: Rep.h:776
_Tp * operator->() const
Definition: Rep.h:537
virtual ~Rep()
Definition: Rep.h:84
virtual ~CountedRep()
Definition: Rep.h:205
unsigned _counter
Definition: Rep.h:52
RepPtrStore & operator=(_Tp *ptr)
Definition: Rep.h:305
CountedRep()
Definition: Rep.h:190
BasicRepPtr()
Definition: Rep.h:688
const Rep * refbase() const
Definition: Rep.h:362
_Tp * _obj
Definition: Rep.h:277
virtual _Bt * base() const
Definition: Rep.h:500
Ptr & operator=(const PtrBase< _Bt > &rhs)
Definition: Rep.h:530
constPtr & operator=(const PtrBase< _Bt > &rhs)
Definition: Rep.h:633
A '_Tp*' with reference counting on construction and assign.
Definition: Rep.h:270
Counted 'const _Tp *'. Support construction/assignment via dynamic_cast from constPtrBase<_Bt> ...
Definition: Rep.h:473
Rep()
Definition: Rep.h:72
constPtr(const PtrBase< _Bt > &rhs)
Definition: Rep.h:622
Rep & operator=(const Rep &)
Definition: Rep.h:80
Base class wraping a Rep* and managing reference counting.
Definition: Rep.h:668
BasicRepPtr & operator=(const BasicRepPtr &rhs)
Definition: Rep.h:702
Counted '_Tp *'. Support construction/assignment via dynamic_cast from PtrBase<_Bt> ...
Definition: Rep.h:482
Ptr(const PtrBase< _Bt > &rhs)
Definition: Rep.h:515
void unref() const
Definition: Rep.h:99
Rep * repPtr() const
Definition: Rep.h:712
constPtr(const constPtrBase< _Bt > &rhs)
Definition: Rep.h:596
_Tp & operator*() const
Definition: Rep.h:542
RepPtrStore< const _Tp, const _Bt > _ptr
Definition: Rep.h:570
const unsigned _objectId
Definition: Rep.h:183
_Bt * base() const
Definition: Rep.h:359
~BasicRepPtr()
Definition: Rep.h:705
Ptr & operator=(_Tp *ptr)
Definition: Rep.h:522
Rep(const Rep &)
Definition: Rep.h:76
const _Tp & operator*() const
Definition: Rep.h:644
static Ptr cast_away_const(constPtr< _Tp, _Bt > rhs)
Definition: Rep.h:549
virtual const Rep * refbase() const
Definition: Rep.h:577
constPtr & operator=(const constPtrBase< _Bt > &rhs)
Definition: Rep.h:611
virtual std::ostream & dumpOn(std::ostream &str) const
Definition: Rep.cc:34
unsigned refCount() const
Definition: Rep.h:130
Rep * _ptr
Definition: Rep.h:719
void _assign(_Tp *new_r)
Definition: Rep.h:341
static unsigned objectCount()
Definition: Rep.h:217
virtual const _Bt * base() const
Definition: Rep.h:581
VarPtr< _Rep > makeVarPtr(_Rep *ptr)
Definition: Rep.h:821
Ptr & operator=(const Ptr &rhs)
Definition: Rep.h:526
static void ref(const Rep *obj_r)
Definition: Rep.h:112
BasicRepPtr(const BasicRepPtr &rhs)
Definition: Rep.h:697
Common base class for counted 'const _Bt *' (constPtr)
Definition: Rep.h:405
Base class for reference counted objects.
Definition: Rep.h:46
_Rep * ptr() const
Definition: Rep.h:809
RepPtrStore(_Tp *ptr)
Definition: Rep.h:296
constPtr & operator=(const Ptr< _Tp, _Bt > &rhs)
Definition: Rep.h:629
const _Bt * getBase(const constPtrBase &rhs) const
Definition: Rep.h:458
const _Bt * getBase(const PtrBase< _Bt > &rhs) const
Definition: Rep.h:466
virtual ~RepPtrBase()
Definition: Rep.h:388
_Rep & operator*()
Definition: Rep.h:799
void tryAssign(_Bt *ptr)
Definition: Rep.h:350
RepPtrStore< _Tp, _Bt > _ptr
Definition: Rep.h:489
constPtr & operator=(const _Tp *ptr)
Definition: Rep.h:603
const _Rep * operator->() const
Definition: Rep.h:795
virtual _Bt * base() const =0
virtual void ref_to(unsigned) const
Definition: Rep.h:59
_Rep * operator->()
Definition: Rep.h:791
Common base class for counted '_Bt *' (Ptr)
Definition: Rep.h:416
VarPtr(_Rep *ptr_r)
Definition: Rep.h:784
RepPtrStore & operator=(const RepPtrStore &rhs)
Definition: Rep.h:309
static unsigned _objectIds
Definition: Rep.h:178