// File: GEOMAlgo_PassKey.cxx // Created: // Author: Peter KURNEV // #include #include #include #include #ifdef WNT #pragma warning( disable : 4101) #endif static void SortShell(const int n, int* a); //======================================================================= //function : //purpose : //======================================================================= GEOMAlgo_PassKey::GEOMAlgo_PassKey() { Clear(); } //======================================================================= //function :Clear //purpose : //======================================================================= void GEOMAlgo_PassKey::Clear() { myNbIds=0; myNbMax=8; mySum=0; myIds[0]=0; myIds[1]=0; myIds[2]=0; myIds[3]=0; myIds[4]=0; myIds[5]=0; myIds[6]=0; myIds[7]=0; myUpper=432123;//2147483647; } //======================================================================= //function :Assign //purpose : //======================================================================= GEOMAlgo_PassKey& GEOMAlgo_PassKey::Assign(const GEOMAlgo_PassKey& anOther) { myNbIds=anOther.myNbIds; myNbMax=anOther.myNbMax; mySum=anOther.mySum; memcpy(myIds, anOther.myIds, sizeof(myIds)); return *this; } //======================================================================= //function :SetIds //purpose : //======================================================================= void GEOMAlgo_PassKey::SetIds(const TopoDS_Shape& aS1) { Standard_Integer anId1; // anId1=aS1.HashCode(myUpper); // myNbIds=1; myIds[7]=anId1; mySum=anId1; } //======================================================================= //function :SetIds //purpose : //======================================================================= void GEOMAlgo_PassKey::SetIds(const TopoDS_Shape& aS1, const TopoDS_Shape& aS2) { Standard_Integer anId1, anId2; // anId1=aS1.HashCode(myUpper); anId2=aS2.HashCode(myUpper); // myNbIds=2; mySum=anId1+anId2; if (anId1 myNbMax) { return; } // myNbIds=aNb; mySum=0; i=myNbMax-myNbIds; aIt.Initialize(aLS); for (; aIt.More(); aIt.Next(), ++i) { const TopoDS_Shape& aS=aIt.Value(); anId=aS.HashCode(myUpper); myIds[i]=anId; mySum+=anId; } // Compute(); } //======================================================================= //function :NbMax //purpose : //======================================================================= Standard_Integer GEOMAlgo_PassKey::NbMax()const { return myNbMax; } //======================================================================= //function :Compute //purpose : //======================================================================= void GEOMAlgo_PassKey::Compute() { SortShell(myNbIds, myIds+myNbMax-myNbIds); } //======================================================================= //function :IsEqual //purpose : //======================================================================= Standard_Boolean GEOMAlgo_PassKey::IsEqual(const GEOMAlgo_PassKey& anOther) const { Standard_Integer iIsEqual; Standard_Boolean bIsEqual; // iIsEqual=memcmp(myIds, anOther.myIds, sizeof(myIds)); bIsEqual=Standard_False; if (!iIsEqual) { bIsEqual=!bIsEqual; } return bIsEqual; } //======================================================================= //function :Key //purpose : //======================================================================= Standard_Address GEOMAlgo_PassKey::Key()const { return (Standard_Address)myIds; } //======================================================================= //function : HashCode //purpose : //======================================================================= Standard_Integer GEOMAlgo_PassKey::HashCode(const Standard_Integer Upper) const { return (mySum % Upper); } //======================================================================= //function : Dump //purpose : //======================================================================= void GEOMAlgo_PassKey::Dump()const { Standard_Integer i; // printf(" PassKey: {"); for (i=0; i -1) goto m30; }//if (a[l] < a[j]){ }//for (i=0; i