Fix for 32-bit platforms

-  int          GetElementIds( int* ids ) const;
+  template< typename IDTYPE >
+    int        GetElementIds( IDTYPE* ids ) const
+  {
+    return getElementIds( (void*)ids, sizeof(IDTYPE));
+  }
This commit is contained in:
eap 2012-12-20 10:19:51 +00:00
parent 58146f9215
commit 0115246c96
2 changed files with 16 additions and 9 deletions

View File

@ -228,18 +228,18 @@ std::vector< int > SMESHDS_GroupOnFilter::GetMeshInfo() const
*/
//================================================================================
int SMESHDS_GroupOnFilter::GetElementIds( int* ids ) const
int SMESHDS_GroupOnFilter::getElementIds( void* ids, size_t idSize ) const
{
SMESHDS_GroupOnFilter* me = const_cast<SMESHDS_GroupOnFilter*>( this );
int* curID = ids;
char* curID = (char*) ids;
SMDS_ElemIteratorPtr elIt = GetElements();
if ( elIt->more() )
{
if ( IsUpToDate() )
{
while ( elIt->more() )
*curID++ = elIt->next()->GetID();
for ( ; elIt->more(); curID += idSize )
(*(int*) curID) = elIt->next()->GetID();
}
else
{
@ -250,18 +250,19 @@ int SMESHDS_GroupOnFilter::GetElementIds( int* ids ) const
me->myMeshInfo.assign( SMDSEntity_Last, 0 );
me->myMeshInfo[ firstOkElem->GetEntityType() ]++;
*curID++ = firstOkElem->GetID();
while ( elIt->more() )
(*(int*) curID) = firstOkElem->GetID();
for ( curID += idSize; elIt->more(); curID += idSize )
{
const SMDS_MeshElement* e = elIt->next();
(*(int*) curID) = e->GetID();
me->myMeshInfo[ e->GetEntityType() ]++;
*curID++ = e->GetID();
}
}
}
me->setChanged( false );
return curID - ids;
return ( curID - (char*)ids ) / idSize;
}
//================================================================================

View File

@ -48,7 +48,12 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase
std::vector< int > GetMeshInfo() const;
int GetElementIds( int* ids ) const;
template< typename IDTYPE >
int GetElementIds( IDTYPE* ids ) const
{
return getElementIds( (void*)ids, sizeof(IDTYPE));
}
virtual int Extent() const;
@ -69,6 +74,7 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase
void update() const;
void setChanged(bool changed=true);
const SMDS_MeshElement* setNbElemToSkip( SMDS_ElemIteratorPtr& elIt );
int getElementIds( void* ids, size_t idSize ) const;
SMESH_PredicatePtr myPredicate;
std::vector< int > myMeshInfo;