Salome HOME
Fix for 32-bit platforms
authoreap <eap@opencascade.com>
Thu, 20 Dec 2012 10:19:51 +0000 (10:19 +0000)
committereap <eap@opencascade.com>
Thu, 20 Dec 2012 10:19:51 +0000 (10:19 +0000)
-  int          GetElementIds( int* ids ) const;
+  template< typename IDTYPE >
+    int        GetElementIds( IDTYPE* ids ) const
+  {
+    return getElementIds( (void*)ids, sizeof(IDTYPE));
+  }

src/SMESHDS/SMESHDS_GroupOnFilter.cxx
src/SMESHDS/SMESHDS_GroupOnFilter.hxx

index 3850da28be5c0bae05d2ebf3cb93db4c5849aa1e..80082af0d2f7b7cd94f1fe87373dabbb35590c29 100644 (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;
 }
 
 //================================================================================
index 17b347a21abba889cec3f7c85b9946e9ce884075..9200744d29935f13818fd27ce776554c027ed456 100644 (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;