Geant4 11.1.1
Toolkit for the simulation of the passage of particles through matter
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4SmartVoxelNode.hh
Go to the documentation of this file.
1//
2// ********************************************************************
3// * License and Disclaimer *
4// * *
5// * The Geant4 software is copyright of the Copyright Holders of *
6// * the Geant4 Collaboration. It is provided under the terms and *
7// * conditions of the Geant4 Software License, included in the file *
8// * LICENSE and available at http://cern.ch/geant4/license . These *
9// * include a list of copyright holders. *
10// * *
11// * Neither the authors of this software system, nor their employing *
12// * institutes,nor the agencies providing financial support for this *
13// * work make any representation or warranty, express or implied, *
14// * regarding this software system or assume any liability for its *
15// * use. Please see the license in the file LICENSE and URL above *
16// * for the full disclaimer and the limitation of liability. *
17// * *
18// * This code implementation is the result of the scientific and *
19// * technical work of the GEANT4 collaboration. *
20// * By using, copying, modifying or distributing the software (or *
21// * any work based on the software) you agree to acknowledge its *
22// * use in resulting scientific publications, and indicate your *
23// * acceptance of all terms of the Geant4 Software license. *
24// ********************************************************************
25//
26// G4SmartVoxelNode
27//
28// Class description:
29//
30// A node in the smart voxel hierarchy - a `slice' of space along a given
31// axis between given minima and maxima. Note that the node is not aware
32// of its position - this information being available/derivable by the
33// node's owner(s) (voxelheaders).
34//
35// Member Data:
36//
37// G4int fminEquivalent
38// G4int fmaxEquivalent
39// - Min and maximum nodes with same contents. Set by constructor
40// and set methods.
41// std::vector<G4int> fcontents
42// - Vector of no.s of volumes inside the node.
43
44// 18.04.01, G.Cosmo - Migrated to STL vector
45// 12.07.95, P.Kent - Initial version
46// --------------------------------------------------------------------
47#ifndef G4SMARTVOXELNODE_HH
48#define G4SMARTVOXELNODE_HH 1
49
50#include <vector>
51
52#include "geomwdefs.hh"
53#include "G4Types.hh"
54#include "G4Allocator.hh"
55
56using G4SliceVector = std::vector<G4int>;
57
59{
60 public:
61
62 G4SmartVoxelNode(G4int pSlice = 0) : fminEquivalent(pSlice),
63 fmaxEquivalent(pSlice) {}
64 // Constructor. Create an empty node with slice number pSlice.
65 // This number is not stored, but used to provide defaults for the
66 // minimum and maximum equivalent node numbers.
67
68 ~G4SmartVoxelNode() = default;
69 // Destructor. No actions.
70
71 inline G4int GetVolume(G4int pVolumeNo) const;
72 // Return contained volume number pVolumeNo.
73 // Note: starts from 0 and no bounds checking performed.
74
75 inline void Insert(G4int pVolumeNo);
76 // Add the specified volume number to the contents.
77
78 inline std::size_t GetNoContained() const;
79 // Return the number of volumes inside the node.
80
81 inline std::size_t GetCapacity() const;
82 // Return the maximum capacity of the buffer.
83
84 inline void Reserve(G4int noSlices);
85 // Reserve memory in the vector of slices according to the specified
86 // quantity, relative to the maximum number of slices.
87
88 inline void Shrink();
89 // Shrink buffer capacity to actual size to reduce wasted memory.
90
92 // Return the maximum slice (node/header) number with the same contents,
93 // and with all intermediate slice also having the same contents.
94 inline void SetMaxEquivalentSliceNo(G4int pMax);
95 // Set the maximum slice number (as above).
97 // Return the minimum slice (node/header) number with the same contents,
98 // and with all intermediate nodes also having the same contents.
99 inline void SetMinEquivalentSliceNo(G4int pMin);
100 // Set the minimum slice number (as above).
101
102 G4bool operator == (const G4SmartVoxelNode& v) const;
103 // Equality operator.
104
105 inline void* operator new(std::size_t);
106 // Override "new" for "G4Allocator".
107 inline void operator delete(void* aNode);
108 // Override "delete" for "G4Allocator".
109
110 private:
111
112 G4int fminEquivalent;
113 G4int fmaxEquivalent;
114 G4SliceVector fcontents;
115};
116
117#include "G4SmartVoxelNode.icc"
118
119#endif
std::vector< G4int > G4SliceVector
bool G4bool
Definition: G4Types.hh:86
int G4int
Definition: G4Types.hh:85
G4SmartVoxelNode(G4int pSlice=0)
G4bool operator==(const G4SmartVoxelNode &v) const
G4int GetMaxEquivalentSliceNo() const
std::size_t GetCapacity() const
G4int GetVolume(G4int pVolumeNo) const
void Reserve(G4int noSlices)
void Insert(G4int pVolumeNo)
void SetMaxEquivalentSliceNo(G4int pMax)
~G4SmartVoxelNode()=default
void SetMinEquivalentSliceNo(G4int pMin)
std::size_t GetNoContained() const
G4int GetMinEquivalentSliceNo() const