Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines
nsMemory.h File Reference
#include "nsXPCOM.h"
#include "nsIMemory.h"

Go to the source code of this file.

Classes

class  nsMemory
 Static helper routines to manage memory. More...

Defines

#define NS_MEMORY_CONTRACTID   "@mozilla.org/xpcom/memory-service;1"
#define NS_MEMORY_CLASSNAME   "Global Memory Service"
#define NS_MEMORY_CID
#define NS_FREE_XPCOM_POINTER_ARRAY(size, array, freeFunc)
 Macro to free all elements of an XPCOM array of a given size using freeFunc, then frees the array itself using nsMemory::Free().
#define NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(size, array)   NS_FREE_XPCOM_POINTER_ARRAY((size), (array), NS_Free)
 Macro to free arrays of non-refcounted objects allocated by the shared allocator (nsMemory) such as strings and wstrings.
#define NS_FREE_XPCOM_ISUPPORTS_POINTER_ARRAY(size, array)   NS_FREE_XPCOM_POINTER_ARRAY((size), (array), NS_IF_RELEASE)
 Macro to free an array of pointers to nsISupports (or classes derived from it).
#define NS_ARRAY_LENGTH(array_)   (sizeof(array_)/sizeof(array_[0]))
 Helpful array length function for calculating the length of a statically declared array.

Define Documentation

#define NS_ARRAY_LENGTH (   array_)    (sizeof(array_)/sizeof(array_[0]))

Helpful array length function for calculating the length of a statically declared array.

Definition at line 156 of file nsMemory.h.

Macro to free arrays of non-refcounted objects allocated by the shared allocator (nsMemory) such as strings and wstrings.

A convenience wrapper around NS_FREE_XPCOM_POINTER_ARRAY.

Parameters:
sizeNumber of elements in the array. If not a constant, this should be a PRInt32. Note that this means this macro will not work if size >= 2^31.
arrayThe array to be freed.

Definition at line 130 of file nsMemory.h.

Macro to free an array of pointers to nsISupports (or classes derived from it).

A convenience wrapper around NS_FREE_XPCOM_POINTER_ARRAY.

Note that if you know that none of your nsISupports pointers are going to be 0, you can gain a bit of speed by calling NS_FREE_XPCOM_POINTER_ARRAY directly and using NS_RELEASE as your free function.

Parameters:
sizeNumber of elements in the array. If not a constant, this should be a PRInt32. Note that this means this macro will not work if size >= 2^31.
arrayThe array to be freed.

Definition at line 148 of file nsMemory.h.

#define NS_FREE_XPCOM_POINTER_ARRAY (   size,
  array,
  freeFunc 
)
Value:
PR_BEGIN_MACRO                                                            \
        PRInt32 iter_ = PRInt32(size);                                        \
        while (--iter_ >= 0)                                                  \
            freeFunc((array)[iter_]);                                         \
        NS_Free((array));                                                     \
    PR_END_MACRO

Macro to free all elements of an XPCOM array of a given size using freeFunc, then frees the array itself using nsMemory::Free().

Note that this macro (and its wrappers) can be used to deallocate a partially- or completely-built array while unwinding an error condition inside the XPCOM routine that was going to return the array. For this to work on a partially-built array, your code needs to be building the array from index 0 upwards, and simply pass the number of elements that have already been built (and thus need to be freed) as |size|.

Thanks to alecf.nosp@m.@net.nosp@m.scape.nosp@m..com for suggesting this form, which allows the macro to be used with NS_RELEASE / NS_RELEASE_IF in addition to nsMemory::Free.

Parameters:
sizeNumber of elements in the array. If not a constant, this should be a PRInt32. Note that this means this macro will not work if size >= 2^31.
arrayThe array to be freed.
freeFuncThe function or macro to be used to free it. For arrays of nsISupports (or any class derived from it), NS_IF_RELEASE (or NS_RELEASE) should be passed as freeFunc. For most (all?) other pointer types (including XPCOM strings and wstrings), nsMemory::Free should be used, since the shared-allocator (nsMemory) is what will have been used to allocate the memory.

Definition at line 110 of file nsMemory.h.

Value:
{ /* 30a04e40-38e7-11d4-8cf5-0060b0fc14a3 */         \
    0x30a04e40,                                      \
    0x38e7,                                          \
    0x11d4,                                          \
    {0x8c, 0xf5, 0x00, 0x60, 0xb0, 0xfc, 0x14, 0xa3} \
}

Definition at line 46 of file nsMemory.h.

#define NS_MEMORY_CLASSNAME   "Global Memory Service"

Definition at line 45 of file nsMemory.h.

#define NS_MEMORY_CONTRACTID   "@mozilla.org/xpcom/memory-service;1"

Definition at line 44 of file nsMemory.h.