Back to index

salome-geom  6.5.0
GEOMAlgo_PassKey.cxx
Go to the documentation of this file.
00001 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
00002 //
00003 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
00004 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
00005 //
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public
00008 // License as published by the Free Software Foundation; either
00009 // version 2.1 of the License.
00010 //
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014 // Lesser General Public License for more details.
00015 //
00016 // You should have received a copy of the GNU Lesser General Public
00017 // License along with this library; if not, write to the Free Software
00018 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
00019 //
00020 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
00021 //
00022 
00023 // File:        GEOMAlgo_PassKey.cxx
00024 // Created:
00025 // Author:      Peter KURNEV
00026 //              <peter@PREFEX>
00027 //
00028 #include <GEOMAlgo_PassKey.hxx>
00029 
00030 #include <stdio.h>
00031 #include <string.h>
00032 #include <TColStd_ListIteratorOfListOfInteger.hxx>
00033 #include <TColStd_ListOfInteger.hxx>
00034 
00035 #ifdef WNT
00036 #pragma warning( disable : 4101)
00037 #endif
00038 
00039 static
00040   Standard_Integer NormalizedId(const Standard_Integer aId,
00041                                 const Standard_Integer aDiv);
00042 
00043 //=======================================================================
00044 //function :
00045 //purpose  :
00046 //=======================================================================
00047   GEOMAlgo_PassKey::GEOMAlgo_PassKey()
00048 {
00049  Clear();
00050 }
00051 //=======================================================================
00052 //function :
00053 //purpose  :
00054 //=======================================================================
00055   GEOMAlgo_PassKey::GEOMAlgo_PassKey(const GEOMAlgo_PassKey& aOther)
00056 {
00057   myNbIds=aOther.myNbIds;
00058   mySum=aOther.mySum;
00059   myMap=aOther.myMap;
00060 }
00061 //=======================================================================
00062 //function :Assign
00063 //purpose  :
00064 //=======================================================================
00065   GEOMAlgo_PassKey& GEOMAlgo_PassKey::Assign(const GEOMAlgo_PassKey& aOther)
00066 {
00067   myNbIds=aOther.myNbIds;
00068   mySum=aOther.mySum;
00069   myMap=aOther.myMap;
00070   return *this;
00071 }
00072 //=======================================================================
00073 //function :~
00074 //purpose  :
00075 //=======================================================================
00076   GEOMAlgo_PassKey::~GEOMAlgo_PassKey()
00077 {
00078 }
00079 //=======================================================================
00080 //function :Clear
00081 //purpose  :
00082 //=======================================================================
00083   void GEOMAlgo_PassKey::Clear()
00084 {
00085   myNbIds=0;
00086   mySum=0;
00087   myMap.Clear();
00088 }
00089 //=======================================================================
00090 //function :SetIds
00091 //purpose  :
00092 //=======================================================================
00093   void GEOMAlgo_PassKey::SetIds(const Standard_Integer aId1)
00094 
00095 {
00096   Clear();
00097   myNbIds=1;
00098   myMap.Add(aId1);
00099   mySum=NormalizedId(aId1, myNbIds);
00100 }
00101 //=======================================================================
00102 //function :SetIds
00103 //purpose  :
00104 //=======================================================================
00105   void GEOMAlgo_PassKey::SetIds(const Standard_Integer aId1,
00106                                 const Standard_Integer aId2)
00107 {
00108   TColStd_ListOfInteger aLI;
00109   //
00110   aLI.Append(aId1);
00111   aLI.Append(aId2);
00112   SetIds(aLI);
00113 }
00114 //=======================================================================
00115 //function :SetIds
00116 //purpose  :
00117 //=======================================================================
00118   void GEOMAlgo_PassKey::SetIds(const Standard_Integer aId1,
00119                                 const Standard_Integer aId2,
00120                                 const Standard_Integer aId3)
00121 {
00122   TColStd_ListOfInteger aLI;
00123   //
00124   aLI.Append(aId1);
00125   aLI.Append(aId2);
00126   aLI.Append(aId3);
00127   SetIds(aLI);
00128 }
00129 //=======================================================================
00130 //function :SetIds
00131 //purpose  :
00132 //=======================================================================
00133   void GEOMAlgo_PassKey::SetIds(const Standard_Integer aId1,
00134                                 const Standard_Integer aId2,
00135                                 const Standard_Integer aId3,
00136                                 const Standard_Integer aId4)
00137 {
00138   TColStd_ListOfInteger aLI;
00139   //
00140   aLI.Append(aId1);
00141   aLI.Append(aId2);
00142   aLI.Append(aId3);
00143   aLI.Append(aId4);
00144   SetIds(aLI);
00145 }
00146 //=======================================================================
00147 //function :SetIds
00148 //purpose  :
00149 //=======================================================================
00150   void GEOMAlgo_PassKey::SetIds(const TColStd_ListOfInteger& aLI)
00151 {
00152   Standard_Integer i, aId, aIdN;
00153   TColStd_ListIteratorOfListOfInteger aIt;
00154   //
00155   Clear();
00156   aIt.Initialize(aLI);
00157   for (; aIt.More(); aIt.Next()) {
00158     aId=aIt.Value();
00159     myMap.Add(aId);
00160   }
00161   myNbIds=myMap.Extent();
00162   for(i=1; i<=myNbIds; ++i) {
00163     aId=myMap(i);
00164     aIdN=NormalizedId(aId, myNbIds);
00165     mySum+=aIdN;
00166   }
00167 }
00168 //=======================================================================
00169 //function :NbIds
00170 //purpose  :
00171 //=======================================================================
00172   Standard_Integer GEOMAlgo_PassKey::NbIds()const
00173 {
00174   return myNbIds;
00175 }
00176 //=======================================================================
00177 //function :Id
00178 //purpose  :
00179 //=======================================================================
00180   Standard_Integer GEOMAlgo_PassKey::Id(const Standard_Integer aIndex) const
00181 {
00182   if (aIndex<1 || aIndex>myNbIds) {
00183     return -1;
00184   }
00185   return myMap(aIndex);
00186 }
00187 //=======================================================================
00188 //function :IsEqual
00189 //purpose  :
00190 //=======================================================================
00191   Standard_Boolean GEOMAlgo_PassKey::IsEqual(const GEOMAlgo_PassKey& aOther) const
00192 {
00193   Standard_Boolean bRet;
00194   Standard_Integer i, aId;
00195   //
00196   bRet=Standard_False;
00197   //
00198   if (myNbIds!=aOther.myNbIds) {
00199     return bRet;
00200   }
00201   for (i=1; i<=myNbIds; ++i) {
00202     aId=myMap(i);
00203     if (!aOther.myMap.Contains(aId)) {
00204       return bRet;
00205     }
00206   }
00207   return !bRet;
00208 }
00209 //=======================================================================
00210 //function : HashCode
00211 //purpose  :
00212 //=======================================================================
00213   Standard_Integer GEOMAlgo_PassKey::HashCode(const Standard_Integer aUpper) const
00214 {
00215   return ::HashCode(mySum, aUpper);
00216 }
00217 //=======================================================================
00218 //function : Dump
00219 //purpose  :
00220 //=======================================================================
00221   void GEOMAlgo_PassKey::Dump(const Standard_Integer )const
00222 {
00223 }
00224 //=======================================================================
00225 // function: NormalizedId
00226 // purpose :
00227 //=======================================================================
00228 Standard_Integer NormalizedId(const Standard_Integer aId,
00229                               const Standard_Integer aDiv)
00230 {
00231   Standard_Integer aMax, aTresh, aIdRet;
00232   //
00233   aIdRet=aId;
00234   aMax=::IntegerLast();
00235   aTresh=aMax/aDiv;
00236   if (aId>aTresh) {
00237     aIdRet=aId%aTresh;
00238   }
00239   return aIdRet;
00240 }