|
libultraship
Reimplementations of libultra (N64 SDK) functions for modern hardware
|
A thread-safe ordered list of Parts. More...
#include <PartList.h>
Public Member Functions | |
| PartList (const size_t initialAllocation=0) | |
| Constructs a PartList, optionally pre-allocating storage. | |
| virtual | ~PartList ()=default |
| bool | Has (std::shared_ptr< C > part) const |
| Checks whether a specific Part is in the list. | |
| template<typename T > | |
| bool | Has () const |
| Checks whether any Part of type T is in the list. | |
| bool | Has (const uint64_t id) const |
| Checks whether a Part with the given ID is in the list. | |
| bool | Has () const |
| Checks whether the list contains any Parts at all. | |
| size_t | GetCount () const |
| Returns the number of currently live Parts in the list. | |
| uint64_t | GetMutationVersion () const |
| Returns a monotonically increasing counter that increments on every add or remove. | |
| std::shared_ptr< C > | Get (const uint64_t id) const |
| Retrieves a Part by its unique ID. | |
| std::shared_ptr< std::vector< std::shared_ptr< C > > > | Get () const |
| Returns a snapshot (copy) of all currently live Parts in the list. | |
| template<typename T > | |
| std::shared_ptr< std::vector< std::shared_ptr< T > > > | Get () const |
| Returns all Parts that can be dynamic_cast to type T. | |
| std::shared_ptr< std::vector< std::shared_ptr< C > > > | Get (const std::vector< uint64_t > &ids) const |
| Returns all Parts whose IDs appear in the given vector. | |
| template<typename T > | |
| std::shared_ptr< T > | GetFirst () const |
| Returns the first Part that can be dynamic_cast to T. | |
| ListReturnCode | Add (std::shared_ptr< C > part, const bool force=false) |
| Adds a Part to the list if not already present. | |
| ListReturnCode | Add (const std::vector< std::shared_ptr< C > > &parts, const bool force=false) |
| Adds multiple Parts to the list. | |
| ListReturnCode | Remove (std::shared_ptr< C > part, const bool force=false) |
| Removes a specific Part from the list. | |
| ListReturnCode | Remove (const uint64_t id, const bool force=false) |
| Removes a Part by its unique ID. | |
| ListReturnCode | Remove (const bool force=false) |
| Removes all Parts from the list. | |
| ListReturnCode | Remove (const std::vector< std::shared_ptr< C > > &parts, const bool force=false) |
| Removes multiple Parts from the list. | |
| template<typename T > | |
| ListReturnCode | Remove (const bool force=false) |
| Removes all Parts that can be dynamic_cast to type T. | |
| ListReturnCode | Remove (const std::vector< uint64_t > &ids, const bool force=false) |
| Removes all Parts whose IDs appear in the given vector. | |
Public Member Functions inherited from Ship::Part | |
| Part () | |
| Constructs a Part and assigns it a unique ID. | |
| Part (std::shared_ptr< Context > context) | |
| Constructs a Part with an explicit Context reference and unique ID. | |
| virtual | ~Part ()=default |
| uint64_t | GetId () const |
| Returns the unique identifier for this Part. | |
| bool | operator== (const Part &other) const |
| Compares two Parts for equality by their unique IDs. | |
| std::shared_ptr< Context > | GetContext () const |
| Returns the Context this Part belongs to, or nullptr if unset. | |
| void | SetContext (std::shared_ptr< Context > ctx) |
| Sets the Context this Part belongs to. | |
Protected Member Functions | |
| template<typename P = StoredPtr> | |
| std::enable_if< std::is_same< P, std::shared_ptr< C > >::value, std::vector< P > & >::type | GetList () |
| Direct access to the underlying vector for strong-storage lists. | |
| template<typename P = StoredPtr> | |
| std::enable_if< std::is_same< P, std::shared_ptr< C > >::value, conststd::vector< P > & >::type | GetList () const |
| Direct const access to the underlying vector for strong-storage lists. | |
| std::recursive_mutex & | GetMutex () const |
| Returns the internal recursive mutex used to guard list access. | |
| virtual bool | CanAdd (std::shared_ptr< C > part) |
| Permission hook called before adding a Part. Override to deny. | |
| virtual bool | CanRemove (std::shared_ptr< C > part) |
| Permission hook called before removing a Part. Override to deny. | |
| virtual void | Added (std::shared_ptr< C > part, const bool forced) |
| Notification hook called after a Part has been added. | |
| virtual void | Removed (std::shared_ptr< C > part, const bool forced) |
| Notification hook called after a Part has been removed. | |
Protected Member Functions inherited from Ship::Part | |
| virtual void | OnAdded (bool forced) |
| Called after this Part has been added to a PartList. | |
| virtual void | OnRemoved (bool forced) |
| Called after this Part has been removed from a PartList. | |
A thread-safe ordered list of Parts.
Provides add, remove, and lookup operations for a collection of Part-derived objects. Storage pointer type is configurable (shared_ptr or weak_ptr), while the public API remains shared_ptr-based.
| C | The element type; must be derived from Part. |
| StoredPtr | The stored pointer type (shared_ptr<C> or weak_ptr<C>). |
|
explicit |
Constructs a PartList, optionally pre-allocating storage.
| initialAllocation | Number of elements to reserve up front. |
|
virtualdefault |
| ListReturnCode Ship::PartList< C, StoredPtr >::Add | ( | const std::vector< std::shared_ptr< C > > & | parts, |
| const bool | force = false |
||
| ) |
| ListReturnCode Ship::PartList< C, StoredPtr >::Add | ( | std::shared_ptr< C > | part, |
| const bool | force = false |
||
| ) |
|
protectedvirtual |
Notification hook called after a Part has been added.
| part | The Part that was added. |
| forced | Whether the addition bypassed permission checks. |
Reimplemented in Ship::BasicComponentList< StoredPtr >.
|
protectedvirtual |
Permission hook called before adding a Part. Override to deny.
Implementations must not perform cross-list add/remove operations. This hook may be called outside the target list's lock to avoid lock-order inversions between lists.
| part | The Part about to be added. |
|
protectedvirtual |
Permission hook called before removing a Part. Override to deny.
Implementations must not perform cross-list add/remove operations. This hook may be called outside the target list's lock to avoid lock-order inversions between lists.
| part | The Part about to be removed. |
| std::shared_ptr< std::vector< std::shared_ptr< C > > > Ship::PartList< C, StoredPtr >::Get | ( | ) | const |
Returns a snapshot (copy) of all currently live Parts in the list.
| std::shared_ptr< std::vector< std::shared_ptr< T > > > Ship::PartList< C, StoredPtr >::Get | ( | ) | const |
Returns all Parts that can be dynamic_cast to type T.
| T | The target derived type. |
| std::shared_ptr< std::vector< std::shared_ptr< C > > > Ship::PartList< C, StoredPtr >::Get | ( | const std::vector< uint64_t > & | ids | ) | const |
Returns all Parts whose IDs appear in the given vector.
| ids | The IDs to filter by. |
| std::shared_ptr< C > Ship::PartList< C, StoredPtr >::Get | ( | const uint64_t | id | ) | const |
| size_t Ship::PartList< C, StoredPtr >::GetCount | ( | ) | const |
Returns the number of currently live Parts in the list.
| std::shared_ptr< T > Ship::PartList< C, StoredPtr >::GetFirst | ( | ) | const |
|
protected |
Direct access to the underlying vector for strong-storage lists.
Available only when StoredPtr is std::shared_ptr<C>.
|
protected |
Direct const access to the underlying vector for strong-storage lists.
Available only when StoredPtr is std::shared_ptr<C>.
|
inline |
Returns a monotonically increasing counter that increments on every add or remove.
Callers can store this value and compare it on subsequent frames to detect whether the list has changed since they last inspected it.
|
protected |
Returns the internal recursive mutex used to guard list access.
| bool Ship::PartList< C, StoredPtr >::Has | ( | ) | const |
| bool Ship::PartList< C, StoredPtr >::Has | ( | ) | const |
Checks whether the list contains any Parts at all.
| bool Ship::PartList< C, StoredPtr >::Has | ( | const uint64_t | id | ) | const |
| bool Ship::PartList< C, StoredPtr >::Has | ( | std::shared_ptr< C > | part | ) | const |
| ListReturnCode Ship::PartList< C, StoredPtr >::Remove | ( | const bool | force = false | ) |
Removes all Parts from the list.
| force | If true, bypass the CanRemove() permission check for each Part. |
| ListReturnCode Ship::PartList< C, StoredPtr >::Remove | ( | const bool | force = false | ) |
Removes all Parts that can be dynamic_cast to type T.
| T | The derived type to match for removal. |
| force | If true, bypass the CanRemove() permission check. |
| ListReturnCode Ship::PartList< C, StoredPtr >::Remove | ( | const std::vector< std::shared_ptr< C > > & | parts, |
| const bool | force = false |
||
| ) |
Removes multiple Parts from the list.
| parts | The Parts to remove. |
| force | If true, bypass the CanRemove() permission check. |
| ListReturnCode Ship::PartList< C, StoredPtr >::Remove | ( | const std::vector< uint64_t > & | ids, |
| const bool | force = false |
||
| ) |
Removes all Parts whose IDs appear in the given vector.
| ids | The IDs to remove. |
| force | If true, bypass the CanRemove() permission check. |
| ListReturnCode Ship::PartList< C, StoredPtr >::Remove | ( | const uint64_t | id, |
| const bool | force = false |
||
| ) |
Removes a Part by its unique ID.
| id | The Part ID to remove. |
| force | If true, bypass the CanRemove() permission check. |
| ListReturnCode Ship::PartList< C, StoredPtr >::Remove | ( | std::shared_ptr< C > | part, |
| const bool | force = false |
||
| ) |
Removes a specific Part from the list.
| part | The Part to remove. |
| force | If true, bypass the CanRemove() permission check. |
|
protectedvirtual |
Notification hook called after a Part has been removed.
| part | The Part that was removed. |
| forced | Whether the removal bypassed permission checks. |
Reimplemented in Ship::BasicComponentList< StoredPtr >.