mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-26 20:30:41 +00:00

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
96 lines
3.2 KiB
ReStructuredText
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
|