File indexing completed on 2026-09-13 09:10:59
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027 #ifndef G4VDNAMesh_hh
0028 #define G4VDNAMesh_hh 1
0029
0030 #include "globals.hh"
0031
0032 class G4VDNAMesh
0033 {
0034 public:
0035 G4VDNAMesh() = default;
0036 virtual ~G4VDNAMesh() = default;
0037 struct Index
0038 {
0039 Index() = default;
0040 Index(G4int _x, G4int _y, G4int _z)
0041 : x(_x)
0042 , y(_y)
0043 , z(_z)
0044 {}
0045 ~Index() = default;
0046 G4bool operator==(const Index& rhs) const
0047 {
0048 return x == rhs.x && y == rhs.y && z == rhs.z;
0049 }
0050 G4bool operator!=(const Index& rhs) const
0051 {
0052 return x != rhs.x || y != rhs.y || z != rhs.z;
0053 }
0054 G4bool operator<(const Index& rhs) const
0055 {
0056 if(x != rhs.x)
0057 {
0058 return x < rhs.x;
0059 }
0060 if(y != rhs.y)
0061 {
0062 return y < rhs.y;
0063 }
0064 if(z != rhs.z)
0065 {
0066 return z < rhs.z;
0067 }
0068
0069 return false;
0070 }
0071 friend std::ostream& operator<<(std::ostream& s, const Index& rhs);
0072 G4int x = 0;
0073 G4int y = 0;
0074 G4int z = 0;
0075 };
0076 struct hashFunc
0077 {
0078 size_t operator()(const Index& k) const
0079 {
0080 size_t h1 = std::hash<G4int>()(k.x);
0081 size_t h2 = std::hash<G4int>()(k.y);
0082 size_t h3 = std::hash<G4int>()(k.z);
0083
0084
0085 size_t seed = 0;
0086 seed ^= h1 + 0x9e3779b9 + (seed << 6) + (seed >> 2);
0087 seed ^= h2 + 0x9e3779b9 + (seed << 6) + (seed >> 2);
0088 seed ^= h3 + 0x9e3779b9 + (seed << 6) + (seed >> 2);
0089
0090 return seed;
0091 }
0092 };
0093 };
0094 #endif