Geant4  10.02.p01
G4AttCheck.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 //
27 // $Id: G4AttCheck.hh 69802 2013-05-15 14:52:57Z gcosmo $
28 
29 #ifndef G4ATTCHECK_HH
30 #define G4ATTCHECK_HH
31 
32 // Class Description:
33 //
34 // @class G4AttCheck
35 //
36 // @brief Checks G4AttValue's and their corresponding G4AttDef map.
37 //
38 // Usage (a): G4AttCheck(values,definitions);
39 // or (b): G4cout << G4AttCheck(values,definitions) << G4endl;
40 //
41 // For further details, see the HepRep home page at http://heprep.freehep.org
42 //
43 // @author J.Allison
44 // @author J.Perl
45 // Class Description - End:
46 
47 #include "globals.hh"
48 
49 #include <set>
50 #include <vector>
51 #include <map>
52 #include <iostream>
53 
54 class G4AttValue;
55 class G4AttDef;
56 
57 class G4AttCheck {
58 
59 public: // With description
60 
62  (const std::vector<G4AttValue>* values,
63  const std::map<G4String,G4AttDef>* definitions);
64 
65  ~G4AttCheck();
66 
67  const std::vector<G4AttValue>* GetAttValues() const {
68  return fpValues;
69  }
70 
71  const std::map<G4String,G4AttDef>* GetAttDefs() const {
72  return fpDefinitions;
73  }
74 
75  G4bool Check(const G4String& leader = "") const;
76  // Check only. Silent unless error - then G4cerr. Returns error.
77  // Provide leader, e.g., name of calling function.
78 
80  (std::vector<G4AttValue>* standardValues,
81  std::map<G4String,G4AttDef>* standardDefinitions)
82  const;
83  // Places standard versions in provided containers and returns error.
84 
85  friend std::ostream& operator<< (std::ostream&, const G4AttCheck&);
86 
87 private:
88 
89  void AddValuesAndDefs
90  (std::vector<G4AttValue>* newValues,
91  std::map<G4String,G4AttDef>* newDefinitions,
92  const G4String& oldName,
93  const G4String& name,
94  const G4String& value,
95  const G4String& extra,
96  const G4String& description = "") const; // Utility function for Standard.
97 
98  void Init(); // Initialises maps and sets
99 
100  const std::vector<G4AttValue>* fpValues;
101  const std::map<G4String,G4AttDef>* fpDefinitions;
102 
103  static G4ThreadLocal G4bool fFirst; // Flag for initialising the following containers.
104  static G4ThreadLocal std::set<G4String> *fUnitCategories; // Set of legal unit categories.
105  static G4ThreadLocal std::map<G4String,G4String> *fStandardUnits; // Standard units.
106  static G4ThreadLocal std::set<G4String> *fCategories; // Set of legal categories.
107  static G4ThreadLocal std::set<G4String> *fUnits; // Set of legal units.
108  static G4ThreadLocal std::set<G4String> *fValueTypes; // Set of legal value types.
109 };
110 
111 #endif //G4ATTCHECK_HH
static G4ThreadLocal G4bool fFirst
Definition: G4AttCheck.hh:103
const std::map< G4String, G4AttDef > * GetAttDefs() const
Definition: G4AttCheck.hh:71
G4AttCheck(const std::vector< G4AttValue > *values, const std::map< G4String, G4AttDef > *definitions)
Definition: G4AttCheck.cc:52
const std::vector< G4AttValue > * fpValues
Definition: G4AttCheck.hh:100
G4String name
Definition: TRTMaterials.hh:40
friend std::ostream & operator<<(std::ostream &, const G4AttCheck &)
Definition: G4AttCheck.cc:249
const std::vector< G4AttValue > * GetAttValues() const
Definition: G4AttCheck.hh:67
const std::map< G4String, G4AttDef > * fpDefinitions
Definition: G4AttCheck.hh:101
G4bool Standard(std::vector< G4AttValue > *standardValues, std::map< G4String, G4AttDef > *standardDefinitions) const
Definition: G4AttCheck.cc:351
#define G4ThreadLocal
Definition: tls.hh:89
static G4ThreadLocal std::set< G4String > * fValueTypes
Definition: G4AttCheck.hh:108
void AddValuesAndDefs(std::vector< G4AttValue > *newValues, std::map< G4String, G4AttDef > *newDefinitions, const G4String &oldName, const G4String &name, const G4String &value, const G4String &extra, const G4String &description="") const
Definition: G4AttCheck.cc:332
static G4ThreadLocal std::map< G4String, G4String > * fStandardUnits
Definition: G4AttCheck.hh:105
bool G4bool
Definition: G4Types.hh:79
static G4ThreadLocal std::set< G4String > * fCategories
Definition: G4AttCheck.hh:106
static G4ThreadLocal std::set< G4String > * fUnits
Definition: G4AttCheck.hh:107
G4bool Check(const G4String &leader="") const
Definition: G4AttCheck.cc:123
void Init()
Definition: G4AttCheck.cc:114
static G4ThreadLocal std::set< G4String > * fUnitCategories
Definition: G4AttCheck.hh:104