Geant4  10.03.p01
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
G4KDMap.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 // Author: Mathieu Karamitros
27 
28 // The code is developed in the framework of the ESA AO7146
29 //
30 // We would be very happy hearing from you, send us your feedback! :)
31 //
32 // In order for Geant4-DNA to be maintained and still open-source,
33 // article citations are crucial.
34 // If you use Geant4-DNA chemistry and you publish papers about your software,
35 // in addition to the general paper on Geant4-DNA:
36 //
37 // Int. J. Model. Simul. Sci. Comput. 1 (2010) 157–178
38 //
39 // we would be very happy if you could please also cite the following
40 // reference papers on chemistry:
41 //
42 // J. Comput. Phys. 274 (2014) 841-882
43 // Prog. Nucl. Sci. Tec. 2 (2011) 503-508
44 
45 #ifndef G4ITMAPROOM_HH
46 #define G4ITMAPROOM_HH
47 
48 #include <map>
49 //#include <unordered_map>
50 #include <vector>
51 #include <deque>
52 #include <cmath>
53 #include <iostream>
54 
55 class G4KDNode_Base;
56 
58 {
59 public :
60  __1DSortOut(size_t dimension);
61  __1DSortOut(const __1DSortOut& right);
62  int GetDimension();
63  G4KDNode_Base* GetMidle(size_t& /*G4KDNode_deque*/);
64 
65  std::deque<G4KDNode_Base*>::iterator Insert(G4KDNode_Base*);
67  void Sort();
68  void Erase(std::deque<G4KDNode_Base*>::iterator &);
69  size_t Size()
70  {
71  return fContainer.size();
72  }
73 
74 protected :
75  struct sortOutNDim
76  {
77  sortOutNDim( size_t dimension)
78  {
79  fDimension = dimension;
80  }
81  bool operator() (G4KDNode_Base* const& lhs, G4KDNode_Base* const& rhs);
82  size_t fDimension;
83  };
84 
85  std::deque<G4KDNode_Base*> fContainer;
87 };
88 
89 class G4KDMap
90 {
91 public:
92  G4KDMap(size_t dimensions): fSortOut(dimensions, __1DSortOut(dimensions))
93  {
94  fIsSorted = false;
95 // for(size_t i = 0 ; i < dimensions ; i++)
96 // {
97 // fSortOut[i] = new __1DSortOut(i);
98 // }
99  }
100 
101  void Insert(G4KDNode_Base* pos);
102  void Sort();
103 
104  G4KDNode_Base* PopOutMiddle(size_t dimension);
105  size_t GetDimension()
106  {
107  return fSortOut.size();
108  }
109 
110  size_t GetSize()
111  {
112  return fMap.size();
113  }
114 
115 private:
116  bool fIsSorted;
117  std::vector<__1DSortOut> fSortOut;
118  std::map<G4KDNode_Base*, std::vector<std::deque<G4KDNode_Base*>::iterator>> fMap;
119 
120  // A mettre directement dans G4KDNode
121 };
122 
123 
124 #endif // G4ITMAPROOM_HH
std::deque< G4KDNode_Base * > fContainer
Definition: G4KDMap.hh:85
size_t GetSize()
Definition: G4KDMap.hh:110
sortOutNDim(size_t dimension)
Definition: G4KDMap.hh:77
G4KDNode_Base * PopOutMiddle(size_t dimension)
Definition: G4KDMap.cc:138
void Sort()
Definition: G4KDMap.cc:197
G4KDNode_Base * PopOutMiddle()
Definition: G4KDMap.cc:68
bool operator()(G4KDNode_Base *const &lhs, G4KDNode_Base *const &rhs)
Definition: G4KDMap.cc:35
size_t GetDimension()
Definition: G4KDMap.hh:105
void Erase(std::deque< G4KDNode_Base * >::iterator &)
Definition: G4KDMap.cc:85
__1DSortOut(size_t dimension)
Definition: G4KDMap.cc:41
sortOutNDim fSortOutNDim
Definition: G4KDMap.hh:86
G4KDMap(size_t dimensions)
Definition: G4KDMap.hh:92
size_t Size()
Definition: G4KDMap.hh:69
std::deque< G4KDNode_Base * >::iterator Insert(G4KDNode_Base *)
Definition: G4KDMap.cc:63
int GetDimension()
Definition: G4KDMap.cc:51
G4KDNode_Base * GetMidle(size_t &)
Definition: G4KDMap.cc:56
void Insert(G4KDNode_Base *pos)
Definition: G4KDMap.cc:90
void Sort()
Definition: G4KDMap.cc:80
static const G4double pos