gecko-dev/xpcom/docs/collections.rst
Nika Layzell 87810a2b88 Bug 1702245 - Expand XPCOM's in-tree documentation, r=xpcom-reviewers,kmag
This change involved migrating a number of pages, including the DMD
documentation, XPIDL documentation, and the Internal String Guide to
Firefox Source Docs, as well as performing a review/update to these
documents to be more accurate and current.

In addition, some additional sections were written in the various
documents to elaborate on important features which were not present when
the documents were originally written, and a few new documents were
written to add basic documentaiton for other XPCOM components.

The following MDN pages were migrated in this patch:

https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPIDL
https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Guide/Internal_strings
https://developer.mozilla.org/en-US/docs/Mozilla/Performance/DMD

Differential Revision: https://phabricator.services.mozilla.com/D110424
2021-04-05 15:56:18 +00:00

96 lines
3.2 KiB
ReStructuredText

XPCOM Collections
=================
``nsTArray`` and ``AutoTArray``
-------------------------------
``nsTArray<T>`` is a typesafe array for holding various objects.
Rust Bindings
~~~~~~~~~~~~~
When the ``thin_vec`` crate is built in Gecko, ``thin_vec::ThinVec<T>`` is
guaranteed to have the same memory layout and allocation strategy as
``nsTArray``, meaning that the two types may be used interchangably across
FFI boundaries. The type is **not** safe to pass by-value over FFI
boundaries, due to Rust and C++ differing in when they run destructors.
The element type ``T`` must be memory-compatible with both Rust and C++ code
to use over FFI.
``nsTHashMap`` and ``nsTHashSet``
---------------------------------
These types are the recommended interface for writing new XPCOM hashmaps and
hashsets in XPCOM code.
Supported Hash Keys
~~~~~~~~~~~~~~~~~~~
The following types are supported as the key parameter to ``nsTHashMap`` and
``nsTHashSet``.
========================== ======================
Type Hash Key
========================== ======================
``T*`` ``nsPtrHashKey<T>``
``T*`` ``nsPtrHashKey<T>``
``nsCString`` ``nsCStringHashKey``
``nsString`` ``nsStringHashKey``
``uint32_t`` ``nsUint32HashKey``
``uint64_t`` ``nsUint64HashKey``
``intptr_t`` ``IntPtrHashKey``
``nsCOMPtr<nsISupports>`` ``nsISupportsHashKey``
``RefPtr<T>`` ``nsRefPtrHashKey<T>``
``nsID`` ``nsIDHashKey``
========================== ======================
Any key not in this list must inherit from the ``PLDHashEntryHdr`` class to
implement manual hashing behaviour.
Class Reference
~~~~~~~~~~~~~~~
.. note::
The ``nsTHashMap`` and ``nsTHashSet`` types are not declared exactly like
this in code. This is intended largely as a practical reference.
.. cpp:class:: template<K, V> nsTHashMap<K, V>
The ``nsTHashMap<K, V>`` class is currently defined as a thin type alias
around ``nsBaseHashtable``. See the methods defined on that class for
more detailed documentation.
https://searchfox.org/mozilla-central/source/xpcom/ds/nsBaseHashtable.h
.. cpp:function:: uint32_t Count() const
.. cpp:function:: bool IsEmpty() const
.. cpp:function:: bool Get(KeyType aKey, V* aData) const
Get the value, returning a flag indicating the presence of the entry
in the table.
.. cpp:function:: V Get(KeyType aKey) const
Get the value, returning a default-initialized object if the entry is
not present in the table.
.. cpp:function:: Maybe<V> MaybeGet(KeyType aKey) const
Get the value, returning Nothing if the entry is not present in the table.
.. cpp:function:: V& LookupOrInsert(KeyType aKey, Args&&... aArgs) const
.. cpp:function:: V& LookupOrInsertWith(KeyType aKey, F&& aFunc) const
.. cpp:class:: template<K> nsTHashSet<K>
The ``nsTHashSet<K>`` class is currently defined as a thin type alias
around ``nsTBaseHashSet``. See the methods defined on that class for
more detailed documentation.
https://searchfox.org/mozilla-central/source/xpcom/ds/nsTHashSet.h