00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00027 #ifndef __MFNODEAUTOREFVECTOR_H__
00028 #define __MFNODEAUTOREFVECTOR_H__
00029
00030 #include "AutoRefVector.h"
00031
00032 namespace H3D {
00033
00034
00035 template< class RefClass >
00036 class RefCountMField;
00037
00038 namespace FieldInternals {
00039
00045 template< class RefClass >
00046 class H3DAPI_API MFNodeAutoRefVector: public AutoRefVector< RefClass > {
00047 public :
00048
00050 inline MFNodeAutoRefVector() {}
00051
00053 inline MFNodeAutoRefVector( typename AutoRefVector< RefClass >::size_type n ):
00054 AutoRefVector< RefClass >( n ) {}
00055
00057 inline virtual ~MFNodeAutoRefVector() {
00058 this->clear();
00059 }
00060
00062 inline MFNodeAutoRefVector &operator=(
00063 const MFNodeAutoRefVector &v ) {
00064 AutoRefVector< RefClass >::operator=( v );
00065 return *this;
00066 }
00067
00069 inline MFNodeAutoRefVector &operator=(
00070 const AutoRefVector< RefClass > &v ) {
00071 AutoRefVector< RefClass >::operator=( v );
00072 return *this;
00073 }
00074
00076 inline MFNodeAutoRefVector &operator=(
00077 const vector< RefClass *> &v ) {
00078 AutoRefVector< RefClass >::operator=( v );
00079 return *this;
00080 }
00081
00088 virtual void ref( RefClass *n ) const {
00089 if( n ) {
00090 AutoRefVector< RefClass >::ref( n );
00091 owner->onAdd( owner->preOnAdd( n ) );
00092 }
00093 }
00094
00102 virtual void unref( RefClass *n ) const {
00103 if( n ) {
00104 owner->onRemove( owner->preOnRemove( n ) );
00105 AutoRefVector< RefClass >::unref( n );
00106 }
00107 }
00108
00110 RefCountMField< RefClass > *owner;
00111 };
00112
00113 }
00114 }
00115
00116
00117
00118 #endif