Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/interfaces/core/src/G4UIArrayString.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /interfaces/core/src/G4UIArrayString.cc (Version 11.3.0) and /interfaces/core/src/G4UIArrayString.cc (Version 9.0.p1)


  1 //                                                  1 
  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 //                                                
 27 //                                                
 28                                                   
 29 #include "G4UIArrayString.hh"                     
 30                                                   
 31 #include <iomanip>                                
 32                                                   
 33 static const char strESC = '\033';                
 34                                                   
 35 //////////////////////////////////////////////    
 36 G4UIArrayString::G4UIArrayString(const G4Strin    
 37 //////////////////////////////////////////////    
 38 {                                                 
 39   nElement = 0;                                   
 40   nColumn = 5;  // temporal assignment            
 41                                                   
 42   G4String astream = G4StrUtil::strip_copy(str    
 43                                                   
 44   // tokenize...                                  
 45   std::size_t indx = 0;                           
 46   while (true) {                                  
 47     std::size_t jc = astream.find(' ', indx);     
 48     nElement++;                                   
 49     if (jc == G4String::npos) break;              
 50     jc++;  // fix a tiny mistake...               
 51     for (; jc < astream.length();) {  // skip     
 52       if (astream[(G4int)jc] == ' ')              
 53         jc++;                                     
 54       else                                        
 55         break;                                    
 56     }                                             
 57     indx = jc;                                    
 58   }                                               
 59                                                   
 60   // allocate string array                        
 61   stringArray = new G4String[nElement];           
 62                                                   
 63   // push...                                      
 64   indx = 0;                                       
 65   for (std::size_t i = 0; i < nElement; ++i) {    
 66     std::size_t jc = astream.find(' ', indx);     
 67     if (jc != G4String::npos)                     
 68       stringArray[i] = astream.substr(indx, jc    
 69     else {  // last token                         
 70       jc = astream.length() + 1;                  
 71       stringArray[i] = astream.substr(indx, jc    
 72     }                                             
 73     for (std::size_t j = 1; jc + j < astream.l    
 74       if (astream[G4int(jc + j)] == ' ')          
 75         jc++;                                     
 76       else                                        
 77         break;                                    
 78     }                                             
 79     indx = jc + 1;                                
 80   }                                               
 81 }                                                 
 82                                                   
 83 ///////////////////////////////////               
 84 G4UIArrayString::~G4UIArrayString()               
 85 ///////////////////////////////////               
 86 {                                                 
 87   delete[] stringArray;                           
 88 }                                                 
 89                                                   
 90 //////////////////////////////////////////////    
 91 G4String* G4UIArrayString::GetElement(G4int ic    
 92 //////////////////////////////////////////////    
 93 {                                                 
 94   if (icol < 1 || irow < 1)  // offset of colu    
 95     G4cerr << "G4UIArrayString: overrange" <<     
 96   if (icol > (G4int)nColumn) G4cerr << "G4UIAr    
 97                                                   
 98   std::size_t jq = (irow - 1) * nColumn + icol    
 99   if (jq > nElement) G4cerr << "G4UIArrayStrin    
100                                                   
101   jq--;                                           
102   return &stringArray[jq];                        
103 }                                                 
104                                                   
105 ////////////////////////////////////////////      
106 G4int G4UIArrayString::GetNRow(G4int icol) con    
107 ////////////////////////////////////////////      
108 {                                                 
109   G4int ni;                                       
110   if (nElement % nColumn == 0)                    
111     ni = G4int(nElement / nColumn);               
112   else                                            
113     ni = G4int(nElement / nColumn) + 1;           
114                                                   
115   G4int nn = G4int(nElement % nColumn);           
116   if (nn == 0) nn = (G4int)nColumn;               
117                                                   
118   if (icol <= nn) return ni;                      
119   return ni - 1;                                  
120 }                                                 
121                                                   
122 //////////////////////////////////////////////    
123 G4int G4UIArrayString::GetNField(G4int icol) c    
124 //////////////////////////////////////////////    
125 {                                                 
126   std::size_t maxWidth = 0;                       
127   for (G4int iy = 1; iy <= GetNRow(icol); ++iy    
128     std::size_t ilen = GetElement(icol, iy)->l    
129     // care for color code                        
130     // if(GetElement(icol,iy)-> index(strESC,0    
131     // if(strESC == (*GetElement(icol,iy))[0]     
132     const char tgt = (*GetElement(icol, iy))[(    
133     if (strESC == tgt) {                          
134       ilen -= 5;                                  
135     }                                             
136     if (ilen > maxWidth) maxWidth = ilen;         
137   }                                               
138                                                   
139   return (G4int)maxWidth;                         
140 }                                                 
141                                                   
142 //////////////////////////////////////////////    
143 G4int G4UIArrayString::CalculateColumnWidth()     
144 //////////////////////////////////////////////    
145 {                                                 
146   G4int totalWidth = 0;                           
147                                                   
148   for (G4int ix = 1; ix <= (G4int)nColumn; ++i    
149     totalWidth += GetNField(ix);                  
150   }                                               
151                                                   
152   const G4int nwSpace = 2;                        
153   totalWidth += (nColumn - 1) * nwSpace;  // f    
154                                                   
155   return totalWidth;                              
156 }                                                 
157                                                   
158 //////////////////////////////////////            
159 void G4UIArrayString::Show(G4int ncol)            
160 //////////////////////////////////////            
161 {                                                 
162   // calculate #colums in need...                 
163   while (CalculateColumnWidth() < ncol) {         
164     nColumn++;                                    
165   }                                               
166   while (CalculateColumnWidth() > ncol && nCol    
167     nColumn--;                                    
168   }                                               
169                                                   
170   for (G4int iy = 1; iy <= GetNRow(1); iy++) {    
171     G4int nc = (G4int)nColumn;                    
172     if (iy == GetNRow(1)) {  // last row          
173       nc = G4int(nElement % nColumn);             
174       if (nc == 0) nc = (G4int)nColumn;           
175     }                                             
176     for (G4int ix = 1; ix <= nc; ++ix) {          
177       G4String word = GetElement(ix, iy)->data    
178                                                   
179       // care for color code                      
180       G4String colorWord;                         
181       const char tgt = word[(std::size_t)0];      
182       if (strESC == tgt) {                        
183         colorWord = word.substr(0, 5);            
184         word.erase(0, 5);                         
185       }                                           
186       if (! colorWord.empty()) G4cout << color    
187                                                   
188       G4cout << std::setiosflags(std::ios::lef    
189              << std::flush;                       
190       // against problem w/ g++ iostream          
191       if (ix != nc)                               
192         G4cout << "  " << std::flush;             
193       else                                        
194         G4cout << G4endl;                         
195     }                                             
196   }                                               
197 }                                                 
198