Geant4 Cross Reference |
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 /* 27 * File: G4TableTemplate.hh 28 * Author: B. Wendt (wendbryc@isu.edu) 29 * 30 * Created on August 2, 2011, 10:21 AM 31 */ 32 33 #ifndef G4TABLETEMPLATE_HH 34 #define G4TABLETEMPLATE_HH 35 36 #include "G4FFGDefaultValues.hh" 37 #include "globals.hh" 38 39 #include <vector> 40 41 /** G4TableTemplate is essentially a wrapper around a std::vector designed 42 * to work specifically with pointers. 43 */ 44 template<class T> 45 class G4TableTemplate 46 { 47 public: 48 /** Default constructor */ 49 G4TableTemplate() = default; 50 /** Adds a container to the table */ 51 void G4AddContainer(T* NewContainer); 52 /** Gets a pointer to the table */ 53 G4TableTemplate* G4GetTable(); 54 /** Retrieve a container from the table */ 55 T* G4GetContainer(unsigned int WhichContainer); 56 /** Create a new blank container */ 57 T* G4GetNewContainer(); 58 /** Create a new container that is constructed with a G4int */ 59 T* G4GetNewContainer(G4int DefaultValue); 60 /** Get the number of elements in the table */ 61 G4long G4GetNumberOfElements(); 62 63 private: 64 std::vector<T*> ContainerTable_; 65 66 public: 67 ~G4TableTemplate(); 68 }; 69 70 template<class T> 71 void G4TableTemplate<T>::G4AddContainer(T* NewContainer) 72 { 73 ContainerTable_.push_back(NewContainer); 74 } 75 76 template<class T> 77 G4TableTemplate<T>* G4TableTemplate<T>::G4GetTable() 78 { 79 return this; 80 } 81 82 template<class T> 83 T* G4TableTemplate<T>::G4GetContainer(unsigned int WhichContainer) 84 { 85 if (WhichContainer < ContainerTable_.size()) { 86 return ContainerTable_[WhichContainer]; 87 } 88 89 return nullptr; 90 } 91 92 template<class T> 93 T* G4TableTemplate<T>::G4GetNewContainer() 94 { 95 ContainerTable_.push_back(new T); 96 97 return ContainerTable_.back(); 98 } 99 100 template<class T> 101 T* G4TableTemplate<T>::G4GetNewContainer(G4int DefaultValue) 102 { 103 ContainerTable_.push_back(new T(DefaultValue)); 104 105 return ContainerTable_.back(); 106 } 107 108 template<class T> 109 G4long G4TableTemplate<T>::G4GetNumberOfElements() 110 { 111 return ContainerTable_.size(); 112 } 113 114 template<class T> 115 G4TableTemplate<T>::~G4TableTemplate() 116 { 117 for (unsigned int i = 0; i < ContainerTable_.size(); i++) { 118 delete ContainerTable_[i]; 119 } 120 } 121 122 #endif /* G4TABLETEMPLATE_HH */ 123