Merge pull request #8888 from OPM/8887-fix-reorder-capability

Fix reorder capability
This commit is contained in:
Magne Sjaastad
2022-05-06 10:52:08 +02:00
committed by GitHub
parent 64c4adf5f0
commit 74075cc9ab
23 changed files with 92 additions and 69 deletions
@@ -69,6 +69,7 @@ public:
void insertAt( int indexAfter, std::unique_ptr<PdmObjectHandle> obj );
PdmObjectHandle* at( size_t index ) override;
void setValue( const std::vector<DataType*>& objects );
size_t indexOf( const PdmObjectHandle* obj ) const override;
virtual void deleteAllChildObjectsAsync();
@@ -85,8 +86,7 @@ public:
void insert( size_t indexAfter, const std::vector<PdmPointer<DataType>>& objects );
size_t count( const DataType* pointer ) const;
void erase( size_t index ) override;
size_t index( const DataType* pointer ) const;
void erase( size_t index ) override;
typename std::vector<PdmPointer<DataType>>::iterator begin() { return m_pointers.begin(); };
typename std::vector<PdmPointer<DataType>>::iterator end() { return m_pointers.end(); };
@@ -138,6 +138,23 @@ size_t PdmChildArrayField<DataType*>::count( const DataType* pointer ) const
return itemCount;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
template <typename DataType>
size_t PdmChildArrayField<DataType*>::indexOf( const PdmObjectHandle* obj ) const
{
for ( size_t i = 0; i < m_pointers.size(); ++i )
{
if ( obj == m_pointers[i].rawPtr() )
{
return i;
}
}
return ( size_t )( -1 ); // Undefined size_t > m_pointers.size();
}
//--------------------------------------------------------------------------------------------------
/// Empty the container without deleting the objects pointed to.
//--------------------------------------------------------------------------------------------------
@@ -196,23 +213,6 @@ void PdmChildArrayField<DataType*>::erase( size_t index )
m_pointers.erase( m_pointers.begin() + index );
}
//--------------------------------------------------------------------------------------------------
/// Get the index of the given object pointer
//--------------------------------------------------------------------------------------------------
template <typename DataType>
size_t PdmChildArrayField<DataType*>::index( const DataType* pointer ) const
{
for ( size_t i = 0; i < m_pointers.size(); ++i )
{
if ( pointer == m_pointers[i].p() )
{
return i;
}
}
return ( size_t )( -1 ); // Undefined size_t > m_pointers.size();
}
//--------------------------------------------------------------------------------------------------
/// Assign objects to the field, replacing the current child objects
//--------------------------------------------------------------------------------------------------
@@ -189,3 +189,11 @@ PdmFieldReorderCapability* PdmFieldReorderCapability::reorderCapabilityOfParentC
return nullptr;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t PdmFieldReorderCapability::indexOf( PdmObjectHandle* pdmObject )
{
return m_field->indexOf( pdmObject );
}
@@ -51,6 +51,8 @@ public:
public:
PdmFieldReorderCapability( PdmPtrArrayFieldHandle* field, bool giveOwnership );
size_t indexOf( PdmObjectHandle* pdmObject );
bool canItemBeMovedUp( size_t index ) const;
bool canItemBeMovedDown( size_t index ) const;
@@ -50,11 +50,12 @@ public:
// Reimplementation of PdmPointersFieldHandle methods
virtual size_t size() const { return m_pointers.size(); }
virtual bool empty() const { return m_pointers.empty(); }
virtual void clear();
virtual void insertAt( int indexAfter, PdmObjectHandle* obj );
virtual PdmObjectHandle* at( size_t index );
size_t size() const override { return m_pointers.size(); }
bool empty() const override { return m_pointers.empty(); }
void clear() override;
void insertAt( int indexAfter, PdmObjectHandle* obj ) override;
PdmObjectHandle* at( size_t index ) override;
size_t indexOf( const PdmObjectHandle* obj ) const override;
// std::vector-like access
@@ -66,9 +67,8 @@ public:
void insert( size_t indexAfter, const std::vector<PdmPointer<DataType>>& objects );
size_t count( const DataType* pointer ) const;
void erase( size_t index );
size_t index( DataType* pointer );
void removePtr( PdmObjectHandle* object );
void erase( size_t index ) override;
void removePtr( PdmObjectHandle* object );
typename std::vector<PdmPointer<DataType>>::iterator begin() { return m_pointers.begin(); };
typename std::vector<PdmPointer<DataType>>::iterator end() { return m_pointers.end(); };
@@ -79,7 +79,7 @@ public:
std::vector<DataType*> ptrReferencedObjects() const;
// Child objects
virtual void ptrReferencedObjects( std::vector<PdmObjectHandle*>* );
void ptrReferencedObjects( std::vector<PdmObjectHandle*>* ) override;
private: // To be disabled
PDM_DISABLE_COPY_AND_ASSIGN( PdmPtrArrayField );
@@ -140,6 +140,23 @@ size_t PdmPtrArrayField<DataType*>::count( const DataType* pointer ) const
return itemCount;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
template <typename DataType>
size_t PdmPtrArrayField<DataType*>::indexOf( const PdmObjectHandle* obj ) const
{
for ( size_t i = 0; i < m_pointers.size(); ++i )
{
if ( obj == m_pointers[i].rawPtr() )
{
return i;
}
}
return ( size_t )( -1 ); // Undefined size_t > m_pointers.size();
}
//--------------------------------------------------------------------------------------------------
/// Empty the container without deleting the objects pointed to.
//--------------------------------------------------------------------------------------------------
@@ -170,23 +187,6 @@ void PdmPtrArrayField<DataType*>::erase( size_t index )
m_pointers.erase( m_pointers.begin() + index );
}
//--------------------------------------------------------------------------------------------------
/// Get the index of the given object pointer
//--------------------------------------------------------------------------------------------------
template <typename DataType>
size_t PdmPtrArrayField<DataType*>::index( DataType* pointer )
{
for ( size_t i = 0; i < m_pointers.size(); ++i )
{
if ( pointer == m_pointers[i].p() )
{
return i;
}
}
return ( size_t )( -1 ); // Undefined size_t > m_pointers.size();
}
//--------------------------------------------------------------------------------------------------
/// Removes all instances of object pointer from the container without deleting the object.
//--------------------------------------------------------------------------------------------------
@@ -20,6 +20,7 @@ public:
virtual void clear() = 0;
virtual void insertAt( int indexAfter, PdmObjectHandle* obj ) = 0;
virtual void erase( size_t index ) = 0;
virtual size_t indexOf( const PdmObjectHandle* obj ) const = 0;
virtual PdmObjectHandle* at( size_t index ) = 0;
};