Geant4 Cross Reference |
>> 1 // This code implementation is the intellectual property of >> 2 // the GEANT4 collaboration. >> 3 // >> 4 // By copying, distributing or modifying the Program (or any work >> 5 // based on the Program) you indicate your acceptance of this statement, >> 6 // and all its terms. >> 7 // >> 8 // $Id: G4DataVector.hh,v 1.7 2001/03/06 15:56:47 gcosmo Exp $ >> 9 // GEANT4 tag $Name: geant4-03-01 $ >> 10 // >> 11 // >> 12 // ------------------------------------------------------------ >> 13 // GEANT 4 class header file >> 14 // ------------------------------------------------------------ >> 15 // >> 16 // Class Description: >> 17 // >> 18 // Utility class providing similar behaviour of vector<G4double>. >> 19 // It includes additional methods for compatibility with Rogue Wave >> 20 // collection. 1 // 21 // 2 // ******************************************* << 3 // * License and Disclaimer << 4 // * << 5 // * The Geant4 software is copyright of th << 6 // * the Geant4 Collaboration. It is provided << 7 // * conditions of the Geant4 Software License << 8 // * LICENSE and available at http://cern.ch/ << 9 // * include a list of copyright holders. << 10 // * << 11 // * Neither the authors of this software syst << 12 // * institutes,nor the agencies providing fin << 13 // * work make any representation or warran << 14 // * regarding this software system or assum << 15 // * use. Please see the license in the file << 16 // * for the full disclaimer and the limitatio << 17 // * << 18 // * This code implementation is the result << 19 // * technical work of the GEANT4 collaboratio << 20 // * By using, copying, modifying or distri << 21 // * any work based on the software) you ag << 22 // * use in resulting scientific publicati << 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* << 25 // << 26 // G4DataVector << 27 // << 28 // Class description: << 29 // << 30 // Utility class providing similar behaviour o << 31 // It includes additional methods for compatib << 32 // collection. << 33 << 34 // Author: H.Kurashige, 18 September 2001 << 35 // ------------------------------------------- << 36 #ifndef G4DataVector_hh << 37 #define G4DataVector_hh 1 << 38 << 39 #include <fstream> << 40 #include <iostream> << 41 #include <vector> << 42 22 43 #include "G4ios.hh" << 23 #ifndef G4DataVector_h >> 24 #define G4DataVector_h 1 >> 25 44 #include "globals.hh" 26 #include "globals.hh" >> 27 #include "g4std/vector" 45 28 46 class G4DataVector : public std::vector<G4doub << 29 class G4DataVector : public G4std::vector<G4double> 47 { 30 { 48 public: << 49 G4DataVector() = default; << 50 // Default constructor. << 51 << 52 G4DataVector(const G4DataVector&) = default; << 53 G4DataVector(G4DataVector&&) = default; << 54 // Default copy&move constructors. << 55 31 56 explicit G4DataVector(std::size_t cap); << 32 public: // with description 57 // Constructor given a 'capacity' defining t << 58 33 59 G4DataVector(std::size_t cap, G4double value << 34 G4DataVector(); 60 // Constructor given a 'capacity' defining t << 35 // Default constructor. 61 // and initialising them to 'value'. << 62 36 63 virtual ~G4DataVector() = default; << 37 G4DataVector(size_t capacity); 64 // Empty destructor << 38 // Constructor given a 'capacity' defining the initial number of elements. 65 39 66 G4DataVector& operator=(const G4DataVector&) << 40 virtual ~G4DataVector(){;} 67 G4DataVector& operator=(G4DataVector&&) = de << 41 // Empty destructor 68 // Default copy&move assignment operators. << 69 42 70 inline void insertAt(std::size_t, const G4do << 43 inline void insertAt(size_t, const G4double&); 71 // Insert an element at given position << 44 // Insert an element at given position 72 45 73 inline std::size_t index(const G4double&) co << 46 inline size_t index(const G4double&); 74 // Returns back index of the element same as << 47 // Returns back index of the element same as given value 75 48 76 inline G4bool contains(const G4double&) cons 49 inline G4bool contains(const G4double&) const; 77 // Returns 'true' if it contains the element << 50 // Returns 'true' if it contains the element same as given value 78 51 79 inline G4bool remove(const G4double&); 52 inline G4bool remove(const G4double&); 80 // Removes the first element same as given v << 53 // Removes the first element same as given value >> 54 >> 55 inline size_t removeAll(const G4double&); >> 56 // Remove all elements same as given value >> 57 }; >> 58 >> 59 inline >> 60 G4DataVector::G4DataVector() >> 61 : G4std::vector<G4double>() >> 62 { >> 63 } 81 64 82 inline std::size_t removeAll(const G4double& << 65 inline 83 // Remove all elements same as given value << 66 G4DataVector::G4DataVector(size_t capacity) >> 67 : G4std::vector<G4double>(capacity) >> 68 { >> 69 } 84 70 85 enum << 71 inline 86 { << 72 void G4DataVector::insertAt(size_t pos, const G4double& a) 87 T_G4DataVector = 100 << 73 { 88 }; << 74 iterator i = begin(); >> 75 for (size_t ptn=0; (ptn<pos)&&(i!=end()); i++,ptn++); >> 76 if (i==end()) >> 77 push_back(a); >> 78 else >> 79 insert(i,a); >> 80 } >> 81 >> 82 inline >> 83 size_t G4DataVector::index(const G4double& a) >> 84 { >> 85 size_t ptn = 0; >> 86 for (iterator i=begin(); i!=end(); i++,ptn++) >> 87 if (*i==a) return ptn; 89 88 90 G4bool Store(std::ofstream& fOut, G4bool asc << 89 return (ptn=~(size_t)0); 91 G4bool Retrieve(std::ifstream& fIn, G4bool a << 90 } 92 // To store/retrieve persistent data to/from << 93 91 94 friend std::ostream& operator<<(std::ostream << 92 inline 95 }; << 93 G4bool G4DataVector::contains(const G4double& a) const >> 94 { >> 95 for (const_iterator i=begin(); i!=end(); i++) >> 96 if (*i==a) return true; >> 97 >> 98 return false; >> 99 } >> 100 >> 101 inline >> 102 G4bool G4DataVector::remove(const G4double& a) >> 103 { >> 104 G4bool found =false; >> 105 >> 106 for (iterator i=begin(); i!=end(); i++){ >> 107 if (*i==a) { >> 108 erase(i); >> 109 found = true; >> 110 break; >> 111 } >> 112 } >> 113 return found; >> 114 } >> 115 >> 116 inline >> 117 size_t G4DataVector::removeAll(const G4double& a) >> 118 { >> 119 size_t ptn=0; 96 120 97 #include "G4DataVector.icc" << 121 for (iterator i=begin(); i!=end(); i++){ >> 122 if (*i==a) { >> 123 erase(i); >> 124 ptn++; >> 125 i--; >> 126 } >> 127 } >> 128 return ptn; >> 129 } 98 130 99 #endif 131 #endif 100 132