Classes | Defines | Enumerations | Functions | Variables

nsCycleCollectionParticipant.h File Reference

#include "nsISupports.h"
Include dependency graph for nsCycleCollectionParticipant.h:
This graph shows which files directly or indirectly include this file:

Classes

class  nsCycleCollectionISupports
 Just holds the IID so NS_GET_IID works. More...
class  nsCycleCollectionTraversalCallback
class  nsCycleCollectionParticipant
class  nsScriptObjectTracer
class  nsXPCOMCycleCollectionParticipant

Defines

#define NS_CYCLECOLLECTIONPARTICIPANT_IID
#define NS_CYCLECOLLECTIONISUPPORTS_IID
 Special IID to get at the base nsISupports for a class.
#define IMETHOD_VISIBILITY   NS_COM_GLUE
#define IMETHOD_VISIBILITY   NS_VISIBILITY_HIDDEN
#define NS_CYCLE_COLLECTION_INNERCLASS   cycleCollection
#define NS_CYCLE_COLLECTION_CLASSNAME(_class)   _class::NS_CYCLE_COLLECTION_INNERCLASS
#define NS_CYCLE_COLLECTION_INNERNAME   _cycleCollectorGlobal
#define NS_CYCLE_COLLECTION_NAME(_class)   _class::NS_CYCLE_COLLECTION_INNERNAME
#define NS_IMPL_QUERY_CYCLE_COLLECTION(_class)
#define NS_IMPL_QUERY_CYCLE_COLLECTION_ISUPPORTS(_class)
#define NS_INTERFACE_MAP_ENTRY_CYCLE_COLLECTION(_class)   NS_IMPL_QUERY_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_MAP_ENTRY_CYCLE_COLLECTION_ISUPPORTS(_class)   NS_IMPL_QUERY_CYCLE_COLLECTION_ISUPPORTS(_class)
#define NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(_class)
#define NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED(_class)
#define NS_CYCLE_COLLECTION_UPCAST(obj, clazz)   NS_CYCLE_COLLECTION_CLASSNAME(clazz)::Upcast(obj)
#define NS_IMPL_CYCLE_COLLECTION_ROOT_BEGIN(_class)
#define NS_IMPL_CYCLE_COLLECTION_ROOT_BEGIN_NATIVE(_class, _root_function)
#define NS_IMPL_CYCLE_COLLECTION_ROOT_END
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(_class)
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(_class, _base_class)
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_NATIVE(_class)
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(_field)   tmp->_field = NULL;
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMARRAY(_field)   tmp->_field.Clear();
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NSTARRAY(_field)   tmp->_field.Clear();
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_END
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_0(_class)
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NATIVE_0(_class)
#define NS_IMPL_CYCLE_COLLECTION_DESCRIBE(_class, _refcnt)   cb.DescribeNode(RefCounted, _refcnt, sizeof(_class), #_class);
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(_class)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(_class)
#define NS_SUCCESS_INTERRUPTED_TRAVERSE   NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_XPCOM, 2)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(_class, _base_class)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_BEGIN(_class)
#define NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(_cb, _name)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_RAWPTR(_field)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(_field)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS(_field, _base)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMARRAY(_field)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_PTR(_ptr, _ptr_class, _name)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER(_field, _field_class)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY(_array, _element_class,_name)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY_MEMBER(_field,_element_class)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS   TraverseScriptObjects(tmp, cb);
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
#define NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(_class)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_NATIVE_BEGIN(_class)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_CALLBACK(_langID, _object)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_MEMBER_CALLBACK(_langID, _field)   NS_IMPL_CYCLE_COLLECTION_TRACE_CALLBACK(_langID, tmp->_field)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_JS_CALLBACK(_object)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(_field)   NS_IMPL_CYCLE_COLLECTION_TRACE_JS_CALLBACK(tmp->_field)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_END
#define NS_CYCLE_COLLECTION_PARTICIPANT_INSTANCE   static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
#define NS_DECL_CYCLE_COLLECTION_CLASS_BODY_NO_UNLINK(_class, _base)
#define NS_DECL_CYCLE_COLLECTION_CLASS_BODY(_class, _base)
#define NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(_class, _base)
#define NS_DECL_CYCLE_COLLECTION_CLASS(_class)   NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(_class, _class)
#define NS_DECL_CYCLE_COLLECTION_CLASS_NO_UNLINK(_class)
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(_class, _base)
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(_class)   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(_class, _class)
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY_NO_UNLINK(_class,_base_class)
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY(_class, _base_class)
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(_class, _base_class)
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_NO_UNLINK(_class,_base_class)
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(_class,_base_class)
#define NS_DECL_CYCLE_COLLECTION_UNMARK_PURPLE_STUB(_class)
 This implements a stub UnmarkPurple function for classes that want to be traversed but whose AddRef/Release functions don't add/remove them to/from the purple buffer.
#define NS_IMPL_CYCLE_COLLECTION_CLASS(_class)   NS_CYCLE_COLLECTION_CLASSNAME(_class) NS_CYCLE_COLLECTION_NAME(_class);
#define NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS_BODY
#define NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS(_class)
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(_class)
#define NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(_class, _root_function)
#define NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(_class, _unroot_function)
#define NS_IMPL_CYCLE_COLLECTION_0(_class)
#define NS_IMPL_CYCLE_COLLECTION_1(_class, _f)
#define NS_IMPL_CYCLE_COLLECTION_2(_class, _f1, _f2)
#define NS_IMPL_CYCLE_COLLECTION_3(_class, _f1, _f2, _f3)
#define NS_IMPL_CYCLE_COLLECTION_4(_class, _f1, _f2, _f3, _f4)
#define NS_IMPL_CYCLE_COLLECTION_5(_class, _f1, _f2, _f3, _f4, _f5)
#define NS_IMPL_CYCLE_COLLECTION_6(_class, _f1, _f2, _f3, _f4, _f5, _f6)
#define NS_IMPL_CYCLE_COLLECTION_7(_class, _f1, _f2, _f3, _f4, _f5, _f6, _f7)
#define NS_IMPL_CYCLE_COLLECTION_8(_class, _f1, _f2, _f3, _f4, _f5, _f6, _f7, _f8)

Enumerations

enum  CCNodeType { RefCounted, GCMarked, GCUnmarked }

Functions

 NS_DEFINE_STATIC_IID_ACCESSOR (nsCycleCollectionISupports,{0xc61eac14, 0x5f7a, 0x4481,{0x96, 0x5e, 0x7e, 0xaa, 0x6e, 0xff, 0xa8, 0x5f}}) class nsCycleCollectionParticipant
 NS_DEFINE_STATIC_IID_ACCESSOR (nsCycleCollectionParticipant,{0x9674489b, 0x1f6f, 0x4550,{0xa7, 0x30, 0xcc, 0xae, 0xdd, 0x10, 0x4c, 0xf9}}) typedef void(*TraceCallback)(PRUint32 langID

Variables

void * p
void void * closure

Define Documentation

#define IMETHOD_VISIBILITY   NS_COM_GLUE
#define IMETHOD_VISIBILITY   NS_VISIBILITY_HIDDEN
#define NS_CYCLE_COLLECTION_CLASSNAME (   _class  )     _class::NS_CYCLE_COLLECTION_INNERCLASS
#define NS_CYCLE_COLLECTION_INNERCLASS   cycleCollection
#define NS_CYCLE_COLLECTION_INNERNAME   _cycleCollectorGlobal
#define NS_CYCLE_COLLECTION_NAME (   _class  )     _class::NS_CYCLE_COLLECTION_INNERNAME
#define NS_CYCLE_COLLECTION_NOTE_EDGE_NAME (   _cb,
  _name 
)
Value:
PR_BEGIN_MACRO                                                               \
    if (NS_UNLIKELY((_cb).WantDebugInfo())) {                                  \
      (_cb).NoteNextEdgeName(_name);                                           \
    }                                                                          \
  PR_END_MACRO
#define NS_CYCLE_COLLECTION_PARTICIPANT_INSTANCE   static NS_CYCLE_COLLECTION_INNERCLASS NS_CYCLE_COLLECTION_INNERNAME;
#define NS_CYCLE_COLLECTION_UPCAST (   obj,
  clazz 
)    NS_CYCLE_COLLECTION_CLASSNAME(clazz)::Upcast(obj)
#define NS_CYCLECOLLECTIONISUPPORTS_IID
Value:
{                                                                              \
    0xc61eac14,                                                                \
    0x5f7a,                                                                    \
    0x4481,                                                                    \
    { 0x96, 0x5e, 0x7e, 0xaa, 0x6e, 0xff, 0xa8, 0x5f }                         \
}

Special IID to get at the base nsISupports for a class.

Usually this is the canonical nsISupports pointer, but in the case of tearoffs for example it is the base nsISupports pointer of the tearoff. This allow the cycle collector to have separate nsCycleCollectionParticipant's for tearoffs or aggregated classes.

#define NS_CYCLECOLLECTIONPARTICIPANT_IID
Value:
{                                                                              \
    0x9674489b,                                                                \
    0x1f6f,                                                                    \
    0x4550,                                                                    \
    { 0xa7, 0x30, 0xcc, 0xae, 0xdd, 0x10, 0x4c, 0xf9 }                         \
}
#define NS_DECL_CYCLE_COLLECTION_CLASS (   _class  )     NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(_class, _class)
#define NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS (   _class,
  _base 
)
#define NS_DECL_CYCLE_COLLECTION_CLASS_BODY (   _class,
  _base 
)
Value:
#define NS_DECL_CYCLE_COLLECTION_CLASS_BODY_NO_UNLINK (   _class,
  _base 
)
Value:
public:                                                                        \
  NS_IMETHOD Traverse(void *p,                                                 \
                      nsCycleCollectionTraversalCallback &cb);                 \
  NS_IMETHOD_(void) UnmarkPurple(nsISupports *s)                               \
  {                                                                            \
    Downcast(s)->UnmarkPurple();                                               \
  }                                                                            \
  static _class* Downcast(nsISupports* s)                                      \
  {                                                                            \
    return static_cast<_class*>(static_cast<_base*>(s));                       \
  }                                                                            \
  static nsISupports* Upcast(_class *p)                                        \
  {                                                                            \
    return NS_ISUPPORTS_CAST(_base*, p);                                       \
  }
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED (   _class,
  _base_class 
)
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY (   _class,
  _base_class 
)
Value:
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY_NO_UNLINK (   _class,
  _base_class 
)
Value:
public:                                                                        \
  NS_IMETHOD Traverse(void *p,                                                 \
                      nsCycleCollectionTraversalCallback &cb);                 \
  static _class* Downcast(nsISupports* s)                                      \
  {                                                                            \
    return static_cast<_class*>(static_cast<_base_class*>(                     \
      NS_CYCLE_COLLECTION_CLASSNAME(_base_class)::Downcast(s)));               \
  }
#define NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_NO_UNLINK (   _class,
  _base_class 
)
#define NS_DECL_CYCLE_COLLECTION_CLASS_NO_UNLINK (   _class  ) 
Value:
class NS_CYCLE_COLLECTION_INNERCLASS                                           \
 : public nsXPCOMCycleCollectionParticipant                                    \
{                                                                              \
  NS_DECL_CYCLE_COLLECTION_CLASS_BODY_NO_UNLINK(_class, _class)                \
  NS_IMETHOD RootAndUnlinkJSObjects(void *p)                                   \
  {                                                                            \
    return NS_OK;                                                              \
  }                                                                            \
  NS_IMETHOD Unlink(void *p)                                                   \
  {                                                                            \
    return NS_OK;                                                              \
  }                                                                            \
  NS_IMETHOD Unroot(void *p)                                                   \
  {                                                                            \
    return NS_OK;                                                              \
  }                                                                            \
};                                                                             \
NS_CYCLE_COLLECTION_PARTICIPANT_INSTANCE
#define NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS (   _class  ) 
#define NS_DECL_CYCLE_COLLECTION_NATIVE_CLASS_BODY
Value:
public:                                                                      \
    NS_IMETHOD RootAndUnlinkJSObjects(void *n);                                \
    NS_IMETHOD Unlink(void *n);                                                \
    NS_IMETHOD Unroot(void *n);                                                \
    NS_IMETHOD Traverse(void *n,                                               \
                      nsCycleCollectionTraversalCallback &cb);
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS (   _class  )     NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS(_class, _class)
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_AMBIGUOUS (   _class,
  _base 
)
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED (   _class,
  _base_class 
)
Value:
class NS_CYCLE_COLLECTION_INNERCLASS                                           \
 : public NS_CYCLE_COLLECTION_CLASSNAME(_base_class)                           \
{                                                                              \
public:                                                                        \
  NS_IMETHOD RootAndUnlinkJSObjects(void *p);                                  \
  NS_IMETHOD_(void) Trace(void *p, TraceCallback cb, void *closure);           \
  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED_BODY(_class, _base_class)           \
};                                                                             \
NS_CYCLE_COLLECTION_PARTICIPANT_INSTANCE
#define NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS (   _class  ) 
#define NS_DECL_CYCLE_COLLECTION_UNMARK_PURPLE_STUB (   _class  ) 
Value:
NS_IMETHODIMP_(void) UnmarkPurple()                                          \
  {                                                                            \
  }                                                                            \

This implements a stub UnmarkPurple function for classes that want to be traversed but whose AddRef/Release functions don't add/remove them to/from the purple buffer.

If you're just using NS_DECL_CYCLE_COLLECTING_ISUPPORTS then you don't need this.

#define NS_IMPL_CYCLE_COLLECTION_0 (   _class  ) 
#define NS_IMPL_CYCLE_COLLECTION_1 (   _class,
  _f 
)
#define NS_IMPL_CYCLE_COLLECTION_2 (   _class,
  _f1,
  _f2 
)
#define NS_IMPL_CYCLE_COLLECTION_3 (   _class,
  _f1,
  _f2,
  _f3 
)
#define NS_IMPL_CYCLE_COLLECTION_4 (   _class,
  _f1,
  _f2,
  _f3,
  _f4 
)
#define NS_IMPL_CYCLE_COLLECTION_5 (   _class,
  _f1,
  _f2,
  _f3,
  _f4,
  _f5 
)
#define NS_IMPL_CYCLE_COLLECTION_6 (   _class,
  _f1,
  _f2,
  _f3,
  _f4,
  _f5,
  _f6 
)
#define NS_IMPL_CYCLE_COLLECTION_7 (   _class,
  _f1,
  _f2,
  _f3,
  _f4,
  _f5,
  _f6,
  _f7 
)
#define NS_IMPL_CYCLE_COLLECTION_8 (   _class,
  _f1,
  _f2,
  _f3,
  _f4,
  _f5,
  _f6,
  _f7,
  _f8 
)
#define NS_IMPL_CYCLE_COLLECTION_CLASS (   _class  )     NS_CYCLE_COLLECTION_CLASSNAME(_class) NS_CYCLE_COLLECTION_NAME(_class);
#define NS_IMPL_CYCLE_COLLECTION_DESCRIBE (   _class,
  _refcnt 
)    cb.DescribeNode(RefCounted, _refcnt, sizeof(_class), #_class);
#define NS_IMPL_CYCLE_COLLECTION_ROOT_BEGIN (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::RootAndUnlinkJSObjects(void *p)       \
  {                                                                            \
    nsISupports *s = static_cast<nsISupports*>(p);                             \
    NS_ASSERTION(CheckForRightISupports(s),                                    \
                 "not the nsISupports pointer we expect");                     \
    nsXPCOMCycleCollectionParticipant::RootAndUnlinkJSObjects(s);              \
    _class *tmp = Downcast(s);
#define NS_IMPL_CYCLE_COLLECTION_ROOT_BEGIN_NATIVE (   _class,
  _root_function 
)
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::RootAndUnlinkJSObjects(void *p)       \
  {                                                                            \
    _class *tmp = static_cast<_class*>(p);                                     \
    tmp->_root_function();
#define NS_IMPL_CYCLE_COLLECTION_ROOT_END
Value:
return NS_OK;                                                              \
  }
#define NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE (   _class,
  _root_function 
)
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::RootAndUnlinkJSObjects(void *p)       \
  {                                                                            \
    _class *tmp = static_cast<_class*>(p);                                     \
    tmp->_root_function();                                                     \
    return NS_OK;                                                              \
  }
#define NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN (   _class  ) 
Value:
void                                                                         \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Trace(void *p,                        \
                                               TraceCallback aCallback,        \
                                               void *aClosure)                 \
  {                                                                            \
    nsISupports *s = static_cast<nsISupports*>(p);                             \
    NS_ASSERTION(CheckForRightISupports(s),                                    \
                 "not the nsISupports pointer we expect");                     \
    _class *tmp = Downcast(s);
#define NS_IMPL_CYCLE_COLLECTION_TRACE_CALLBACK (   _langID,
  _object 
)
Value:
if (_object)                                                                 \
    aCallback(_langID, _object, aClosure);
#define NS_IMPL_CYCLE_COLLECTION_TRACE_END
Value:
(void)tmp;                                                               \
  }
#define NS_IMPL_CYCLE_COLLECTION_TRACE_JS_CALLBACK (   _object  ) 
#define NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK (   _field  )     NS_IMPL_CYCLE_COLLECTION_TRACE_JS_CALLBACK(tmp->_field)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_MEMBER_CALLBACK (   _langID,
  _field 
)    NS_IMPL_CYCLE_COLLECTION_TRACE_CALLBACK(_langID, tmp->_field)
#define NS_IMPL_CYCLE_COLLECTION_TRACE_NATIVE_BEGIN (   _class  ) 
Value:
void                                                                         \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Trace(void *p,                        \
                                               TraceCallback aCallback,        \
                                               void *aClosure)                 \
  {                                                                            \
    _class *tmp = static_cast<_class*>(p);
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN (   _class  ) 
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED (   _class,
  _base_class 
)
Value:
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(_class)                     \
    if (NS_CYCLE_COLLECTION_CLASSNAME(_base_class)::Traverse(s, cb) ==         \
        NS_SUCCESS_INTERRUPTED_TRAVERSE) {                                     \
      return NS_SUCCESS_INTERRUPTED_TRAVERSE;                                  \
    }
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Traverse                              \
                         (void *p,                                             \
                          nsCycleCollectionTraversalCallback &cb)              \
  {                                                                            \
    nsISupports *s = static_cast<nsISupports*>(p);                             \
    NS_ASSERTION(CheckForRightISupports(s),                                    \
                 "not the nsISupports pointer we expect");                     \
    _class *tmp = static_cast<_class*>(Downcast(s));
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
Value:
return NS_OK;                                                              \
  }
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_BEGIN (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Traverse                              \
                         (void *p,                                             \
                          nsCycleCollectionTraversalCallback &cb)              \
  {                                                                            \
    _class *tmp = static_cast<_class*>(p);                                     \
    NS_IMPL_CYCLE_COLLECTION_DESCRIBE(_class, tmp->mRefCnt.get())
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_MEMBER (   _field,
  _field_class 
)
Value:
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_PTR(tmp->_field, _field_class,      \
                                               #_field)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_PTR (   _ptr,
  _ptr_class,
  _name 
)
Value:
PR_BEGIN_MACRO                                                               \
    NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, _name);                             \
    cb.NoteNativeChild(_ptr, &NS_CYCLE_COLLECTION_NAME(_ptr_class));           \
  PR_END_MACRO;
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMARRAY (   _field  ) 
Value:
{                                                                          \
      PRInt32 i;                                                               \
      for (i = 0; i < tmp->_field.Count(); ++i) {                              \
        NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, #_field "[i]");                 \
        cb.NoteXPCOMChild(tmp->_field[i]);                                     \
      }                                                                        \
    }
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR (   _field  ) 
Value:
PR_BEGIN_MACRO                                                               \
    NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, #_field);                           \
    cb.NoteXPCOMChild(tmp->_field.get());                                      \
  PR_END_MACRO;
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR_AMBIGUOUS (   _field,
  _base 
)
Value:
PR_BEGIN_MACRO                                                               \
    NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, #_field);                           \
    cb.NoteXPCOMChild(NS_ISUPPORTS_CAST(_base*, tmp->_field));                 \
  PR_END_MACRO;
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY (   _array,
  _element_class,
  _name 
)
Value:
{                                                                          \
      PRUint32 i, length = (_array).Length();                                  \
      for (i = 0; i < length; ++i)                                             \
        NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NATIVE_PTR((_array)[i],              \
                                                     _element_class,           \
                                                     _name "[i]");             \
    }
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY_MEMBER (   _field,
  _element_class 
)
Value:
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSTARRAY(tmp->_field, _element_class,    \
                                               #_field)
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_RAWPTR (   _field  ) 
Value:
PR_BEGIN_MACRO                                                               \
    NS_CYCLE_COLLECTION_NOTE_EDGE_NAME(cb, #_field);                           \
    cb.NoteXPCOMChild(tmp->_field);                                            \
  PR_END_MACRO;
#define NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS   TraverseScriptObjects(tmp, cb);
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_0 (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Unlink(void *p)                       \
  {                                                                            \
    NS_ASSERTION(CheckForRightISupports(static_cast<nsISupports*>(p)),         \
                 "not the nsISupports pointer we expect");                     \
    return NS_OK;                                                              \
  }
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Unlink(void *p)                       \
  {                                                                            \
    nsISupports *s = static_cast<nsISupports*>(p);                             \
    NS_ASSERTION(CheckForRightISupports(s),                                    \
                 "not the nsISupports pointer we expect");                     \
    _class *tmp = Downcast(s);
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED (   _class,
  _base_class 
)
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Unlink(void *p)                       \
  {                                                                            \
    nsISupports *s = static_cast<nsISupports*>(p);                             \
    NS_ASSERTION(CheckForRightISupports(s),                                    \
                 "not the nsISupports pointer we expect");                     \
    _class *tmp = static_cast<_class*>(Downcast(s));                           \
    NS_CYCLE_COLLECTION_CLASSNAME(_base_class)::Unlink(s);
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_NATIVE (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Unlink(void *p)                       \
  {                                                                            \
    _class *tmp = static_cast<_class*>(p);
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_END
Value:
return NS_OK;                                                              \
  }
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NATIVE_0 (   _class  ) 
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Unlink(void *p)                       \
  {                                                                            \
    return NS_OK;                                                              \
  }
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMARRAY (   _field  )     tmp->_field.Clear();
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR (   _field  )     tmp->_field = NULL;
#define NS_IMPL_CYCLE_COLLECTION_UNLINK_NSTARRAY (   _field  )     tmp->_field.Clear();
#define NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE (   _class,
  _unroot_function 
)
Value:
NS_IMETHODIMP                                                                \
  NS_CYCLE_COLLECTION_CLASSNAME(_class)::Unroot(void *p)                       \
  {                                                                            \
    _class *tmp = static_cast<_class*>(p);                                     \
    tmp->_unroot_function();                                                   \
    return NS_OK;                                                              \
  }
#define NS_IMPL_QUERY_CYCLE_COLLECTION (   _class  ) 
Value:
if ( aIID.Equals(NS_GET_IID(nsXPCOMCycleCollectionParticipant)) ) {          \
    *aInstancePtr = & NS_CYCLE_COLLECTION_NAME(_class);                        \
    return NS_OK;                                                              \
  } else
#define NS_IMPL_QUERY_CYCLE_COLLECTION_ISUPPORTS (   _class  ) 
Value:
if ( aIID.Equals(NS_GET_IID(nsCycleCollectionISupports)) ) {                 \
    *aInstancePtr = NS_CYCLE_COLLECTION_CLASSNAME(_class)::Upcast(this);       \
    return NS_OK;                                                              \
  } else
#define NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION (   _class  ) 
Value:
NS_INTERFACE_MAP_BEGIN(_class)                                               \
    NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED (   _class  ) 
Value:
NS_INTERFACE_MAP_BEGIN(_class)                                               \
    NS_INTERFACE_MAP_ENTRY_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION (   _class  ) 
#define NS_INTERFACE_MAP_ENTRY_CYCLE_COLLECTION (   _class  )     NS_IMPL_QUERY_CYCLE_COLLECTION(_class)
#define NS_INTERFACE_MAP_ENTRY_CYCLE_COLLECTION_ISUPPORTS (   _class  )     NS_IMPL_QUERY_CYCLE_COLLECTION_ISUPPORTS(_class)
#define NS_INTERFACE_TABLE_HEAD_CYCLE_COLLECTION_INHERITED (   _class  ) 
Value:
NS_IMETHODIMP _class::QueryInterface(REFNSIID aIID, void** aInstancePtr)    \
  {                                                                           \
    NS_PRECONDITION(aInstancePtr, "null out param");                          \
                                                                              \
    if ( aIID.Equals(NS_GET_IID(nsXPCOMCycleCollectionParticipant)) ) {       \
      *aInstancePtr = &NS_CYCLE_COLLECTION_NAME(_class);                      \
      return NS_OK;                                                           \
    }                                                                         \
    nsresult rv;
#define NS_INTERFACE_TABLE_TO_MAP_SEGUE_CYCLE_COLLECTION (   _class  ) 
Value:
if (rv == NS_OK) return rv; \
  nsISupports* foundInterface; \
  NS_INTERFACE_MAP_ENTRIES_CYCLE_COLLECTION(_class)
#define NS_SUCCESS_INTERRUPTED_TRAVERSE   NS_ERROR_GENERATE_SUCCESS(NS_ERROR_MODULE_XPCOM, 2)

Enumeration Type Documentation

enum CCNodeType
Enumerator:
RefCounted 
GCMarked 
GCUnmarked 

Function Documentation

NS_DEFINE_STATIC_IID_ACCESSOR ( nsCycleCollectionISupports   ) 
NS_DEFINE_STATIC_IID_ACCESSOR ( nsCycleCollectionParticipant   ) 

Variable Documentation

void void* closure
void* p