UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
cust_print.H
1 /* cust_print.H */
2 /* $Id: cust_print.H,v 1.5 2009/04/17 11:32:40 ibadm Exp $ */
3 #ifdef __CubeStorage_H
4 
5 
10 template<class T>
11 void
12 CubeStorage<T>::print_index (int* i) const
13 {
14  int dim_i;
15 
16  if(NULL == i)
17  Throw(ERROR__NULL);
18 
19  for(dim_i = 0; dim_i < nDim; ++dim_i)
20  {
21  if(0 == dim_i)
22  fputc('[', fpLog);
23  else
24  fputc(' ', fpLog);
25  if(i[dim_i] < 0)
26  fputc('X', fpLog);
27  else
28  fprintf(fpLog, "%d", i[dim_i]);
29  }
30  fputc(']', fpLog);
31 }
32 
33 
38 template<class T>
39 void
40 CubeStorage<T>::print_direction (FILE* fp, const char* format)
41 {
42  fpLog = fp;
43 
44  if(NULL == format)
45  szFormat = NULL;
46  else
47  {
48  szFormat = new char[1 + strlen(format)];
49  strcpy(szFormat, format);
50  }
51 }
52 
53 
58 template<class T>
59 void
61 {
62  fprintf(fpLog, "CubeStorage(this=%p)"\
63  "\n\titem size = %lu bytes"\
64  "\n\titem order ala %s"\
65  "\n\tnumber of dimensions = %d"\
66  "\n\tdimensions are = ",
67  this, sizeof(T),
68  eItemOrder==AlaC? "C/C++": (eItemOrder==AlaFortran
69  ? "Fortran"
70  : "???"),
71  nDim);
72  print_index(pDim);
73 #ifdef CuSt_AtomItem
74  fprintf(fpLog, "\n\tprintf format = \"%s\"\n",
75  szFormat? szFormat: "(nil)");
76 #else
77  fprintf(fpLog, "\n\tnot a printable due to undefined CuSt_AtomItem\n");
78 #endif /* CuSt_AtomItem */
79 }
80 
81 
86 template<class T>
87 void
88 CubeStorage<T>::print_cell (int* i) const
89 {
90 #ifdef CuSt_AtomItem
91  fprintf(fpLog, szFormat, get(i));
92  fputc('\n', fpLog);
93 #else
94  fprintf(fpLog, "print_cell(this=%p) at ", this);
95  print_index(i);
96  fputc('\n', fpLog);
97 #endif /* CuSt_AtomItem */
98 }
99 
100 
106 template<class T>
107 void
108 CubeStorage<T>::print_vector (int d, int* i) const
109 {
110 #ifdef CuSt_AtomItem
111  int j;
112  int stored_id = i[d];
113 
114  for(j = 0; j < dim(d); ++j)
115  {
116  i[d] = j;
117  fprintf(fpLog, szFormat, get(i));
118  }
119 
120  fputc('\n', fpLog);
121  i[d] = stored_id;
122 #else
123  fprintf(fpLog, "print_vector(this=%p, %d) at ", this, d);
124  print_index(i);
125  fputc('\n', fpLog);
126 #endif /* CuSt_AtomItem */
127 }
128 
129 
135 template<class T>
136 void
137 CubeStorage<T>::print_matrix (int dv, int dh, int* i) const
138 {
139 #ifdef CuSt_AtomItem
140  int jh, jv;
141  int stored_idh = i[dh];
142  int stored_idv = i[dv];
143 
144  for(jv = 0; jv < dim(dv); ++jv)
145  {
146  i[dv] = jv;
147  for(jh = 0; jh < dim(dh); ++jh)
148  {
149  i[dh] = jh;
150  fprintf(fpLog, szFormat, get(i));
151  }
152  fputc('\n', fpLog);
153  }
154 
155  i[dh] = stored_idh;
156  i[dv] = stored_idv;
157 #else
158  fprintf(fpLog, "print_matrix(this=%p, dv=%d, dh=%d) at ", this, dv, dh);
159  print_index(i);
160  fputc('\n', fpLog);
161 #endif /* CuSt_AtomItem */
162 }
163 
164 
165 #if 0
166 
170 template<class T>
171 void
173 {
174  int dim_i, dim_j, *i = new int[nDim];
175  Logic good = TRUE;
176 
177  for(dim_i = 0; dim_i < nDim; ++dim_i)
178  i[dim_i] = 0;
179 
180  print_index(i);
181 
182  while(good)
183  {
184  /* print item */
185  fputc(' ', fpLog);
186  fprintf(fpLog, szFormat, get(i));
187 
188  /* flush flag of allowed index */
189  good = FALSE;
190 
191  /* increment index */
192  for(dim_i = nDim - 1; dim_i >= 0; --dim_i)
193  if(i[dim_i] < pDim[dim_i] - 1)
194  {
195  ++i[dim_i];
196  good = TRUE;
197  break;
198  }
199  else
200  {
201  i[dim_i] = 0;
202  fputc('\n', fpLog);
203  print_index(i);
204  }
205  }
206 
207  fputc('\n', fpLog);
208  delete[] i;
209 }
210 
211 
216 template<class T>
217 void
218 CubeStorage<T>::print_slice (int i0, ...) const
219 {
220  int dim_i, *iFlag = new int[nDim];
221 
222  /* Translate int i0, ... to iFlag[nDim] */
223  iFlag[0] = i0;
224  va_list val;
225  va_start(val, i0);
226  for(dim_i = 1; dim_i < nDim; ++i)
227  iFlag[dim_i] = va_arg(val, int);
228  va_end(val);
229 
230  int dim_j, dim_i, i = new int[nDim];
231  Logic good = TRUE;
232 
233  for(dim_i = 0; dim_i < nDim; ++dim_i)
234  if(iFlag[dim_i] < 0)
235  i[dim_i] = 0;
236  else
237  i[dim_i] = iFlag[dim_i];
238 
239  while(good)
240  {
241  /* print item */
242  print_index(i);
243  fputc(' ', fpLog);
244  fprintf(fpLog, szFormat, get(i));
245 
246  /* flush flag of allowed index */
247  good = FALSE;
248 
249  /* increment index */
250  for(dim_i = nDim - 1; dim_i >= 0; --dim_i)
251  if(i[dim_i] < pDim[dim_i] - 1)
252  {
253  ++i[dim_i];
254  good = TRUE;
255  break;
256  }
257  else
258  {
259  i[dim_i] = 0;
260  fputc('\n', fpLog);
261  }
262  }
263 
264  delete[] i;
265  delete[] iFlag;
266 }
267 #endif
268 
269 
270 #endif /* cust_print.H */
Definition: CubeStorage.H:48
virtual void print_direction(FILE *fp, const char *format)