Skip to content

File attribute_collection_commit.h

File List > geometry > attribute_collection_commit.h

Go to the documentation of this file

#pragma once
#include <uipc/geometry/attribute_collection.h>

namespace uipc::geometry
{
class UIPC_CORE_API AttributeCollectionCommit
{
    friend class GeometryAtlasCommit;
    friend class GeometryCommit;
    friend class AttributeCollection;
    friend class AttributeCollectionFactory;
    friend class GeometryFactory;
    friend UIPC_CORE_API AttributeCollectionCommit operator-(const AttributeCollection& dst,
                                                             const AttributeCollection& src);
    friend UIPC_CORE_API AttributeCollection& operator+=(AttributeCollection& dst,
                                                         const AttributeCollectionCommit& inc);

  public:
    AttributeCollectionCommit() = default;
    explicit AttributeCollectionCommit(const AttributeCollection& dst);
    AttributeCollectionCommit(const AttributeCollectionCommit& other) = default;
    AttributeCollectionCommit& operator=(const AttributeCollectionCommit& other) = delete;

    const AttributeCollection& attribute_collection() const noexcept
    {
        return m_attribute_collection;
    }

    span<const std::string> removed_names() const noexcept
    {
        return span<const std::string>(m_removed_names);
    }

  private:
    AttributeCollectionCommit(const AttributeCollection& dst, const AttributeCollection& src);
    AttributeCollection m_attribute_collection;
    vector<std::string> m_removed_names;
};

UIPC_CORE_API AttributeCollectionCommit operator-(const AttributeCollection& dst,
                                                  const AttributeCollection& src);

UIPC_CORE_API AttributeCollection& operator+=(AttributeCollection& dst,
                                              const AttributeCollectionCommit& inc);
}  // namespace uipc::geometry