зеркало из https://github.com/mozilla/gecko-dev.git
115 строки
4.0 KiB
ReStructuredText
115 строки
4.0 KiB
ReStructuredText
XPCOM Collections
|
|
=================
|
|
|
|
``nsTArray`` and ``AutoTArray``
|
|
-------------------------------
|
|
|
|
``nsTArray<T>`` is a typesafe array for holding various objects, similar to ``std::vector<T>``. (note that
|
|
``nsTArray<T>`` is dynamically-sized, unlike ``std::array<T>``) Here's an
|
|
incomplete list of mappings between the two:
|
|
|
|
================== ==================================================
|
|
std::vector<T> nsTArray<T>
|
|
================== ==================================================
|
|
``size()`` ``Length()``
|
|
``empty()`` ``IsEmpty()``
|
|
``resize()`` ``SetLength()`` or ``SetLengthAndRetainStorage()``
|
|
``capacity()`` ``Capacity()``
|
|
``reserve()`` ``SetCapacity()``
|
|
``push_back()`` ``AppendElement()``
|
|
``insert()`` ``AppendElements()``
|
|
``emplace_back()`` ``EmplaceBack()``
|
|
``clear()`` ``Clear()`` or ``ClearAndRetainStorage()``
|
|
``data()`` ``Elements()``
|
|
``at()`` ``ElementAt()``
|
|
``back()`` ``LastElement()``
|
|
================== ==================================================
|
|
|
|
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 interchangeably 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
|