Back to home page

EIC code displayed by LXR

 
 

    


Warning, /include/opencascade/TopLoc_Location.lxx is written in an unsupported language. File is not indexed.

0001 // Created on: 1993-01-11
0002 // Created by: Remi LEQUETTE
0003 // Copyright (c) 1993-1999 Matra Datavision
0004 // Copyright (c) 1999-2014 OPEN CASCADE SAS
0005 //
0006 // This file is part of Open CASCADE Technology software library.
0007 //
0008 // This library is free software; you can redistribute it and/or modify it under
0009 // the terms of the GNU Lesser General Public License version 2.1 as published
0010 // by the Free Software Foundation, with special exception defined in the file
0011 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
0012 // distribution for complete text of the license and disclaimer of any warranty.
0013 //
0014 // Alternatively, this file may be used under the terms of Open CASCADE
0015 // commercial license or contractual agreement.
0016 
0017 #include <Standard_HashUtils.hxx>
0018 #include <TopLoc_SListOfItemLocation.hxx>
0019 #include <TopLoc_Datum3D.hxx>
0020 #include <TopLoc_ItemLocation.hxx>
0021 
0022 //=======================================================================
0023 //function : IsIdentity
0024 //purpose  : 
0025 //=======================================================================
0026 
0027 inline Standard_Boolean TopLoc_Location::IsIdentity() const
0028 {
0029   return myItems.IsEmpty();
0030 }
0031 
0032 //=======================================================================
0033 //function : Identity
0034 //purpose  : 
0035 //=======================================================================
0036 
0037 inline void TopLoc_Location::Identity()
0038 {
0039   myItems.Clear();
0040 }
0041 
0042 //=======================================================================
0043 //function : FirstDatum
0044 //purpose  : 
0045 //=======================================================================
0046 
0047 inline const Handle(TopLoc_Datum3D)&  TopLoc_Location::FirstDatum()const 
0048 {
0049   return myItems.Value().myDatum;
0050 }
0051 
0052 //=======================================================================
0053 //function : FirstPower
0054 //purpose  : 
0055 //=======================================================================
0056 
0057  inline Standard_Integer  TopLoc_Location::FirstPower()const 
0058 {
0059   return myItems.Value().myPower;
0060 }
0061 
0062 
0063 //=======================================================================
0064 //function : NextLocation
0065 //purpose  : 
0066 //=======================================================================
0067 
0068  inline const TopLoc_Location&  TopLoc_Location::NextLocation()const 
0069 {
0070   return (*(TopLoc_Location*) &(myItems.Tail()));
0071 }
0072 
0073 //=======================================================================
0074 // function : HashCode
0075 // purpose  :
0076 //=======================================================================
0077 inline size_t TopLoc_Location::HashCode() const
0078 {
0079   // Hashing base on IsEqual function
0080   if (myItems.IsEmpty())
0081   {
0082     return 0;
0083   }
0084   size_t aHash = opencascade::MurmurHash::optimalSeed<size_t>();
0085   TopLoc_SListOfItemLocation items = myItems;
0086   size_t aCombined[3];
0087   while (items.More())
0088   {
0089     aCombined[0] = std::hash<Handle(TopLoc_Datum3D)>{}(items.Value().myDatum);
0090     aCombined[1] = opencascade::hash(items.Value().myPower);
0091     aCombined[2] = aHash;
0092     aHash = opencascade::hashBytes(aCombined, sizeof(aCombined));
0093     items.Next();
0094   }
0095   return aHash;
0096 }
0097 
0098 //=======================================================================
0099 // function : ShallowDump
0100 // purpose  :
0101 //=======================================================================
0102 inline void ShallowDump(const TopLoc_Location& me, Standard_OStream& S)
0103 {
0104   me.ShallowDump(S);
0105 }
0106 
0107 namespace std
0108 {
0109   template <>
0110   struct hash<TopLoc_Location>
0111   {
0112     size_t operator()(const TopLoc_Location& theLocation) const
0113     {
0114       return theLocation.HashCode();
0115     }
0116   };
0117 }