28 #ifndef __REFCOUNTSFIELD_H__
29 #define __REFCOUNTSFIELD_H__
41 template<
class RefClass,
class BaseField = H3D::Field >
59 AUTOREF_DEBUG_NAME(
value,
"RefCountSField::value")
60 value.rc_field =
this;
65 AUTOREF_DEBUG_NAME(
value,
"RefCountSField::value")
66 value.rc_field =
this;
73 inline virtual void setValue( RefClass *n,
int id = 0 );
76 inline virtual RefClass *
getValue(
int id = 0 );
82 virtual RefClass *preOnAdd( RefClass *n ) {
86 virtual RefClass *preOnRemove( RefClass *n ) {
95 class RefCountSFieldAutoRef:
public AutoRef< RefClass > {
99 explicit RefCountSFieldAutoRef( RefClass* n = 0) throw() :
100 AutoRef< RefClass >( n ),
106 RefCountSFieldAutoRef&
operator=(RefClass* n)
throw() {
112 template<
class RefClassClass >
113 RefCountSFieldAutoRef&
operator=(
const AutoRef<RefClassClass> &n)
115 this->
reset( n.get() );
120 ~RefCountSFieldAutoRef() throw() {
131 inline virtual void ref( RefClass *n ) {
132 if( rc_field && n ) {
134 rc_field->onAdd( rc_field->preOnAdd( n ) );
144 inline virtual void unref( RefClass *n ) {
145 if( rc_field && n ) {
146 rc_field->onRemove( rc_field->preOnRemove( n ) );
154 friend class RefCountSFieldAutoRef;
157 H3D_DISABLE_UNUSED_PARAMETER_WARNING()
165 #ifdef REF_COUNT_DEBUG
166 Console(LogLevel::Debug) <<
"RefCountSField: Add node" << endl;
177 #ifdef REF_COUNT_DEBUG
178 Console(LogLevel::Debug) <<
"RefCountSField: Remove node" << endl;
187 template< class RefClass, class BaseField >
189 #ifdef REF_COUNT_DEBUG
190 Console(LogLevel::Debug) <<
"RefCountSField(" << name <<
")::update() event_ptr = "
191 <<
event.ptr << endl;
197 template<
class RefClass,
class BaseField >
200 this->checkAccessTypeSet(
id );
201 #ifdef REF_COUNT_DEBUG
202 Console(LogLevel::Debug) <<
"RefCountSField(" << name <<
")::setValue()" << endl;
209 template<
class RefClass,
class BaseField >
213 this->setValue( n.
get(),
id );
216 template<
class RefClass,
class BaseField >
218 #ifdef REF_COUNT_DEBUG
219 Console(LogLevel::Debug) <<
"RefCountSField(" << name <<
")::getValue()" << endl;
221 this->checkAccessTypeGet(
id );
Contains the Field class.
AutoRef< RefCountedClassType > & operator=(const AutoRef< RefCountedClassType > &ar)
virtual void unref(RefCountedClassType *n)
RefCountedClassType * get() const
void reset(RefCountedClassType *p=0)
virtual void ref(RefCountedClassType *n)
RefCountSField is almost like any SField but it encapsulates a pointer to a RefCountedClass.
Definition: RefCountSField.h:42
RefCountSField(RefClass *_value)
Constructor.
Definition: RefCountSField.h:64
virtual void onRemove(RefClass *n)
This function will be called when the value of RefCountSField changes.
Definition: RefCountSField.h:176
RefClass * value_type
The type of the value in this field.
Definition: RefCountSField.h:55
virtual void setValue(const AutoRef< RefClass > &n, int id=0)
Set the value of the field.
Definition: RefCountSField.h:210
virtual void onAdd(RefClass *n)
This function will be called when the value of RefCountSField changes.
Definition: RefCountSField.h:164
RefClass typed_class_type
The same as class_type, but if e.g.
Definition: RefCountSField.h:47
virtual void update()
Make the field up to date if an event has occured.
Definition: RefCountSField.h:188
virtual void setValue(RefClass *n, int id=0)
Set the value of the field.
Definition: RefCountSField.h:198
RefCountSFieldAutoRef value
The encapsulated value.
Definition: RefCountSField.h:183
RefCountSField()
Constructor. Default value of value is NULL.
Definition: RefCountSField.h:58
virtual RefClass * getValue(int id=0)
Get the value of the field.
Definition: RefCountSField.h:217
RefClass class_type
The type of which this field contains a pointer to.
Definition: RefCountSField.h:53
RefClass * typed_value_type
The same as value_type, but if e.g.
Definition: RefCountSField.h:51
Type getValue(const char *s, const char *&rest)
Function that reads characters from a char * and converts them to a given type.
Definition: X3DFieldConversion.h:134
H3D API namespace.
Definition: Anchor.h:38