// Copyright (c) 2023, NVIDIA CORPORATION. All rights reserved.
//
// NVIDIA CORPORATION and its licensors retain all intellectual property
// and proprietary rights in and to this software, related documentation
// and any modifications thereto. Any use, reproduction, disclosure or
// distribution of this software and related documentation without an express
// license agreement from NVIDIA CORPORATION is strictly prohibited.
//
// --------- Warning: This is a build system generated file. ----------
//

//! @file
//!
//! @brief This file was generated by <i>omni.bind</i>.

#include <omni/core/Interface.h>
#include <omni/core/OmniAttr.h>
#include <omni/core/ResultError.h>

#include <functional>
#include <type_traits>
#include <utility>

#ifndef OMNI_BIND_INCLUDE_INTERFACE_IMPL


//! Provide read write access to recursive bundles.
template <>
class omni::core::Generated<omni::graph::core::IBundle2_abi> : public omni::graph::core::IBundle2_abi
{
public:
    OMNI_PLUGIN_INTERFACE("omni::graph::core::IBundle2")

    //! Return handle to this bundle. Invalid handle is returned if this bundle is invalid.
    omni::graph::core::BundleHandle getHandle() noexcept;

    //! Return parent of this bundle, or invalid handle if there is no parent.
    omni::graph::core::BundleHandle getParentBundle() noexcept;

    //! @brief Get read-write handles to all attributes in this bundle.
    //!
    //! @copydetails IConstBundle2_abi::getConstAttributes_abi
    omni::core::Result getAttributes(omni::graph::core::AttributeDataHandle* const attributes,
                                     size_t* const attributeCount) noexcept;

    //! @brief Searches for read-write handles of the attribute in this bundle by using attribute names.
    //!
    //! @copydetails IConstBundle2_abi::getConstAttributesByName_abi
    omni::core::Result getAttributesByName(const omni::graph::core::NameToken* const names,
                                           size_t nameCount,
                                           omni::graph::core::AttributeDataHandle* const attributes) noexcept;

    //! @brief Get read write handles to all child bundles in this bundle.
    //!
    //! @copydetails IConstBundle2_abi::getConstChildBundles_abi
    omni::core::Result getChildBundles(omni::graph::core::BundleHandle* const bundles, size_t* const bundleCount) noexcept;

    //! @brief Get read write handle to child bundle by index.
    //!
    //! @copydetails IConstBundle2_abi::getConstChildBundle_abi
    omni::core::Result getChildBundle(size_t bundleIndex, omni::graph::core::BundleHandle* const bundle) noexcept;

    //! @brief Lookup for read write handles to child bundles under specified names.
    //!
    //! @copydetails IConstBundle2_abi::getConstChildBundlesByName_abi
    omni::core::Result getChildBundlesByName(const omni::graph::core::NameToken* const names,
                                             size_t nameCount,
                                             omni::graph::core::BundleHandle* const foundBundles) noexcept;

    //! @brief Create new attributes by copying existing.
    //!
    //! Source attribute handles' data and metadata are copied. If a handle is invalid,
    //! then its source is ignored.
    //! Created attributes are owned by this bundle.
    //!
    //! @param newNames The names for the new attributes, if `nullptr` then names are taken from the source attributes.
    //! @param sourceAttributes Handles to attributes whose data type is to be copied.
    //! @param attributeCount Number of attributes to be copied.
    //! @param overwrite An option to overwrite existing attributes.
    //! @param copiedAttributes Output handles to the newly copied attributes. Can be `nullptr` if no output is
    //!        required.
    //! @param copiedCount Number of successfully copied attributes.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result copyAttributes(const omni::graph::core::NameToken* const newNames,
                                      const omni::graph::core::ConstAttributeDataHandle* const sourceAttributes,
                                      size_t attributeCount,
                                      bool overwrite,
                                      omni::graph::core::AttributeDataHandle* const copiedAttributes,
                                      size_t* const copiedCount) noexcept;

    //! @brief Create attributes based on provided names and types.
    //!
    //! Created attributes are owned by this bundle.
    //!
    //! @param names The names of the attributes.
    //! @param types The types of the attributes.
    //! @param elementCount Number of elements in the array, can be `nullptr` if attribute is not an array.
    //! @param attributeCount Number of attributes to be created.
    //! @param createdAttributes Output handles to the newly created attributes. Can be nullptr if no output is
    //!        required.
    //! @param createdCount Number of successfully created attributes.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result createAttributes(const omni::graph::core::NameToken* const names,
                                        const omni::graph::core::Type* const types,
                                        const size_t* const elementCount,
                                        size_t attributeCount,
                                        omni::graph::core::AttributeDataHandle* const createdAttributes,
                                        size_t* const createdCount) noexcept;

    //! @brief Use attribute handles as pattern to create new attributes.
    //!
    //! The name and type for new attributes are taken from pattern attributes, data and metadata is not copied.
    //! If pattern handle is invalid, then attribute creation is skipped.
    //! Created attributes are owned by this bundle.
    //!
    //! @param patternAttributes Attributes whose name and type is to be used to create new attributes.
    //! @param patternCount Number of attributes to be created.
    //! @param createdAttributes Output handles to the newly created attributes. Can be nullptr if no output is
    //! required.
    //! @param createdCount Number of successfully created attributes.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result createAttributesLike(const omni::graph::core::ConstAttributeDataHandle* const patternAttributes,
                                            size_t patternCount,
                                            omni::graph::core::AttributeDataHandle* const createdAttributes,
                                            size_t* const createdCount) noexcept;

    //! @brief Create immediate child bundles under specified names in this bundle.
    //!
    //! Only immediate children are created. This method does not work recursively.
    //! If name token is invalid, then child bundle creation is skipped.
    //! Created bundles are owned by this bundle.
    //!
    //! @param names New children names in this bundle.
    //! @param nameCount Number of bundles to be created.
    //! @param createdBundles Output handles to the newly created bundles. Can be nullptr if no output is required.
    //! @param createdCount Number of successfully created child bundles.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result createChildBundles(const omni::graph::core::NameToken* const names,
                                          size_t nameCount,
                                          omni::graph::core::BundleHandle* const createdBundles,
                                          size_t* const createdCount) noexcept;

    //! <b>Feature not implemented yet.</b>
    //!
    //! @brief Add a set of attributes to this bundle as links.
    //!
    //! Added attributes are links to other attributes that are part of another bundle.
    //! If target handle is invalid, then linking is skipped.
    //! The links are owned by this bundle, but targets of the links are not.
    //! Removing links from this bundle does not destroy the data links point to.
    //!
    //! @param linkNames The names for new links.
    //! @param targetAttributes Handles to attributes whose data is to be added.
    //! @param attributeCount Number of attributes to be added.
    //! @param linkedAttributes Output handles to linked attributes. Can be nullptr if no output is required.
    //! @param linkedCount Number of attributes successfully linked.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result linkAttributes(const omni::graph::core::NameToken* const linkNames,
                                      const omni::graph::core::ConstAttributeDataHandle* const targetAttributes,
                                      size_t attributeCount,
                                      omni::graph::core::AttributeDataHandle* const linkedAttributes,
                                      size_t* const linkedCount) noexcept;

    //! @brief Copy bundle data and metadata from the source bundle to this bundle.
    //!
    //! If source handle is invalid, then operation is skipped.
    //!
    //! @param sourceBundle Handle to bundle whose data is to be copied.
    //! @param overwrite An option to overwrite existing content of the bundle.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //! invalid.
    omni::core::Result copyBundle(const omni::graph::core::ConstBundleHandle& sourceBundle, bool overwrite) noexcept;

    //! @brief Create new child bundles by copying existing.
    //!
    //! Source bundle handles' data and metadata are copied. If a handle is invalid,
    //! then its source is ignored.
    //! Created bundles are owned by this bundle.
    //!
    //! @param newNames Names for new children, if `nullptr` then names are taken from the source bundles.
    //! @param sourceBundles Handles to bundles whose data is to be copied.
    //! @param bundleCount Number of bundles to be copied.
    //! @param overwrite An option to overwrite existing child bundles.
    //! @param copiedBundles Output handles to the newly copied bundles. Can be `nullptr` if no output is required.
    //! @param copiedCount Number of successfully copied child bundles.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result copyChildBundles(const omni::graph::core::NameToken* const newNames,
                                        const omni::graph::core::ConstBundleHandle* const sourceBundles,
                                        size_t bundleCount,
                                        bool overwrite,
                                        omni::graph::core::BundleHandle* const copiedBundles,
                                        size_t* const copiedCount) noexcept;

    //! <b>Feature not implemented yet.</b>
    //!
    //! @brief Link content from the source bundle to this bundle.
    //!
    //! If source handle is invalid, then operation is skipped.
    //!
    //! @param sourceBundle Handle to bundle whose data is to be linked.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result linkBundle(const omni::graph::core::ConstBundleHandle* const sourceBundle) noexcept;

    //! @brief Add a set of bundles as children to this bundle as links.
    //!
    //! Created bundles are links to other bundles that are part of another bundle.
    //! If target handle is invalid, then operation is skipped.
    //! The links are owned by this bundle, but targets of the links are not.
    //! Removing links from this bundle does not destroy the targets data.
    //!
    //! @param linkNames Names for new links.
    //! @param targetBundles Handles to bundles whose data is to be added.
    //! @param bundleCount Number of bundles to be added.
    //! @param linkedBundles Handles to linked bundles. Can be nullptr if no output is required.
    //! @param linkedCount Number of child bundles successfully linked.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result linkChildBundles(const omni::graph::core::NameToken* const linkNames,
                                        const omni::graph::core::ConstBundleHandle* const targetBundles,
                                        size_t bundleCount,
                                        omni::graph::core::BundleHandle* const linkedBundles,
                                        size_t* const linkedCount) noexcept;

    //! @brief Remove attributes based on provided handles.
    //!
    //! Lookup the attribute handles and if they are part of this bundle then remove attributes' data and
    //! metadata. Attribute handles that are not part of this bundle are ignored.
    //!
    //! @param attributes Handles to attributes whose data is to be removed
    //! @param attributeCount Number of attributes to be removed.
    //! @param removedCount Number of attributes successfully removed.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result removeAttributes(const omni::graph::core::ConstAttributeDataHandle* const attributes,
                                        size_t attributeCount,
                                        size_t* const removedCount) noexcept;

    //! @brief  Remove attributes based on provided names.
    //!
    //! Lookup the attribute names and if they are part of this bundle then remove attributes' data and
    //! metadata. Attribute names that are not part of this bundle are ignored.
    //!
    //! @param names The names of the attributes whose data is to be removed.
    //! @param nameCount Number of attributes to be removed.
    //! @param removedCount Number of attributes successfully removed.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result removeAttributesByName(const omni::graph::core::NameToken* const names,
                                              size_t nameCount,
                                              size_t* const removedCount) noexcept;

    //! @brief Remove child bundles based on provided handles.
    //!
    //! Lookup the bundle handles and if they are children of the bundle then remove them and their metadata.
    //! Bundle handles that are not children of this bundle are ignored.
    //! Only empty child bundles can be removed.
    //!
    //! @param childHandles Handles to bundles to be removed.
    //! @param childCount Number of child bundles to be removed.
    //! @param removedCount Number of child bundles successfully removed.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result removeChildBundles(const omni::graph::core::ConstBundleHandle* const childHandles,
                                          size_t childCount,
                                          size_t* const removedCount) noexcept;

    //! @brief  Remove child bundles based on provided names.
    //!
    //! Lookup the bundle names and if the are children of the bundle then remove them and their metadata.
    //! Bundle names that are not children of this bundle are ignored.
    //! Only empty child bundles can be removed.
    //!
    //! @param names The names of the child bundles to be removed.
    //! @param nameCount Number of child bundles to be removed.
    //! @param removedCount Number of child bundles successfully removed.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result removeChildBundlesByName(const omni::graph::core::NameToken* const names,
                                                size_t nameCount,
                                                size_t* const removedCount) noexcept;

    //! @deprecated Metadata storage is deprecated and invalid handle is returned.
    omni::graph::core::BundleHandle getMetadataStorage() noexcept;

    //! @brief Search for bundle metadata fields based on provided names.
    //!
    //! Invalid attribute handles are returned for not existing names.
    //!
    //! @param fieldNames Bundle metadata field names to be searched for.
    //! @param fieldCount Size of fieldNames and bundleMetadata arrays.
    //! @param bundleMetadata Handles to bundle metadata fields in this bundle.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result getBundleMetadataByName(const omni::graph::core::NameToken* const fieldNames,
                                               size_t fieldCount,
                                               omni::graph::core::AttributeDataHandle* const bundleMetadata) noexcept;

    //! @brief Create bundle metadata fields in this bundle.
    //!
    //! @param fieldNames Names of new bundle metadata fields.
    //! @param fieldTypes Types of new bundle metadata fields.
    //! @param elementCount Number of elements in the array, can be `nullptr` if field is not an array.
    //! @param fieldCount Size of fieldNames and fieldTypes arrays.
    //! @param bundleMetadata Handles to the newly created bundle metadata fields. Can be `nullptr` if no output is
    //! required.
    //! @param createdCount Number of child bundles successfully created.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result createBundleMetadata(const omni::graph::core::NameToken* const fieldNames,
                                            const omni::graph::core::Type* const fieldTypes,
                                            const size_t* const elementCount,
                                            size_t fieldCount,
                                            omni::graph::core::AttributeDataHandle* const bundleMetadata,
                                            size_t* const createdCount) noexcept;

    //! @brief Remove bundle metadata based on provided field names.
    //!
    //! @param fieldNames Names of the bundle metadata fields whose data is to be removed.
    //! @param fieldCount Number of the bundle metadata fields to be removed.
    //! @param removedCount Number of bundle metadata fields successfully removed.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result removeBundleMetadata(const omni::graph::core::NameToken* const fieldNames,
                                            size_t fieldCount,
                                            size_t* const removedCount) noexcept;

    //! @brief Search for read write field handles in the attribute by using field names.
    //!
    //! @copydetails IConstBundle2_abi::getConstAttributeMetadataByName_abi
    omni::core::Result getAttributeMetadataByName(omni::graph::core::NameToken attribute,
                                                  const omni::graph::core::NameToken* const fieldNames,
                                                  size_t fieldCount,
                                                  omni::graph::core::AttributeDataHandle* const attributeMetadata) noexcept;

    //! @brief Create attribute metadata fields.
    //!
    //! @param attribute Name of the attribute.
    //! @param fieldNames Names of new attribute metadata fields.
    //! @param fieldTypes Types of new attribute metadata fields.
    //! @param elementCount Number of elements in the array, can be `nullptr` if field is not an array.
    //! @param fieldCount Size of fieldNames and fieldTypes arrays.
    //! @param attributeMetadata Handles to the newly created attribute metadata. Can be `nullptr` if no output is
    //! required.
    //! @param createdCount Number of attribute metadata fields successfully created.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result createAttributeMetadata(omni::graph::core::NameToken attribute,
                                               const omni::graph::core::NameToken* const fieldNames,
                                               const omni::graph::core::Type* const fieldTypes,
                                               const size_t* const elementCount,
                                               size_t fieldCount,
                                               omni::graph::core::AttributeDataHandle* const attributeMetadata,
                                               size_t* const createdCount) noexcept;

    //! @brief Remove attribute metadata fields.
    //!
    //! @param attribute Name of the attribute.
    //! @param fieldNames Names of the attribute metadata fields to be removed.
    //! @param fieldCount Size of fieldNames array.
    //! @param removedCount Number of attribute metadata fields successfully removed.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result removeAttributeMetadata(omni::graph::core::NameToken attribute,
                                               const omni::graph::core::NameToken* const fieldNames,
                                               size_t fieldCount,
                                               size_t* const removedCount) noexcept;

    //! @brief Remove all attributes, child bundles and metadata from this bundle, but keep the bundle itself.
    //!
    //! @param bundleMetadata Clears bundle metadata in this bundle.
    //! @param attributes Clears attributes in this bundle.
    //! @param childBundles Clears child bundles in this bundle.
    //! @return Success if executed successfully, Fail for unsuccessful execution, InvalidArgument if arguments are
    //!         invalid.
    omni::core::Result clearContents(bool bundleMetadata, bool attributes, bool childBundles) noexcept;
};

#endif

#ifndef OMNI_BIND_INCLUDE_INTERFACE_DECL

inline omni::graph::core::BundleHandle omni::core::Generated<omni::graph::core::IBundle2_abi>::getHandle() noexcept
{
    return getHandle_abi();
}

inline omni::graph::core::BundleHandle omni::core::Generated<omni::graph::core::IBundle2_abi>::getParentBundle() noexcept
{
    return getParentBundle_abi();
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getAttributes(
    omni::graph::core::AttributeDataHandle* const attributes, size_t* const attributeCount) noexcept
{
    return getAttributes_abi(attributes, attributeCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getAttributesByName(
    const omni::graph::core::NameToken* const names,
    size_t nameCount,
    omni::graph::core::AttributeDataHandle* const attributes) noexcept
{
    return getAttributesByName_abi(names, nameCount, attributes);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getChildBundles(
    omni::graph::core::BundleHandle* const bundles, size_t* const bundleCount) noexcept
{
    return getChildBundles_abi(bundles, bundleCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getChildBundle(
    size_t bundleIndex, omni::graph::core::BundleHandle* const bundle) noexcept
{
    return getChildBundle_abi(bundleIndex, bundle);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getChildBundlesByName(
    const omni::graph::core::NameToken* const names,
    size_t nameCount,
    omni::graph::core::BundleHandle* const foundBundles) noexcept
{
    return getChildBundlesByName_abi(names, nameCount, foundBundles);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::copyAttributes(
    const omni::graph::core::NameToken* const newNames,
    const omni::graph::core::ConstAttributeDataHandle* const sourceAttributes,
    size_t attributeCount,
    bool overwrite,
    omni::graph::core::AttributeDataHandle* const copiedAttributes,
    size_t* const copiedCount) noexcept
{
    return copyAttributes_abi(newNames, sourceAttributes, attributeCount, overwrite, copiedAttributes, copiedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::createAttributes(
    const omni::graph::core::NameToken* const names,
    const omni::graph::core::Type* const types,
    const size_t* const elementCount,
    size_t attributeCount,
    omni::graph::core::AttributeDataHandle* const createdAttributes,
    size_t* const createdCount) noexcept
{
    return createAttributes_abi(names, types, elementCount, attributeCount, createdAttributes, createdCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::createAttributesLike(
    const omni::graph::core::ConstAttributeDataHandle* const patternAttributes,
    size_t patternCount,
    omni::graph::core::AttributeDataHandle* const createdAttributes,
    size_t* const createdCount) noexcept
{
    return createAttributesLike_abi(patternAttributes, patternCount, createdAttributes, createdCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::createChildBundles(
    const omni::graph::core::NameToken* const names,
    size_t nameCount,
    omni::graph::core::BundleHandle* const createdBundles,
    size_t* const createdCount) noexcept
{
    return createChildBundles_abi(names, nameCount, createdBundles, createdCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::linkAttributes(
    const omni::graph::core::NameToken* const linkNames,
    const omni::graph::core::ConstAttributeDataHandle* const targetAttributes,
    size_t attributeCount,
    omni::graph::core::AttributeDataHandle* const linkedAttributes,
    size_t* const linkedCount) noexcept
{
    return linkAttributes_abi(linkNames, targetAttributes, attributeCount, linkedAttributes, linkedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::copyBundle(
    const omni::graph::core::ConstBundleHandle& sourceBundle, bool overwrite) noexcept
{
    return copyBundle_abi(sourceBundle, overwrite);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::copyChildBundles(
    const omni::graph::core::NameToken* const newNames,
    const omni::graph::core::ConstBundleHandle* const sourceBundles,
    size_t bundleCount,
    bool overwrite,
    omni::graph::core::BundleHandle* const copiedBundles,
    size_t* const copiedCount) noexcept
{
    return copyChildBundles_abi(newNames, sourceBundles, bundleCount, overwrite, copiedBundles, copiedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::linkBundle(
    const omni::graph::core::ConstBundleHandle* const sourceBundle) noexcept
{
    return linkBundle_abi(sourceBundle);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::linkChildBundles(
    const omni::graph::core::NameToken* const linkNames,
    const omni::graph::core::ConstBundleHandle* const targetBundles,
    size_t bundleCount,
    omni::graph::core::BundleHandle* const linkedBundles,
    size_t* const linkedCount) noexcept
{
    return linkChildBundles_abi(linkNames, targetBundles, bundleCount, linkedBundles, linkedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::removeAttributes(
    const omni::graph::core::ConstAttributeDataHandle* const attributes,
    size_t attributeCount,
    size_t* const removedCount) noexcept
{
    return removeAttributes_abi(attributes, attributeCount, removedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::removeAttributesByName(
    const omni::graph::core::NameToken* const names, size_t nameCount, size_t* const removedCount) noexcept
{
    return removeAttributesByName_abi(names, nameCount, removedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::removeChildBundles(
    const omni::graph::core::ConstBundleHandle* const childHandles, size_t childCount, size_t* const removedCount) noexcept
{
    return removeChildBundles_abi(childHandles, childCount, removedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::removeChildBundlesByName(
    const omni::graph::core::NameToken* const names, size_t nameCount, size_t* const removedCount) noexcept
{
    return removeChildBundlesByName_abi(names, nameCount, removedCount);
}

inline omni::graph::core::BundleHandle omni::core::Generated<omni::graph::core::IBundle2_abi>::getMetadataStorage() noexcept
{
    return getMetadataStorage_abi();
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getBundleMetadataByName(
    const omni::graph::core::NameToken* const fieldNames,
    size_t fieldCount,
    omni::graph::core::AttributeDataHandle* const bundleMetadata) noexcept
{
    return getBundleMetadataByName_abi(fieldNames, fieldCount, bundleMetadata);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::createBundleMetadata(
    const omni::graph::core::NameToken* const fieldNames,
    const omni::graph::core::Type* const fieldTypes,
    const size_t* const elementCount,
    size_t fieldCount,
    omni::graph::core::AttributeDataHandle* const bundleMetadata,
    size_t* const createdCount) noexcept
{
    return createBundleMetadata_abi(fieldNames, fieldTypes, elementCount, fieldCount, bundleMetadata, createdCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::removeBundleMetadata(
    const omni::graph::core::NameToken* const fieldNames, size_t fieldCount, size_t* const removedCount) noexcept
{
    return removeBundleMetadata_abi(fieldNames, fieldCount, removedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::getAttributeMetadataByName(
    omni::graph::core::NameToken attribute,
    const omni::graph::core::NameToken* const fieldNames,
    size_t fieldCount,
    omni::graph::core::AttributeDataHandle* const attributeMetadata) noexcept
{
    return getAttributeMetadataByName_abi(attribute, fieldNames, fieldCount, attributeMetadata);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::createAttributeMetadata(
    omni::graph::core::NameToken attribute,
    const omni::graph::core::NameToken* const fieldNames,
    const omni::graph::core::Type* const fieldTypes,
    const size_t* const elementCount,
    size_t fieldCount,
    omni::graph::core::AttributeDataHandle* const attributeMetadata,
    size_t* const createdCount) noexcept
{
    return createAttributeMetadata_abi(
        attribute, fieldNames, fieldTypes, elementCount, fieldCount, attributeMetadata, createdCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::removeAttributeMetadata(
    omni::graph::core::NameToken attribute,
    const omni::graph::core::NameToken* const fieldNames,
    size_t fieldCount,
    size_t* const removedCount) noexcept
{
    return removeAttributeMetadata_abi(attribute, fieldNames, fieldCount, removedCount);
}

inline omni::core::Result omni::core::Generated<omni::graph::core::IBundle2_abi>::clearContents(bool bundleMetadata,
                                                                                                bool attributes,
                                                                                                bool childBundles) noexcept
{
    return clearContents_abi(bundleMetadata, attributes, childBundles);
}

#endif

#undef OMNI_BIND_INCLUDE_INTERFACE_DECL
#undef OMNI_BIND_INCLUDE_INTERFACE_IMPL
