Loading...
Searching...
No Matches
SdfListOp< T > Class Template Reference

SdfListOp is a value type representing an operation that edits a list. More...

#include <listOp.h>

Public Types

typedef T ItemType
 
typedef std::vector< ItemType > ItemVector
 
typedef ItemType value_type
 
typedef ItemVector value_vector_type
 
typedef std::function< std::optional< ItemType >(SdfListOpType, const ItemType &) > ApplyCallback
 Callback type for ApplyOperations.
 
typedef std::function< std::optional< ItemType >(const ItemType &) > ModifyCallback
 Callback type for ModifyOperations.
 

Public Member Functions

SDF_API SdfListOp ()
 Create an empty ListOp in non-explicit mode.
 
SDF_API void Swap (SdfListOp< T > &rhs)
 
bool HasKeys () const
 Returns true if the editor has an explicit list (even if it's empty) or it has any added, prepended, appended, deleted, or ordered keys.
 
SDF_API bool HasItem (const T &item) const
 Returns true if the given item is in any of the item lists.
 
bool IsExplicit () const
 Returns true if the list is explicit.
 
const ItemVector & GetExplicitItems () const
 Returns the explicit items.
 
const ItemVector & GetPrependedItems () const
 Returns the explicit items.
 
const ItemVector & GetAppendedItems () const
 Returns the explicit items.
 
const ItemVector & GetDeletedItems () const
 Returns the deleted items.
 
SDF_API const ItemVector & GetItems (SdfListOpType type) const
 Return the item vector identified by type.
 
SDF_API ItemVector GetAppliedItems () const
 Returns the effective list of items represented by the operations in this list op.
 
SDF_API bool SetExplicitItems (const ItemVector &items, std::string *errMsg=nullptr)
 Sets the explicit items.
 
SDF_API bool SetPrependedItems (const ItemVector &items, std::string *errMsg=nullptr)
 Sets the prepended items.
 
SDF_API bool SetAppendedItems (const ItemVector &items, std::string *errMsg=nullptr)
 Sets the appended items.
 
SDF_API bool SetDeletedItems (const ItemVector &items, std::string *errMsg=nullptr)
 Sets the deleted items.
 
SDF_API bool SetItems (const ItemVector &items, SdfListOpType type, std::string *errMsg=nullptr)
 Sets the item vector for the given operation type.
 
SDF_API void Clear ()
 Removes all items and changes the list to be non-explicit.
 
SDF_API void ClearAndMakeExplicit ()
 Removes all items and changes the list to be explicit.
 
SDF_API void ApplyOperations (ItemVector *vec, const ApplyCallback &cb=ApplyCallback()) const
 Applies edit operations to the given ItemVector.
 
SDF_API std::optional< SdfListOp< T > > ApplyOperations (const SdfListOp< T > &inner) const
 Applies edit operations to the given ListOp.
 
SDF_API bool ModifyOperations (const ModifyCallback &callback)
 Modifies operations specified in this object.
 
SDF_API bool ModifyOperations (const ModifyCallback &callback, bool unusedRemoveDuplicates)
 
SDF_API bool ReplaceOperations (const SdfListOpType op, size_t index, size_t n, const ItemVector &newItems)
 Replaces the items in the specified operation vector in the range (index, index + n] with the given newItems.
 
SDF_API void ComposeOperations (const SdfListOp< T > &stronger, SdfListOpType op)
 Composes a stronger SdfListOp's opinions for a given operation list over this one.
 
const ItemVector & GetAddedItems () const
 
const ItemVector & GetOrderedItems () const
 
SDF_API void SetAddedItems (const ItemVector &items)
 
SDF_API void SetOrderedItems (const ItemVector &items)
 
bool operator== (const SdfListOp< T > &rhs) const
 
bool operator!= (const SdfListOp< T > &rhs) const
 

Static Public Member Functions

static SDF_API SdfListOp CreateExplicit (const ItemVector &explicitItems=ItemVector())
 Create a ListOp in explicit mode with the given explicitItems.
 
static SDF_API SdfListOp Create (const ItemVector &prependedItems=ItemVector(), const ItemVector &appendedItems=ItemVector(), const ItemVector &deletedItems=ItemVector())
 Create a ListOp in non-explicit mode with the given prependedItems, appendedItems, and deletedItems.
 

Friends

size_t hash_value (const SdfListOp &op)
 
template<class ItemType >
void SdfApplyListOrdering (std::vector< ItemType > *v, const std::vector< ItemType > &order)
 

Detailed Description

template<typename T>
class SdfListOp< T >

SdfListOp is a value type representing an operation that edits a list.

It may append or prepend items, delete them, or replace the list entirely.

SdfListOp maintains lists of items to be prepended, appended, deleted, or used explicitly. If used in explicit mode, the ApplyOperations method replaces the given list with the set explicit items. Otherwise, the ApplyOperations method is used to apply the list-editing options in the input list in the following order:

  • Delete
  • Prepend
  • Append

Lists are meant to contain unique values, and all list operations will remove duplicates if encountered. Prepending items and using explicit mode will preserve the position of the first of the duplicates to be encountered, while appending items will preserve the last.

Definition at line 69 of file listOp.h.

Member Typedef Documentation

◆ ApplyCallback

typedef std::function< std::optional<ItemType>(SdfListOpType, const ItemType&) > ApplyCallback

Callback type for ApplyOperations.

Definition at line 195 of file listOp.h.

◆ ItemType

typedef T ItemType

Definition at line 71 of file listOp.h.

◆ ItemVector

typedef std::vector<ItemType> ItemVector

Definition at line 72 of file listOp.h.

◆ ModifyCallback

typedef std::function< std::optional<ItemType>(const ItemType&) > ModifyCallback

Callback type for ModifyOperations.

Definition at line 223 of file listOp.h.

◆ value_type

typedef ItemType value_type

Definition at line 73 of file listOp.h.

◆ value_vector_type

typedef ItemVector value_vector_type

Definition at line 74 of file listOp.h.

Constructor & Destructor Documentation

◆ SdfListOp()

SDF_API SdfListOp ( )

Create an empty ListOp in non-explicit mode.

Member Function Documentation

◆ ApplyOperations() [1/2]

SDF_API std::optional< SdfListOp< T > > ApplyOperations ( const SdfListOp< T > &  inner) const

Applies edit operations to the given ListOp.

The result is a ListOp that, when applied to a list, has the same effect as applying inner and then this in sequence.

The result will be empty if the result is not well defined. The result is well-defined when inner and this do not use the 'ordered' or 'added' item lists. In other words, only the explicit, prepended, appended, and deleted portions of SdfListOp are closed under composition with ApplyOperations().

◆ ApplyOperations() [2/2]

SDF_API void ApplyOperations ( ItemVector *  vec,
const ApplyCallback cb = ApplyCallback() 
) const

Applies edit operations to the given ItemVector.

If supplied, cb will be called on each item in the operation vectors before they are applied to vec. Consumers can use this to transform the items stored in the operation vectors to match what's stored in vec.

◆ Clear()

SDF_API void Clear ( )

Removes all items and changes the list to be non-explicit.

◆ ClearAndMakeExplicit()

SDF_API void ClearAndMakeExplicit ( )

Removes all items and changes the list to be explicit.

◆ ComposeOperations()

SDF_API void ComposeOperations ( const SdfListOp< T > &  stronger,
SdfListOpType  op 
)

Composes a stronger SdfListOp's opinions for a given operation list over this one.

◆ Create()

static SDF_API SdfListOp Create ( const ItemVector &  prependedItems = ItemVector(),
const ItemVector &  appendedItems = ItemVector(),
const ItemVector &  deletedItems = ItemVector() 
)
static

Create a ListOp in non-explicit mode with the given prependedItems, appendedItems, and deletedItems.

◆ CreateExplicit()

static SDF_API SdfListOp CreateExplicit ( const ItemVector &  explicitItems = ItemVector())
static

Create a ListOp in explicit mode with the given explicitItems.

◆ GetAddedItems()

const ItemVector & GetAddedItems ( ) const
inline
Deprecated:
The add and reorder operations have been deprecated in favor of the append and prepend operations.

Definition at line 258 of file listOp.h.

◆ GetAppendedItems()

const ItemVector & GetAppendedItems ( ) const
inline

Returns the explicit items.

Definition at line 133 of file listOp.h.

◆ GetAppliedItems()

SDF_API ItemVector GetAppliedItems ( ) const

Returns the effective list of items represented by the operations in this list op.

This function should be used to determine the final list of items added instead of looking at the individual explicit, prepended, and appended item lists.

This is equivalent to calling ApplyOperations on an empty item vector.

◆ GetDeletedItems()

const ItemVector & GetDeletedItems ( ) const
inline

Returns the deleted items.

Definition at line 139 of file listOp.h.

◆ GetExplicitItems()

const ItemVector & GetExplicitItems ( ) const
inline

Returns the explicit items.

Definition at line 121 of file listOp.h.

◆ GetItems()

SDF_API const ItemVector & GetItems ( SdfListOpType  type) const

Return the item vector identified by type.

◆ GetOrderedItems()

const ItemVector & GetOrderedItems ( ) const
inline
Deprecated:
The add and reorder operations have been deprecated in favor of the append and prepend operations.

Definition at line 265 of file listOp.h.

◆ GetPrependedItems()

const ItemVector & GetPrependedItems ( ) const
inline

Returns the explicit items.

Definition at line 127 of file listOp.h.

◆ HasItem()

SDF_API bool HasItem ( const T &  item) const

Returns true if the given item is in any of the item lists.

◆ HasKeys()

bool HasKeys ( ) const
inline

Returns true if the editor has an explicit list (even if it's empty) or it has any added, prepended, appended, deleted, or ordered keys.

Definition at line 97 of file listOp.h.

◆ IsExplicit()

bool IsExplicit ( ) const
inline

Returns true if the list is explicit.

Definition at line 115 of file listOp.h.

◆ ModifyOperations() [1/2]

SDF_API bool ModifyOperations ( const ModifyCallback callback)

Modifies operations specified in this object.

callback is called for every item in all operation vectors. If the returned key is empty then the key is removed, otherwise it's replaced with the returned key.

If callback returns a key that was previously returned for the current operation vector being processed, the returned key will be removed.

Returns true if a change was made, false otherwise.

◆ ModifyOperations() [2/2]

SDF_API bool ModifyOperations ( const ModifyCallback callback,
bool  unusedRemoveDuplicates 
)

◆ operator!=()

bool operator!= ( const SdfListOp< T > &  rhs) const
inline

Definition at line 299 of file listOp.h.

◆ operator==()

bool operator== ( const SdfListOp< T > &  rhs) const
inline

Definition at line 289 of file listOp.h.

◆ ReplaceOperations()

SDF_API bool ReplaceOperations ( const SdfListOpType  op,
size_t  index,
size_t  n,
const ItemVector &  newItems 
)

Replaces the items in the specified operation vector in the range (index, index + n] with the given newItems.

If newItems is empty the items in the range will simply be removed.

◆ SetAddedItems()

SDF_API void SetAddedItems ( const ItemVector &  items)
Deprecated:
The add and reorder operations have been deprecated in favor of the append and prepend operations.

◆ SetAppendedItems()

SDF_API bool SetAppendedItems ( const ItemVector &  items,
std::string *  errMsg = nullptr 
)

Sets the appended items.

If duplicates are present in items, preserves the last occurence. Returns true if no duplicates were present, false otherwise. If duplicates were present, errMsg is set to indicate which item was duplicated.

◆ SetDeletedItems()

SDF_API bool SetDeletedItems ( const ItemVector &  items,
std::string *  errMsg = nullptr 
)

Sets the deleted items.

If duplicates are present in items, preserves the first occurence. Returns true if no duplicates were present, false otherwise. If duplicates were present, errMsg is set to indicate which item was duplicated.

◆ SetExplicitItems()

SDF_API bool SetExplicitItems ( const ItemVector &  items,
std::string *  errMsg = nullptr 
)

Sets the explicit items.

If duplicates are present in items, preserves the first occurence. Returns true if no duplicates were present, false otherwise. If duplicates were present, errMsg is set to indicate which item was duplicated.

◆ SetItems()

SDF_API bool SetItems ( const ItemVector &  items,
SdfListOpType  type,
std::string *  errMsg = nullptr 
)

Sets the item vector for the given operation type.

Removes duplicates in items if present. Returns true if no duplicates were present, false otherwise. If duplicates were present, errMsg is set to indicate which item was duplicated.

◆ SetOrderedItems()

SDF_API void SetOrderedItems ( const ItemVector &  items)
Deprecated:
The add and reorder operations have been deprecated in favor of the append and prepend operations.

◆ SetPrependedItems()

SDF_API bool SetPrependedItems ( const ItemVector &  items,
std::string *  errMsg = nullptr 
)

Sets the prepended items.

If duplicates are present in items, preserves the first occurence. Returns true if no duplicates were present, false otherwise. If duplicates were present, errMsg is set to indicate which item was duplicated.

Friends And Related Function Documentation

◆ hash_value

size_t hash_value ( const SdfListOp< T > &  op)
friend

Definition at line 277 of file listOp.h.


The documentation for this class was generated from the following file: