Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // G4UIaliasList << 27 // 23 // 28 // Author: M.Asai, 1 October 2001 << 24 // $Id: G4UIaliasList.cc,v 1.5 2002/04/26 22:03:35 asaim Exp $ 29 // ------------------------------------------- << 25 // GEANT4 tag $Name: geant4-08-00 $ >> 26 // 30 27 31 #include "G4UIaliasList.hh" 28 #include "G4UIaliasList.hh" 32 << 33 #include "G4ios.hh" 29 #include "G4ios.hh" 34 30 35 // ------------------------------------------- << 31 G4UIaliasList::G4UIaliasList() >> 32 { } >> 33 >> 34 G4UIaliasList::~G4UIaliasList() >> 35 { >> 36 G4int i; >> 37 G4int n_treeEntry = alias.size(); >> 38 for( i=0; i < n_treeEntry; i++ ) >> 39 { delete alias[i]; >> 40 delete value[i]; } >> 41 } >> 42 >> 43 G4int G4UIaliasList::operator==(const G4UIaliasList &right) const >> 44 { >> 45 return ( this == &right ); >> 46 } >> 47 >> 48 G4int G4UIaliasList::operator!=(const G4UIaliasList &right) const >> 49 { >> 50 return ( this != &right ); >> 51 } >> 52 36 void G4UIaliasList::AddNewAlias(const char* al 53 void G4UIaliasList::AddNewAlias(const char* aliasName, const char* aliasValue) 37 { 54 { 38 if (FindAlias(aliasName) != nullptr) { << 55 if(FindAlias(aliasName)) 39 G4cerr << "Alias <" << aliasName << "> alr << 56 { >> 57 G4cerr << "Alias <" << aliasName << "> already exist. Command ignored." >> 58 << G4endl; 40 return; 59 return; 41 } 60 } 42 aliases.emplace(aliasName, aliasValue); << 61 G4String* newAlias = new G4String(aliasName); >> 62 alias.push_back(newAlias); >> 63 G4String* newValue = new G4String(aliasValue); >> 64 value.push_back(newValue); 43 } 65 } 44 66 45 // ------------------------------------------- << 46 void G4UIaliasList::RemoveAlias(const char* al 67 void G4UIaliasList::RemoveAlias(const char* aliasName) 47 { 68 { 48 if (FindAlias(aliasName) == nullptr) { << 69 G4int i = FindAliasID(aliasName); 49 G4cerr << "Alias <" << aliasName << "> doe << 70 if(i<0) >> 71 { >> 72 G4cerr << "Alias <" << aliasName << "> does not exist. Command ignored." >> 73 << G4endl; 50 return; 74 return; 51 } 75 } 52 aliases.erase(aliasName); << 76 alias.erase(alias.begin()+i); >> 77 value.erase(value.begin()+i); 53 } 78 } 54 79 55 // ------------------------------------------- << 56 void G4UIaliasList::ChangeAlias(const char* al 80 void G4UIaliasList::ChangeAlias(const char* aliasName, const char* aliasValue) 57 { 81 { 58 if (FindAlias(aliasName) == nullptr) { << 82 G4int i = FindAliasID(aliasName); 59 AddNewAlias(aliasName, aliasValue); << 83 if(i<0) >> 84 { >> 85 AddNewAlias(aliasName,aliasValue); 60 return; 86 return; 61 } 87 } 62 aliases[aliasName] = aliasValue; << 88 *(value[i]) = aliasValue; >> 89 } >> 90 >> 91 G4String* G4UIaliasList::FindAlias(const char* aliasName) >> 92 { >> 93 G4int i = FindAliasID(aliasName); >> 94 if(i<0) >> 95 { return 0; } >> 96 return value[i]; 63 } 97 } 64 98 65 // ------------------------------------------- << 99 G4int G4UIaliasList::FindAliasID(const char* aliasName) 66 const G4String* G4UIaliasList::FindAlias(const << 67 { 100 { 68 auto it = aliases.find(aliasName); << 101 G4int i_entry = alias.size(); 69 return (it == aliases.end()) ? nullptr : &(i << 102 for(G4int i=0;i<i_entry;i++) >> 103 { if(*(alias[i])==aliasName) return i; } >> 104 return -1; 70 } 105 } 71 106 72 // ------------------------------------------- << 107 void G4UIaliasList::List() 73 void G4UIaliasList::List() const << 74 { 108 { 75 // Aliases are already sorted by std::less<G << 109 G4int i_entry = alias.size(); 76 for (const auto& [a, v] : aliases) { << 110 for(G4int i1=0;i1<i_entry-1;i1++) 77 G4cout << " " << a << " : " << v << G4end << 111 for(G4int i2=i1+1;i2<i_entry;i2++) >> 112 { >> 113 if(*(alias[i1])>*(alias[i2])) >> 114 { >> 115 G4String* tmp = alias[i1]; >> 116 alias[i1] = alias[i2]; >> 117 alias[i2] = tmp; >> 118 tmp = value[i1]; >> 119 value[i1] = value[i2]; >> 120 value[i2] = tmp; >> 121 } 78 } 122 } >> 123 >> 124 for(G4int i=0;i<i_entry;i++) >> 125 { G4cout << " " << *(alias[i]) << " : " << *(value[i]) << G4endl; } 79 } 126 } >> 127 80 128