HDK
|
#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. More... | |
typedef std::function < std::optional< ItemType > const ItemType &) > | ModifyCallback |
Callback type for ModifyOperations. More... | |
Public Member Functions | |
SDF_API | SdfListOp () |
Create an empty ListOp in non-explicit mode. More... | |
SDF_API void | Swap (SdfListOp< T > &rhs) |
bool | HasKeys () const |
SDF_API bool | HasItem (const T &item) const |
Returns true if the given item is in any of the item lists. More... | |
bool | IsExplicit () const |
Returns true if the list is explicit. More... | |
const ItemVector & | GetExplicitItems () const |
Returns the explicit items. More... | |
const ItemVector & | GetPrependedItems () const |
Returns the explicit items. More... | |
const ItemVector & | GetAppendedItems () const |
Returns the explicit items. More... | |
const ItemVector & | GetDeletedItems () const |
Returns the deleted items. More... | |
SDF_API const ItemVector & | GetItems (SdfListOpType type) const |
Return the item vector identified by type . More... | |
SDF_API ItemVector | GetAppliedItems () const |
SDF_API bool | SetExplicitItems (const ItemVector &items, std::string *errMsg=nullptr) |
SDF_API bool | SetPrependedItems (const ItemVector &items, std::string *errMsg=nullptr) |
SDF_API bool | SetAppendedItems (const ItemVector &items, std::string *errMsg=nullptr) |
SDF_API bool | SetDeletedItems (const ItemVector &items, std::string *errMsg=nullptr) |
SDF_API bool | SetItems (const ItemVector &items, SdfListOpType type, std::string *errMsg=nullptr) |
SDF_API void | Clear () |
Removes all items and changes the list to be non-explicit. More... | |
SDF_API void | ClearAndMakeExplicit () |
Removes all items and changes the list to be explicit. More... | |
SDF_API void | ApplyOperations (ItemVector *vec, const ApplyCallback &cb=ApplyCallback()) const |
SDF_API std::optional < SdfListOp< T > > | ApplyOperations (const SdfListOp< T > &inner) const |
SDF_API bool | ModifyOperations (const ModifyCallback &callback) |
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) |
SDF_API void | ComposeOperations (const SdfListOp< T > &stronger, SdfListOpType op) |
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 . More... | |
static SDF_API SdfListOp | Create (const ItemVector &prependedItems=ItemVector(), const ItemVector &appendedItems=ItemVector(), const ItemVector &deletedItems=ItemVector()) |
Friends | |
size_t | hash_value (const SdfListOp &op) |
template<class ItemType > | |
void | SdfApplyListOrdering (std::vector< ItemType > *v, const std::vector< ItemType > &order) |
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:
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.
typedef std::function< std::optional<ItemType>SdfListOpType, const ItemType&) > SdfListOp< T >::ApplyCallback |
typedef std::vector<ItemType> SdfListOp< T >::ItemVector |
typedef std::function< std::optional<ItemType>const ItemType&) > SdfListOp< T >::ModifyCallback |
typedef ItemType SdfListOp< T >::value_type |
typedef ItemVector SdfListOp< T >::value_vector_type |
Create an empty ListOp in non-explicit mode.
SDF_API void SdfListOp< T >::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
.
SDF_API std::optional<SdfListOp<T> > 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().
Removes all items and changes the list to be non-explicit.
Removes all items and changes the list to be explicit.
SDF_API void SdfListOp< T >::ComposeOperations | ( | const SdfListOp< T > & | stronger, |
SdfListOpType | op | ||
) |
Composes a stronger SdfListOp's opinions for a given operation list over this one.
|
static |
Create a ListOp in non-explicit mode with the given prependedItems
, appendedItems
, and deletedItems
|
static |
Create a ListOp in explicit mode with the given explicitItems
.
|
inline |
|
inline |
SDF_API ItemVector SdfListOp< T >::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.
|
inline |
|
inline |
SDF_API const ItemVector& SdfListOp< T >::GetItems | ( | SdfListOpType | type | ) | const |
Return the item vector identified by type
.
|
inline |
|
inline |
Returns true
if the given item is in any of the item lists.
SDF_API bool SdfListOp< T >::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.
SDF_API bool SdfListOp< T >::ModifyOperations | ( | const ModifyCallback & | callback, |
bool | unusedRemoveDuplicates | ||
) |
SDF_API bool SdfListOp< T >::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.
SDF_API void SdfListOp< T >::SetAddedItems | ( | const ItemVector & | items | ) |
SDF_API bool SdfListOp< T >::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.
SDF_API bool SdfListOp< T >::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.
SDF_API bool SdfListOp< T >::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.
SDF_API bool SdfListOp< T >::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.
SDF_API void SdfListOp< T >::SetOrderedItems | ( | const ItemVector & | items | ) |
SDF_API bool SdfListOp< T >::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.
|
friend |