SST/macro
dumpi_type_io.h
Go to the documentation of this file.
1 /*
2  * This file is part of SST/macroscale:
3  * The macroscale architecture simulator from the SST suite.
4  * Copyright (c) 2009-2010 Sandia Corporation.
5  * This software is distributed under the BSD License.
6  * Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
7  * the U.S. Government retains certain rights in this software.
8  * For more information, see the LICENSE file in the top
9  * SST/macroscale directory.
10  */
11 
12 #ifndef SSTMAC_SOFTWARE_SKELETONS_UNDUMPI_DUMPITYPEIO_H_INCLUDED
13 #define SSTMAC_SOFTWARE_SKELETONS_UNDUMPI_DUMPITYPEIO_H_INCLUDED
14 
15 #include <dumpi/common/argtypes.h>
16 #include <iostream>
17 #include <sstream>
18 #include <iterator>
19 #include <algorithm>
20 #include <iomanip>
21 
22 namespace sstmac {
23 namespace sw {
24 
25 /*
26  * Allow C++ IO on DUMPI types.
27  */
28 
29 /**
30  * Print status info.
31  */
32 inline
33 std::ostream& operator<<(std::ostream &os, const dumpi_status& status)
34 {
35  if(&status) {
36  os << "dumpi_status(";
37  os << "bytes=" << status.bytes << ", ";
38  os << "source=" << status.source << ", ";
39  os << "tag=" << status.tag << ", ";
40  os << "cancelled=" << status.cancelled << ", ";
41  os << "error=" << status.error << ")";
42  }
43  else {
44  os << "NULL";
45  }
46  return os;
47 }
48 
49 /**
50  * Dumpi timestamp.
51  */
52 inline
53 std::ostream& operator<<(std::ostream &os, const dumpi_clock &tt)
54 {
55  os << "dumpi_clock(" << tt.sec << "." << std::setw(8)
56  << std::setfill('0') << tt.nsec << ")";
57  return os;
58 }
59 
60 /**
61  * Dumpi time value.
62  */
63 inline
64 std::ostream& operator<<(std::ostream &os, const dumpi_time &tt)
65 {
66  os << "dumpi_time(start=" << tt.start << ", stop=" << tt.stop << ")";
67  return os;
68 }
69 
70 /**
71  * Namespace for internal utility print routines.
72  */
73 namespace P {
74 template <typename T>
75 std::string ints(int len, const T *arr)
76 {
77  if(arr) {
78  std::ostringstream oss;
79  oss << "[";
80  // This results in ICE in g++-4.0
81  //std::copy(arr, arr+len,
82  // typename std::ostream_iterator<T>(oss, ", "));
83  std::copy(arr, arr+len, std::ostream_iterator<T>(oss, ", "));
84  oss << "]";
85  return oss.str();
86  }
87  else {
88  return "NULL";
89  }
90 }
91 
92 template <typename T>
93 std::string ints(bool do_output, int len, const T *arr)
94 {
95  if(do_output) {
96  return ints(len, arr);
97  }
98  else {
99  return "<invalid>";
100  }
101 }
102 
103 template <typename T>
104 std::string ints2d(int xl, int yl, T **arr)
105 {
106  if(arr) {
107  std::ostringstream oss;
108  oss << "[";
109  for(int x = 0; x < xl; ++x) {
110  if(arr[x]) {
111  oss << ints(yl, arr[x]);
112  }
113  else {
114  oss << "NULL";
115  }
116  if(x < xl-1) {
117  oss << ", ";
118  }
119  }
120  oss << "]";
121  return oss.str();
122  }
123  else {
124  return "NULL";
125  }
126 }
127 
128 inline
129 std::string statuses(int len, const dumpi_status *statuses)
130 {
131  if(statuses) {
132  std::ostringstream oss;
133  oss << "[";
134  for(int i = 0; i < len; ++i) {
135  oss << (statuses+i);
136  if(i < len-1) {
137  oss << ", ";
138  }
139  }
140  oss << "]";
141  return oss.str();
142  }
143  else {
144  return "NULL";
145  }
146 }
147 
148 inline
149 std::string stringarray(int len, char **arr)
150 {
151  if(arr) {
152  std::ostringstream oss;
153  oss << "[";
154  for(int i = 0; i < len; ++i) {
155  oss << "\"" << arr[i] << "\"";
156  if(i < len-1) {
157  oss << ", ";
158  }
159  }
160  oss << "]";
161  return oss.str();
162  }
163  else {
164  return "NULL";
165  }
166 }
167 
168 inline
169 std::string stringarray(bool do_output, int len, char **arr)
170 {
171  if(do_output) {
172  return stringarray(len, arr);
173  }
174  else {
175  return "<invalid>";
176  }
177 }
178 
179 inline
180 std::string stringarraynull(char **arr)
181 {
182  if(arr) {
183  std::ostringstream oss;
184  oss << "[";
185  for(int i = 0; arr[i] != NULL; ++i) {
186  oss << "\"" << arr[i] << "\"";
187  if(arr[i+1] != NULL) {
188  oss << ", ";
189  }
190  }
191  oss << "]";
192  return oss.str();
193  }
194  else {
195  return "NULL";
196  }
197 }
198 
199 inline
200 std::string stringarraynull(bool do_output, char **arr)
201 {
202  if(do_output) {
203  return stringarraynull(arr);
204  }
205  else {
206  return "<invalid>";
207  }
208 }
209 
210 inline
211 std::string stringarraynull2d(bool do_output, int xl, char ***arr)
212 {
213  if(do_output) {
214  if(arr) {
215  std::ostringstream oss;
216  oss << "[";
217  for(int x = 0; x < xl; ++x) {
218  if(arr[x]) {
219  oss << stringarraynull(arr[x]);
220  }
221  else {
222  oss << "NULL";
223  }
224  if(x < xl-1) {
225  oss << ", ";
226  }
227  }
228  oss << "]";
229  return oss.str();
230  }
231  else {
232  return "NULL";
233  }
234  }
235  else {
236  return "<invalid>";
237  }
238 }
239 }
240 
241 /**
242  * C++ IO for a function call.
243  */
244 inline std::ostream& operator<<(std::ostream &os, const dumpi_func_call &dd)
245 {
246  if(&dd) {
247  os << "dumpi_func_call(fn=" << dd.fn << ")";
248  }
249  else {
250  os << "dumpi_func_call(NULL)";
251  }
252  return os;
253 }
254 
255 /**
256  * C++ IO for a send operation.
257  */
258 inline std::ostream& operator<<(std::ostream &os, const dumpi_send &dd)
259 {
260  os << "dumpi_send(";
261  if(&dd) {
262  /** Argument value before PMPI call */
263  os << "count=" << dd.count << ", ";
264  /** Argument value before PMPI call */
265  os << "datatype=" << dd.datatype << ", ";
266  /** Argument value before PMPI call */
267  os << "dest=" << dd.dest << ", ";
268  /** Argument value before PMPI call */
269  os << "tag=" << dd.tag << ", ";
270  /** Argument value before PMPI call */
271  os << "comm=" << dd.comm << ")";
272  }
273  else {
274  os << "NULL)";
275  }
276  return os;
277 }
278 /**
279  * C++ IO for a recv operation.
280  */
281 inline std::ostream& operator<<(std::ostream &os, const dumpi_recv &dd)
282 {
283  os << "dumpi_recv(";
284  if(&dd) {
285  /** Argument value before PMPI call */
286  os << "count=" << dd.count << ", ";
287  /** Argument value before PMPI call */
288  os << "datatype=" << dd.datatype << ", ";
289  /** Argument value before PMPI call */
290  os << "source=" << dd.source << ", ";
291  /** Argument value before PMPI call */
292  os << "tag=" << dd.tag << ", ";
293  /** Argument value before PMPI call */
294  os << "comm=" << dd.comm << ", ";
295  /** Argument value after PMPI call */
296  os << "status=" << *dd.status << ")";
297  }
298  else {
299  os << "NULL)";
300  }
301  return os;
302 }
303 /**
304  * C++ IO for a get_count operation.
305  */
306 inline std::ostream& operator<<(std::ostream &os, const dumpi_get_count &dd)
307 {
308  os << "dumpi_get_count(";
309  if(&dd) {
310  /** Argument value before PMPI call */
311  os << "status=" << *dd.status << ", ";
312  /** Argument value before PMPI call */
313  os << "datatype=" << dd.datatype << ", ";
314  /** Argument value after PMPI call */
315  os << "count=" << dd.count << ")";
316  }
317  else {
318  os << "NULL)";
319  }
320  return os;
321 }
322 /**
323  * C++ IO for a bsend operation.
324  */
325 inline std::ostream& operator<<(std::ostream &os, const dumpi_bsend &dd)
326 {
327  os << "dumpi_bsend(";
328  if(&dd) {
329  /** Argument value before PMPI call */
330  os << "count=" << dd.count << ", ";
331  /** Argument value before PMPI call */
332  os << "datatype=" << dd.datatype << ", ";
333  /** Argument value before PMPI call */
334  os << "dest=" << dd.dest << ", ";
335  /** Argument value before PMPI call */
336  os << "tag=" << dd.tag << ", ";
337  /** Argument value before PMPI call */
338  os << "comm=" << dd.comm << ")";
339  }
340  else {
341  os << "NULL)";
342  }
343  return os;
344 }
345 /**
346  * C++ IO for a ssend operation.
347  */
348 inline std::ostream& operator<<(std::ostream &os, const dumpi_ssend &dd)
349 {
350  os << "dumpi_ssend(";
351  if(&dd) {
352  /** Argument value before PMPI call */
353  os << "count=" << dd.count << ", ";
354  /** Argument value before PMPI call */
355  os << "datatype=" << dd.datatype << ", ";
356  /** Argument value before PMPI call */
357  os << "dest=" << dd.dest << ", ";
358  /** Argument value before PMPI call */
359  os << "tag=" << dd.tag << ", ";
360  /** Argument value before PMPI call */
361  os << "comm=" << dd.comm << ")";
362  }
363  else {
364  os << "NULL)";
365  }
366  return os;
367 }
368 /**
369  * C++ IO for a rsend operation.
370  */
371 inline std::ostream& operator<<(std::ostream &os, const dumpi_rsend &dd)
372 {
373  os << "dumpi_rsend(";
374  if(&dd) {
375  /** Argument value before PMPI call */
376  os << "count=" << dd.count << ", ";
377  /** Argument value before PMPI call */
378  os << "datatype=" << dd.datatype << ", ";
379  /** Argument value before PMPI call */
380  os << "dest=" << dd.dest << ", ";
381  /** Argument value before PMPI call */
382  os << "tag=" << dd.tag << ", ";
383  /** Argument value before PMPI call */
384  os << "comm=" << dd.comm << ")";
385  }
386  else {
387  os << "NULL)";
388  }
389  return os;
390 }
391 /**
392  * C++ IO for a buffer_attach operation.
393  */
394 inline std::ostream& operator<<(std::ostream &os,
395  const dumpi_buffer_attach &dd)
396 {
397  os << "dumpi_buffer_attach(";
398  if(&dd) {
399  /** Argument value before PMPI call */
400  os << "size=" << dd.size << ")";
401  }
402  else {
403  os << "NULL)";
404  }
405  return os;
406 }
407 /**
408  * C++ IO for a buffer_detach operation.
409  */
410 inline std::ostream& operator<<(std::ostream &os,
411  const dumpi_buffer_detach &dd)
412 {
413  os << "dumpi_buffer_detach(";
414  if(&dd) {
415  /** Argument value after PMPI call */
416  os << "size=" << dd.size << ")";
417  }
418  else {
419  os << "NULL)";
420  }
421  return os;
422 }
423 /**
424  * C++ IO for a isend operation.
425  */
426 inline std::ostream& operator<<(std::ostream &os, const dumpi_isend &dd)
427 {
428  os << "dumpi_isend(";
429  if(&dd) {
430  /** Argument value before PMPI call */
431  os << "count=" << dd.count << ", ";
432  /** Argument value before PMPI call */
433  os << "datatype=" << dd.datatype << ", ";
434  /** Argument value before PMPI call */
435  os << "dest=" << dd.dest << ", ";
436  /** Argument value before PMPI call */
437  os << "tag=" << dd.tag << ", ";
438  /** Argument value before PMPI call */
439  os << "comm=" << dd.comm << ", ";
440  /** Argument value after PMPI call */
441  os << "request=" << dd.request << ")";
442  }
443  else {
444  os << "NULL)";
445  }
446  return os;
447 }
448 /**
449  * C++ IO for a ibsend operation.
450  */
451 inline std::ostream& operator<<(std::ostream &os, const dumpi_ibsend &dd)
452 {
453  os << "dumpi_ibsend(";
454  if(&dd) {
455  /** Argument value before PMPI call */
456  os << "count=" << dd.count << ", ";
457  /** Argument value before PMPI call */
458  os << "datatype=" << dd.datatype << ", ";
459  /** Argument value before PMPI call */
460  os << "dest=" << dd.dest << ", ";
461  /** Argument value before PMPI call */
462  os << "tag=" << dd.tag << ", ";
463  /** Argument value before PMPI call */
464  os << "comm=" << dd.comm << ", ";
465  /** Argument value after PMPI call */
466  os << "request=" << dd.request << ")";
467  }
468  else {
469  os << "NULL)";
470  }
471  return os;
472 }
473 /**
474  * C++ IO for a issend operation.
475  */
476 inline std::ostream& operator<<(std::ostream &os, const dumpi_issend &dd)
477 {
478  os << "dumpi_issend(";
479  if(&dd) {
480  /** Argument value before PMPI call */
481  os << "count=" << dd.count << ", ";
482  /** Argument value before PMPI call */
483  os << "datatype=" << dd.datatype << ", ";
484  /** Argument value before PMPI call */
485  os << "dest=" << dd.dest << ", ";
486  /** Argument value before PMPI call */
487  os << "tag=" << dd.tag << ", ";
488  /** Argument value before PMPI call */
489  os << "comm=" << dd.comm << ", ";
490  /** Argument value after PMPI call */
491  os << "request=" << dd.request << ")";
492  }
493  else {
494  os << "NULL)";
495  }
496  return os;
497 }
498 /**
499  * C++ IO for a irsend operation.
500  */
501 inline std::ostream& operator<<(std::ostream &os, const dumpi_irsend &dd)
502 {
503  os << "dumpi_irsend(";
504  if(&dd) {
505  /** Argument value before PMPI call */
506  os << "count=" << dd.count << ", ";
507  /** Argument value before PMPI call */
508  os << "datatype=" << dd.datatype << ", ";
509  /** Argument value before PMPI call */
510  os << "dest=" << dd.dest << ", ";
511  /** Argument value before PMPI call */
512  os << "tag=" << dd.tag << ", ";
513  /** Argument value before PMPI call */
514  os << "comm=" << dd.comm << ", ";
515  /** Argument value after PMPI call */
516  os << "request=" << dd.request << ")";
517  }
518  else {
519  os << "NULL)";
520  }
521  return os;
522 }
523 /**
524  * C++ IO for a irecv operation.
525  */
526 inline std::ostream& operator<<(std::ostream &os, const dumpi_irecv &dd)
527 {
528  os << "dumpi_irecv(";
529  if(&dd) {
530  /** Argument value before PMPI call */
531  os << "count=" << dd.count << ", ";
532  /** Argument value before PMPI call */
533  os << "datatype=" << dd.datatype << ", ";
534  /** Argument value before PMPI call */
535  os << "source=" << dd.source << ", ";
536  /** Argument value before PMPI call */
537  os << "tag=" << dd.tag << ", ";
538  /** Argument value before PMPI call */
539  os << "comm=" << dd.comm << ", ";
540  /** Argument value after PMPI call */
541  os << "request=" << dd.request << ")";
542  }
543  else {
544  os << "NULL)";
545  }
546  return os;
547 }
548 /**
549  * C++ IO for a wait operation.
550  */
551 inline std::ostream& operator<<(std::ostream &os, const dumpi_wait &dd)
552 {
553  os << "dumpi_wait(";
554  if(&dd) {
555  /** Argument value before PMPI call */
556  os << "request=" << dd.request << ", ";
557  /** Argument value after PMPI call */
558  os << "status=" << *dd.status << ")";
559  }
560  else {
561  os << "NULL)";
562  }
563  return os;
564 }
565 
566 /**
567  * C++ IO for a test operation.
568  */
569 inline std::ostream& operator<<(std::ostream &os, const dumpi_test &dd)
570 {
571  os << "dumpi_test(";
572  if(&dd) {
573  /** Argument value before PMPI call */
574  os << "request=" << dd.request << ", ";
575  /** Argument value after PMPI call */
576  os << "flag=" << dd.flag << ", ";
577  /** Argument value before PMPI call. Only stored if(flag != 0) */
578  os << "status=" << *dd.status << ")";
579  }
580  else {
581  os << "NULL)";
582  }
583  return os;
584 }
585 
586 /**
587  * C++ IO for a request_free operation.
588  */
589 inline std::ostream& operator<<(std::ostream &os, const dumpi_request_free &dd)
590 {
591  if(&dd) {
592  os << "dumpi_request_free(";
593  /** Argument value before PMPI call */
594  os << "request=" << dd.request << ")";
595  }
596  else {
597  os << "NULL)";
598  }
599  return os;
600 }
601 
602 /**
603  * C++ IO for a waitany operation.
604  */
605 inline std::ostream& operator<<(std::ostream &os, const dumpi_waitany &dd)
606 {
607  if(&dd) {
608  os << "dumpi_waitany(";
609  /** Argument value before PMPI call */
610  os << "count=" << dd.count << ", ";
611  /** Argument value before PMPI call. Array of length [count] */
612  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
613  /** Argument value after PMPI call */
614  os << "index=" << dd.index << ", ";
615  /** Argument value before PMPI call. Only stored if(index != MPI_UNDEFINED) */
616  os << "status=" << *dd.status << ")";
617  }
618  else {
619  os << "NULL)";
620  }
621  return os;
622 }
623 
624 /**
625  * C++ IO for a testany operation.
626  */
627 inline std::ostream& operator<<(std::ostream &os, const dumpi_testany &dd)
628 {
629  os << "dumpi_testany(";
630  if(&dd) {
631  /** Argument value before PMPI call */
632  os << "count=" << dd.count << ", ";
633  /** Argument value before PMPI call. Array of length [count] */
634  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
635  /** Argument value after PMPI call */
636  os << "index=" << dd.index << ", ";
637  /** Argument value after PMPI call */
638  os << "flag=" << dd.flag << ", ";
639  /** Argument value before PMPI call. Only stored if(flag != 0) */
640  os << "status=" << *dd.status << ")";
641  }
642  else {
643  os << "NULL)";
644  }
645  return os;
646 }
647 
648 /**
649  * C++ IO for a waitall operation.
650  */
651 inline std::ostream& operator<<(std::ostream &os, const dumpi_waitall &dd)
652 {
653  os << "dumpi_waitall(";
654  if(&dd) {
655  /** Argument value before PMPI call */
656  os << "count=" << dd.count << ", ";
657  /** Argument value before PMPI call. Array of length [count] */
658  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
659  /** Argument value after PMPI call. Array of length [count] */
660  os << "statuses=" << P::statuses(dd.count, dd.statuses) << ")";
661  }
662  else {
663  os << "NULL)";
664  }
665  return os;
666 }
667 
668 /**
669  * C++ IO for a testall operation.
670  */
671 inline std::ostream& operator<<(std::ostream &os, const dumpi_testall &dd)
672 {
673  os << "dumpi_testall(";
674  if(&dd) {
675  /** Argument value before PMPI call */
676  os << "count=" << dd.count << ", ";
677  /** Argument value before PMPI call. Array of length [count] */
678  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
679  /** Argument value after PMPI call */
680  os << "flag=" << dd.flag << ", ";
681  /**
682  * Argument value after PMPI call. Array of length [count].
683  * Only stored if(flag != 0)
684  */
685  os << "status=" << P::statuses(dd.count, dd.statuses) << ")";
686  }
687  else {
688  os << "NULL)";
689  }
690  return os;
691 }
692 
693 /**
694  * C++ IO for a waitsome operation.
695  */
696 inline std::ostream& operator<<(std::ostream &os, const dumpi_waitsome &dd)
697 {
698  os << "dumpi_waitsome(";
699  if(&dd) {
700  /** Argument value before PMPI call */
701  os << "count=" << dd.count << ", ";
702  /** Argument value before PMPI call. Array of length [count] */
703  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
704  /** Argument value after PMPI call */
705  os << "outcount=" << dd.outcount << ", ";
706  /** Argument value after PMPI call. Array of length [*outcount] */
707  os << "indices=" << P::ints(dd.outcount, dd.indices) << ", ";
708  /** Argument value after PMPI call. Array of length [*outcount] */
709  os << "statuses=" << P::statuses(dd.outcount, dd.statuses) << ")";
710  }
711  else {
712  os << "NULL)";
713  }
714  return os;
715 }
716 
717 /**
718  * C++ IO for a testsome operation.
719  */
720 inline std::ostream& operator<<(std::ostream &os, const dumpi_testsome &dd)
721 {
722  os << "dumpi_testsome(";
723  if(&dd) {
724  /** Argument value before PMPI call */
725  os << "count=" << dd.count << ", ";
726  /** Argument value before PMPI call. Array of length [count] */
727  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
728  /** Argument value after PMPI call */
729  os << "outcount=" << dd.outcount << ", ";
730  /** Argument value after PMPI call. Array of length [*outcount] */
731  os << "indices=" << P::ints(dd.outcount, dd.indices) << ", ";
732  /** Argument value after PMPI call. Array of length [*outcount] */
733  os << "statuses=" << P::statuses(dd.outcount, dd.statuses) << ")";
734  }
735  else {
736  os << "NULL)";
737  }
738  return os;
739 }
740 
741 /**
742  * C++ IO for a iprobe operation.
743  */
744 inline std::ostream& operator<<(std::ostream &os, const dumpi_iprobe &dd)
745 {
746  os << "dumpi_iprobe(";
747  if(&dd) {
748  /** Argument value before PMPI call */
749  os << "source=" << dd.source << ", ";
750  /** Argument value before PMPI call */
751  os << "tag=" << dd.tag << ", ";
752  /** Argument value before PMPI call */
753  os << "comm=" << dd.comm << ", ";
754  /** Argument value after PMPI call */
755  os << "flag=" << dd.flag << ", ";
756  /** Argument value before PMPI call. Only stored if(flag != 0) */
757  os << "status=" << *dd.status << ")";
758  }
759  else {
760  os << "NULL)";
761  }
762  return os;
763 }
764 
765 /**
766  * C++ IO for a probe operation.
767  */
768 inline std::ostream& operator<<(std::ostream &os, const dumpi_probe &dd)
769 {
770  os << "dumpi_probe(";
771  if(&dd) {
772  /** Argument value before PMPI call */
773  os << "source=" << dd.source << ", ";
774  /** Argument value before PMPI call */
775  os << "tag=" << dd.tag << ", ";
776  /** Argument value before PMPI call */
777  os << "comm=" << dd.comm << ", ";
778  /** Argument value after PMPI call */
779  os << "status=" << *dd.status << ")";
780  }
781  else {
782  os << "NULL)";
783  }
784  return os;
785 }
786 
787 /**
788  * C++ IO for a cancel operation.
789  */
790 inline std::ostream& operator<<(std::ostream &os, const dumpi_cancel &dd)
791 {
792  os << "dumpi_cancel(";
793  if(&dd) {
794  /** Argument value before PMPI call */
795  os << "request=" << dd.request << ")";
796  }
797  else {
798  os << "NULL)";
799  }
800  return os;
801 }
802 
803 /**
804  * C++ IO for a test_cancelled operation.
805  */
806 inline std::ostream& operator<<(std::ostream &os,
807  const dumpi_test_cancelled &dd)
808 {
809  os << "dumpi_test_cancelled(";
810  if(&dd) {
811  /** Argument value before PMPI call */
812  os << "status=" << *dd.status << ", ";
813  /** Argument value after PMPI call */
814  os << "cancelled=" << dd.cancelled << ")";
815  }
816  else {
817  os << "NULL)";
818  }
819  return os;
820 }
821 
822 /**
823  * C++ IO for a send_init operation.
824  */
825 inline std::ostream& operator<<(std::ostream &os, const dumpi_send_init &dd)
826 {
827  os << "dumpi_send_init(";
828  if(&dd) {
829  /** Argument value before PMPI call */
830  os << "count=" << dd.count << ", ";
831  /** Argument value before PMPI call */
832  os << "datatype=" << dd.datatype << ", ";
833  /** Argument value before PMPI call */
834  os << "dest=" << dd.dest << ", ";
835  /** Argument value before PMPI call */
836  os << "tag=" << dd.tag << ", ";
837  /** Argument value before PMPI call */
838  os << "comm=" << dd.comm << ", ";
839  /** Argument value after PMPI call */
840  os << "request=" << dd.request << ")";
841  }
842  else {
843  os << "NULL)";
844  }
845  return os;
846 }
847 
848 /**
849  * C++ IO for a bsend_init operation.
850  */
851 inline std::ostream& operator<<(std::ostream &os, const dumpi_bsend_init &dd)
852 {
853  os << "dumpi_bsend_init(";
854  if(&dd) {
855  /** Argument value before PMPI call */
856  os << "count=" << dd.count << ", ";
857  /** Argument value before PMPI call */
858  os << "datatype=" << dd.datatype << ", ";
859  /** Argument value before PMPI call */
860  os << "dest=" << dd.dest << ", ";
861  /** Argument value before PMPI call */
862  os << "tag=" << dd.tag << ", ";
863  /** Argument value before PMPI call */
864  os << "comm=" << dd.comm << ", ";
865  /** Argument value after PMPI call */
866  os << "request=" << dd.request << ")";
867  }
868  else {
869  os << "NULL)";
870  }
871  return os;
872 }
873 
874 /**
875  * C++ IO for a ssend_init operation.
876  */
877 inline std::ostream& operator<<(std::ostream &os, const dumpi_ssend_init &dd)
878 {
879  os << "dumpi_ssend_init(";
880  if(&dd) {
881  /** Argument value before PMPI call */
882  os << "count=" << dd.count << ", ";
883  /** Argument value before PMPI call */
884  os << "datatype=" << dd.datatype << ", ";
885  /** Argument value before PMPI call */
886  os << "dest=" << dd.dest << ", ";
887  /** Argument value before PMPI call */
888  os << "tag=" << dd.tag << ", ";
889  /** Argument value before PMPI call */
890  os << "comm=" << dd.comm << ", ";
891  /** Argument value after PMPI call */
892  os << "request=" << dd.request << ")";
893  }
894  else {
895  os << "NULL)";
896  }
897  return os;
898 }
899 
900 /**
901  * C++ IO for a rsend_init operation.
902  */
903 inline std::ostream& operator<<(std::ostream &os, const dumpi_rsend_init &dd)
904 {
905  os << "dumpi_rsend_init(";
906  if(&dd) {
907  /** Argument value before PMPI call */
908  os << "count=" << dd.count << ", ";
909  /** Argument value before PMPI call */
910  os << "datatype=" << dd.datatype << ", ";
911  /** Argument value before PMPI call */
912  os << "dest=" << dd.dest << ", ";
913  /** Argument value before PMPI call */
914  os << "tag=" << dd.tag << ", ";
915  /** Argument value before PMPI call */
916  os << "comm=" << dd.comm << ", ";
917  /** Argument value after PMPI call */
918  os << "request=" << dd.request << ")";
919  }
920  else {
921  os << "NULL)";
922  }
923  return os;
924 }
925 
926 /**
927  * C++ IO for a recv_init operation.
928  */
929 inline std::ostream& operator<<(std::ostream &os, const dumpi_recv_init &dd)
930 {
931  os << "dumpi_recv_init(";
932  if(&dd) {
933  /** Argument value before PMPI call */
934  os << "count=" << dd.count << ", ";
935  /** Argument value before PMPI call */
936  os << "datatype=" << dd.datatype << ", ";
937  /** Argument value before PMPI call */
938  os << "source=" << dd.source << ", ";
939  /** Argument value before PMPI call */
940  os << "tag=" << dd.tag << ", ";
941  /** Argument value before PMPI call */
942  os << "comm=" << dd.comm << ", ";
943  /** Argument value after PMPI call */
944  os << "request=" << dd.request << ")";
945  }
946  else {
947  os << "NULL)";
948  }
949  return os;
950 }
951 
952 /**
953  * C++ IO for a start operation.
954  */
955 inline std::ostream& operator<<(std::ostream &os, const dumpi_start &dd)
956 {
957  os << "dumpi_start(";
958  if(&dd) {
959  /** Argument value after PMPI call */
960  os << "request=" << dd.request << ")";
961  }
962  else {
963  os << "NULL)";
964  }
965  return os;
966 }
967 
968 /**
969  * C++ IO for a startall operation.
970  */
971 inline std::ostream& operator<<(std::ostream &os, const dumpi_startall &dd)
972 {
973  os << "dumpi_startall(";
974  if(&dd) {
975  /** Argument value before PMPI call */
976  os << "count=" << dd.count << ", ";
977  /** Argument value after PMPI call. Array of length [count] */
978  os << "requests=" << P::ints(dd.count, dd.requests) << ")";
979  }
980  else {
981  os << "NULL)";
982  }
983  return os;
984 }
985 
986 /**
987  * C++ IO for a sendrecv operation.
988  */
989 inline std::ostream& operator<<(std::ostream &os, const dumpi_sendrecv &dd)
990 {
991  os << "dumpi_sendrecv(";
992  if(&dd) {
993  /** Argument value before PMPI call */
994  os << "sendcount=" << dd.sendcount << ", ";
995  /** Argument value before PMPI call */
996  os << "sendtype=" << dd.sendtype << ", ";
997  /** Argument value before PMPI call */
998  os << "dest=" << dd.dest << ", ";
999  /** Argument value before PMPI call */
1000  os << "sendtag=" << dd.sendtag << ", ";
1001  /** Argument value before PMPI call */
1002  os << "recvcount=" << dd.recvcount << ", ";
1003  /** Argument value before PMPI call */
1004  os << "recvtype=" << dd.recvtype << ", ";
1005  /** Argument value before PMPI call */
1006  os << "source=" << dd.source << ", ";
1007  /** Argument value before PMPI call */
1008  os << "recvtag=" << dd.recvtag << ", ";
1009  /** Argument value before PMPI call */
1010  os << "comm=" << dd.comm << ", ";
1011  /** Argument value after PMPI call */
1012  os << "status=" << *dd.status << ")";
1013  }
1014  else {
1015  os << "NULL)";
1016  }
1017  return os;
1018 }
1019 /**
1020  * C++ IO for a sendrecv_replace operation.
1021  */
1022 inline std::ostream& operator<<(std::ostream &os,
1023  const dumpi_sendrecv_replace &dd)
1024 {
1025  os << "dumpi_sendrecv_replace(";
1026  if(&dd) {
1027  /** Argument value before PMPI call */
1028  os << "count=" << dd.count << ", ";
1029  /** Argument value before PMPI call */
1030  os << "datatype=" << dd.datatype << ", ";
1031  /** Argument value before PMPI call */
1032  os << "dest=" << dd.dest << ", ";
1033  /** Argument value before PMPI call */
1034  os << "sendtag=" << dd.sendtag << ", ";
1035  /** Argument value before PMPI call */
1036  os << "source=" << dd.source << ", ";
1037  /** Argument value before PMPI call */
1038  os << "recvtag=" << dd.recvtag << ", ";
1039  /** Argument value before PMPI call */
1040  os << "comm=" << dd.comm << ", ";
1041  /** Argument value after PMPI call */
1042  os << "status=" << *dd.status << ")";
1043  }
1044  else {
1045  os << "NULL)";
1046  }
1047  return os;
1048 }
1049 /**
1050  * C++ IO for a type_contiguous operation.
1051  */
1052 inline std::ostream& operator<<(std::ostream &os,
1053  const dumpi_type_contiguous &dd)
1054 {
1055  os << "dumpi_type_contiguous(";
1056  if(&dd) {
1057  /** Argument value before PMPI call */
1058  os << "count=" << dd.count << ", ";
1059  /** Argument value before PMPI call */
1060  os << "oldtype=" << dd.oldtype << ", ";
1061  /** Argument value after PMPI call */
1062  os << "newtype=" << dd.newtype << ")";
1063  }
1064  else {
1065  os << "NULL)";
1066  }
1067  return os;
1068 }
1069 /**
1070  * C++ IO for a type_vector operation.
1071  */
1072 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_vector &dd)
1073 {
1074  os << "dumpi_type_vector(";
1075  if(&dd) {
1076  /** Argument value before PMPI call */
1077  os << "count=" << dd.count << ", ";
1078  /** Argument value before PMPI call */
1079  os << "blocklength=" << dd.blocklength << ", ";
1080  /** Argument value before PMPI call */
1081  os << "stride=" << dd.stride << ", ";
1082  /** Argument value before PMPI call */
1083  os << "oldtype=" << dd.oldtype << ", ";
1084  /** Argument value after PMPI call */
1085  os << "newtype=" << dd.newtype << ")";
1086  }
1087  else {
1088  os << "NULL)";
1089  }
1090  return os;
1091 }
1092 /**
1093  * C++ IO for a type_hvector operation.
1094  */
1095 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_hvector &dd)
1096 {
1097  os << "dumpi_type_hvector(";
1098  if(&dd) {
1099  /** Argument value before PMPI call */
1100  os << "count=" << dd.count << ", ";
1101  /** Argument value before PMPI call */
1102  os << "blocklength=" << dd.blocklength << ", ";
1103  /** Argument value before PMPI call */
1104  os << "stride=" << dd.stride << ", ";
1105  /** Argument value before PMPI call */
1106  os << "oldtype=" << dd.oldtype << ", ";
1107  /** Argument value after PMPI call */
1108  os << "newtype=" << dd.newtype << ")";
1109  }
1110  else {
1111  os << "NULL)";
1112  }
1113  return os;
1114 }
1115 /**
1116  * C++ IO for a type_indexed operation.
1117  */
1118 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_indexed &dd)
1119 {
1120  os << "dumpi_type_indexed(";
1121  if(&dd) {
1122  /** Argument value before PMPI call */
1123  os << "count=" << dd.count << ", ";
1124  /** Argument value before PMPI call. Array of length [count] */
1125  os << "lengths=" << P::ints(dd.count, dd.lengths) << ", ";
1126  /** Argument value before PMPI call. Array of length [count] */
1127  os << "indices=" << P::ints(dd.count, dd.indices) << ", ";
1128  /** Argument value before PMPI call */
1129  os << "oldtype=" << dd.oldtype << ", ";
1130  /** Argument value after PMPI call */
1131  os << "newtype=" << dd.newtype << ")";
1132  }
1133  else {
1134  os << "NULL)";
1135  }
1136  return os;
1137 }
1138 /**
1139  * C++ IO for a type_hindexed operation.
1140  */
1141 inline std::ostream& operator<<(std::ostream &os,
1142  const dumpi_type_hindexed &dd)
1143 {
1144  os << "dumpi_type_hindexed(";
1145  if(&dd) {
1146  /** Argument value before PMPI call */
1147  os << "count=" << dd.count << ", ";
1148  /** Argument value before PMPI call. Array of length [count] */
1149  os << "lengths=" << P::ints(dd.count, dd.lengths) << ", ";
1150  /** Argument value before PMPI call. Array of length [count] */
1151  os << "indices=" << P::ints(dd.count, dd.indices) << ", ";
1152  /** Argument value before PMPI call */
1153  os << "oldtype=" << dd.oldtype << ", ";
1154  /** Argument value after PMPI call */
1155  os << "newtype=" << dd.newtype << ")";
1156  }
1157  else {
1158  os << "NULL)";
1159  }
1160  return os;
1161 }
1162 /**
1163  * C++ IO for a type_struct operation.
1164  */
1165 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_struct &dd)
1166 {
1167  os << "dumpi_type_struct(";
1168  if(&dd) {
1169  /** Argument value before PMPI call */
1170  os << "count=" << dd.count << ", ";
1171  /** Argument value before PMPI call. Array of length [count] */
1172  os << "lengths=" << P::ints(dd.count, dd.lengths) << ", ";
1173  /** Argument value before PMPI call */
1174  os << "indices=" << dd.indices << ", ";
1175  /** Argument value before PMPI call. Array of length [count] */
1176  os << "oldtypes=" << P::ints(dd.count, dd.oldtypes) << ", ";
1177  /** Argument value after PMPI call */
1178  os << "newtype=" << dd.newtype << ")";
1179  }
1180  else {
1181  os << "NULL)";
1182  }
1183  return os;
1184 }
1185 /**
1186  * C++ IO for a address operation.
1187  */
1188 inline std::ostream& operator<<(std::ostream &os, const dumpi_address &dd)
1189 {
1190  os << "dumpi_address(";
1191  if(&dd) {
1192  /** Argument value after PMPI call */
1193  os << "address=" << dd.address << ")";
1194  }
1195  else {
1196  os << "NULL)";
1197  }
1198  return os;
1199 }
1200 /**
1201  * C++ IO for a type_extent operation.
1202  */
1203 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_extent &dd)
1204 {
1205  os << "dumpi_type_extent(";
1206  if(&dd) {
1207  /** Argument value before PMPI call */
1208  os << "datatype=" << dd.datatype << ", ";
1209  /** Argument value after PMPI call */
1210  os << "extent=" << dd.extent << ")";
1211  }
1212  else {
1213  os << "NULL)";
1214  }
1215  return os;
1216 }
1217 /**
1218  * C++ IO for a type_size operation.
1219  */
1220 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_size &dd)
1221 {
1222  os << "dumpi_type_size(";
1223  if(&dd) {
1224  /** Argument value before PMPI call */
1225  os << "datatype=" << dd.datatype << ", ";
1226  /** Argument value after PMPI call */
1227  os << "size=" << dd.size << ")";
1228  }
1229  else {
1230  os << "NULL)";
1231  }
1232  return os;
1233 }
1234 /**
1235  * C++ IO for a type_lb operation.
1236  */
1237 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_lb &dd)
1238 {
1239  os << "dumpi_type_lb(";
1240  if(&dd) {
1241  /** Argument value before PMPI call */
1242  os << "datatype=" << dd.datatype << ", ";
1243  /** Argument value after PMPI call */
1244  os << "lb=" << dd.lb << ")";
1245  }
1246  else {
1247  os << "NULL)";
1248  }
1249  return os;
1250 }
1251 /**
1252  * C++ IO for a type_ub operation.
1253  */
1254 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_ub &dd)
1255 {
1256  os << "dumpi_type_ub(";
1257  if(&dd) {
1258  /** Argument value before PMPI call */
1259  os << "datatype=" << dd.datatype << ", ";
1260  /** Argument value after PMPI call */
1261  os << "ub=" << dd.ub << ")";
1262  }
1263  else {
1264  os << "NULL)";
1265  }
1266  return os;
1267 }
1268 /**
1269  * C++ IO for a type_commit operation.
1270  */
1271 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_commit &dd)
1272 {
1273  os << "dumpi_type_commit(";
1274  if(&dd) {
1275  /** Argument value before PMPI call */
1276  os << "datatype=" << dd.datatype << ")";
1277  }
1278  else {
1279  os << "NULL)";
1280  }
1281  return os;
1282 }
1283 /**
1284  * C++ IO for a type_free operation.
1285  */
1286 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_free &dd)
1287 {
1288  os << "dumpi_type_free(";
1289  if(&dd) {
1290  /** Argument value before PMPI call */
1291  os << "datatype=" << dd.datatype << ")";
1292  }
1293  else {
1294  os << "NULL)";
1295  }
1296  return os;
1297 }
1298 /**
1299  * C++ IO for a get_elements operation.
1300  */
1301 inline std::ostream& operator<<(std::ostream &os, const dumpi_get_elements &dd)
1302 {
1303  os << "dumpi_get_elements(";
1304  if(&dd) {
1305  /** Argument value before PMPI call */
1306  os << "status=" << *dd.status << ", ";
1307  /** Argument value before PMPI call */
1308  os << "datatype=" << dd.datatype << ", ";
1309  /** Argument value after PMPI call */
1310  os << "elements=" << dd.elements << ")";
1311  }
1312  else {
1313  os << "NULL)";
1314  }
1315  return os;
1316 }
1317 /**
1318  * C++ IO for a pack operation.
1319  */
1320 inline std::ostream& operator<<(std::ostream &os, const dumpi_pack &dd)
1321 {
1322  os << "dumpi_pack(";
1323  if(&dd) {
1324  /** Argument value before PMPI call */
1325  os << "incount=" << dd.incount << ", ";
1326  /** Argument value before PMPI call */
1327  os << "datatype=" << dd.datatype << ", ";
1328  /** Argument value before PMPI call */
1329  os << "outcount=" << dd.outcount << ", ";
1330  /** Argument value before and after PMPI call. */
1331  os << "position={in=" << dd.position.in << ", out="
1332  << dd.position.out << "}, ";
1333  /** Argument value before PMPI call */
1334  os << "comm=" << dd.comm << ")";
1335  }
1336  else {
1337  os << "NULL)";
1338  }
1339  return os;
1340 }
1341 /**
1342  * C++ IO for a unpack operation.
1343  */
1344 inline std::ostream& operator<<(std::ostream &os, const dumpi_unpack &dd)
1345 {
1346  os << "dumpi_unpack(";
1347  if(&dd) {
1348  /** Argument value before PMPI call */
1349  os << "incount=" << dd.incount << ", ";
1350  /** Argument value before and after PMPI call. */
1351  os << "position={in=" << dd.position.in << ", out="
1352  << dd.position.out << "}, ";
1353  /** Argument value before PMPI call */
1354  os << "outcount=" << dd.outcount << ", ";
1355  /** Argument value before PMPI call */
1356  os << "datatype=" << dd.datatype << ", ";
1357  /** Argument value before PMPI call */
1358  os << "comm=" << dd.comm << ")";
1359  }
1360  else {
1361  os << "NULL)";
1362  }
1363  return os;
1364 }
1365 /**
1366  * C++ IO for a pack_size operation.
1367  */
1368 inline std::ostream& operator<<(std::ostream &os, const dumpi_pack_size &dd)
1369 {
1370  os << "dumpi_pack_size(";
1371  if(&dd) {
1372  /** Argument value before PMPI call */
1373  os << "incount=" << dd.incount << ", ";
1374  /** Argument value before PMPI call */
1375  os << "datatype=" << dd.datatype << ", ";
1376  /** Argument value before PMPI call */
1377  os << "comm=" << dd.comm << ", ";
1378  /** Argument value after PMPI call */
1379  os << "size=" << dd.size << ")";
1380  }
1381  else {
1382  os << "NULL)";
1383  }
1384  return os;
1385 }
1386 /**
1387  * C++ IO for a barrier operation.
1388  */
1389 inline std::ostream& operator<<(std::ostream &os, const dumpi_barrier &dd)
1390 {
1391  os << "dumpi_barrier(";
1392  if(&dd) {
1393  /** Argument value before PMPI call */
1394  os << "comm=" << dd.comm << ")";
1395  }
1396  else {
1397  os << "NULL)";
1398  }
1399  return os;
1400 }
1401 /**
1402  * C++ IO for a bcast operation.
1403  */
1404 inline std::ostream& operator<<(std::ostream &os, const dumpi_bcast &dd)
1405 {
1406  os << "dumpi_bcast(";
1407  if(&dd) {
1408  /** Argument value before PMPI call */
1409  os << "count=" << dd.count << ", ";
1410  /** Argument value before PMPI call */
1411  os << "datatype=" << dd.datatype << ", ";
1412  /** Argument value before PMPI call */
1413  os << "root=" << dd.root << ", ";
1414  /** Argument value before PMPI call */
1415  os << "comm=" << dd.comm << ")";
1416  }
1417  else {
1418  os << "NULL)";
1419  }
1420  return os;
1421 }
1422 /**
1423  * C++ IO for a gather operation.
1424  */
1425 inline std::ostream& operator<<(std::ostream &os, const dumpi_gather &dd)
1426 {
1427  os << "dumpi_gather(";
1428  if(&dd) {
1429  /** Not an MPI argument. Added to index relevant data in the struct. */
1430  os << "commrank=" << dd.commrank << ", ";
1431  /** Argument value before PMPI call */
1432  os << "sendcount=" << dd.sendcount << ", ";
1433  /** Argument value before PMPI call */
1434  os << "sendtype=" << dd.sendtype << ", ";
1435  /** Argument value before PMPI call. Only stored if(commrank==root) */
1436  os << "recvcount=" << dd.recvcount << ", ";
1437  /** Argument value before PMPI call. Only stored if(commrank==root) */
1438  os << "recvtype=" << dd.recvtype << ", ";
1439  /** Argument value before PMPI call */
1440  os << "root=" << dd.root << ", ";
1441  /** Argument value before PMPI call */
1442  os << "comm=" << dd.comm << ")";
1443  }
1444  else {
1445  os << "NULL)";
1446  }
1447  return os;
1448 }
1449 /**
1450  * C++ IO for a gatherv operation.
1451  */
1452 inline std::ostream& operator<<(std::ostream &os, const dumpi_gatherv &dd)
1453 {
1454  os << "dumpi_gatherv(";
1455  if(&dd) {
1456  /** Not an MPI argument. Added to index relevant data in the struct. */
1457  os << "commrank=" << dd.commrank << ", ";
1458  /** Not an MPI argument. Added to index relevant data in the struct. */
1459  os << "commsize=" << dd.commsize << ", ";
1460  /** Argument value before PMPI call */
1461  os << "sendcount=" << dd.sendcount << ", ";
1462  /** Argument value before PMPI call */
1463  os << "sendtype=" << dd.sendtype << ", ";
1464  /**
1465  * Argument value before PMPI call. Array of length [commsize].
1466  * Only stored if(commrank==root)
1467  */
1468  os << "recvcounts="
1469  << P::ints(dd.commrank == dd.root, dd.commsize, dd.recvcounts)
1470  << ", ";
1471  /**
1472  * Argument value before PMPI call. Array of length [commsize].
1473  * Only stored if(commrank==root)
1474  */
1475  os << "displs="
1476  << P::ints(dd.commrank == dd.root, dd.commsize, dd.displs)
1477  << ", ";
1478  /** Argument value before PMPI call. Only stored if(commrank==root) */
1479  os << "recvtype=" << dd.recvtype << ", ";
1480  /** Argument value before PMPI call */
1481  os << "root=" << dd.root << ", ";
1482  /** Argument value before PMPI call */
1483  os << "comm=" << dd.comm << ")";
1484  }
1485  else {
1486  os << "NULL)";
1487  }
1488  return os;
1489 }
1490 /**
1491  * C++ IO for a scatter operation.
1492  */
1493 inline std::ostream& operator<<(std::ostream &os, const dumpi_scatter &dd)
1494 {
1495  os << "dumpi_scatter(";
1496  if(&dd) {
1497  /** Not an MPI argument. Added to index relevant data in the struct. */
1498  os << "commrank=" << dd.commrank << ", ";
1499  /** Argument value before PMPI call. Only stored if(commrank==root) */
1500  os << "sendcount=" << dd.sendcount << ", ";
1501  /** Argument value before PMPI call. Only stored if(commrank==root) */
1502  os << "sendtype=" << dd.sendtype << ", ";
1503  /** Argument value before PMPI call */
1504  os << "recvcount=" << dd.recvcount << ", ";
1505  /** Argument value before PMPI call */
1506  os << "recvtype=" << dd.recvtype << ", ";
1507  /** Argument value before PMPI call */
1508  os << "root=" << dd.root << ", ";
1509  /** Argument value before PMPI call */
1510  os << "comm=" << dd.comm << ")";
1511  }
1512  else {
1513  os << "NULL)";
1514  }
1515  return os;
1516 }
1517 /**
1518  * C++ IO for a scatterv operation.
1519  */
1520 inline std::ostream& operator<<(std::ostream &os, const dumpi_scatterv &dd)
1521 {
1522  os << "dumpi_scatterv(";
1523  if(&dd) {
1524  /** Not an MPI argument. Added to index relevant data in the struct. */
1525  os << "commrank=" << dd.commrank << ", ";
1526  /** Not an MPI argument. Added to index relevant data in the struct. */
1527  os << "commsize=" << dd.commsize << ", ";
1528  /**
1529  * Argument value before PMPI call. Array of length [commsize].
1530  * Only stored if(commrank==root)
1531  */
1532  os << "sendcounts="
1533  << P::ints(dd.commrank == dd.root, dd.commsize, dd.sendcounts)
1534  << ", ";
1535  /**
1536  * Argument value before PMPI call. Array of length [commsize].
1537  * Only stored if(commrank==root)
1538  */
1539  os << "displs="
1540  << P::ints(dd.commrank == dd.root, dd.commsize, dd.displs)
1541  << ", ";
1542  /** Argument value before PMPI call */
1543  os << "sendtype=" << dd.sendtype << ", ";
1544  /** Argument value before PMPI call */
1545  os << "recvcount=" << dd.recvcount << ", ";
1546  /** Argument value before PMPI call */
1547  os << "recvtype=" << dd.recvtype << ", ";
1548  /** Argument value before PMPI call */
1549  os << "root=" << dd.root << ", ";
1550  /** Argument value before PMPI call */
1551  os << "comm=" << dd.comm << ")";
1552  }
1553  else {
1554  os << "NULL)";
1555  }
1556  return os;
1557 }
1558 /**
1559  * C++ IO for a allgather operation.
1560  */
1561 inline std::ostream& operator<<(std::ostream &os, const dumpi_allgather &dd)
1562 {
1563  os << "dumpi_allgather(";
1564  if(&dd) {
1565  /** Argument value before PMPI call */
1566  os << "sendcount=" << dd.sendcount << ", ";
1567  /** Argument value before PMPI call */
1568  os << "sendtype=" << dd.sendtype << ", ";
1569  /** Argument value before PMPI call */
1570  os << "recvcount=" << dd.recvcount << ", ";
1571  /** Argument value before PMPI call */
1572  os << "recvtype=" << dd.recvtype << ", ";
1573  /** Argument value before PMPI call */
1574  os << "comm=" << dd.comm << ")";
1575  }
1576  else {
1577  os << "NULL)";
1578  }
1579  return os;
1580 }
1581 /**
1582  * C++ IO for a allgatherv operation.
1583  */
1584 inline std::ostream& operator<<(std::ostream &os, const dumpi_allgatherv &dd)
1585 {
1586  os << "dumpi_allgatherv(";
1587  if(&dd) {
1588  /** Not an MPI argument. Added to index relevant data in the struct. */
1589  os << "commsize=" << dd.commsize << ", ";
1590  /** Argument value before PMPI call */
1591  os << "sendcount=" << dd.sendcount << ", ";
1592  /** Argument value before PMPI call */
1593  os << "sendtype=" << dd.sendtype << ", ";
1594  /** Argument value before PMPI call. Array of length [commsize] */
1595  os << "recvcounts=" << P::ints(dd.commsize, dd.recvcounts) << ", ";
1596  /** Argument value before PMPI call. Array of length [commsize] */
1597  os << "displs=" << P::ints(dd.commsize, dd.displs) << ", ";
1598  /** Argument value before PMPI call */
1599  os << "recvtype=" << dd.recvtype << ", ";
1600  /** Argument value before PMPI call */
1601  os << "comm=" << dd.comm << ")";
1602  }
1603  else {
1604  os << "NULL)";
1605  }
1606  return os;
1607 }
1608 /**
1609  * C++ IO for a alltoall operation.
1610  */
1611 inline std::ostream& operator<<(std::ostream &os, const dumpi_alltoall &dd)
1612 {
1613  os << "dumpi_alltoall(";
1614  if(&dd) {
1615  /** Argument value before PMPI call */
1616  os << "sendcount=" << dd.sendcount << ", ";
1617  /** Argument value before PMPI call */
1618  os << "sendtype=" << dd.sendtype << ", ";
1619  /** Argument value before PMPI call */
1620  os << "recvcount=" << dd.recvcount << ", ";
1621  /** Argument value before PMPI call */
1622  os << "recvtype=" << dd.recvtype << ", ";
1623  /** Argument value before PMPI call */
1624  os << "comm=" << dd.comm << ")";
1625  }
1626  else {
1627  os << "NULL)";
1628  }
1629  return os;
1630 }
1631 /**
1632  * C++ IO for a alltoallv operation.
1633  */
1634 inline std::ostream& operator<<(std::ostream &os, const dumpi_alltoallv &dd)
1635 {
1636  os << "dumpi_alltoallv(";
1637  if(&dd) {
1638  /** Not an MPI argument. Added to index relevant data in the struct. */
1639  os << "commsize=" << dd.commsize << ", ";
1640  /** Argument value before PMPI call. Array of length [commsize] */
1641  os << "sendcounts=" << P::ints(dd.commsize, dd.sendcounts) << ", ";
1642  /** Argument value before PMPI call. Array of length [commsize] */
1643  os << "senddispls=" << P::ints(dd.commsize, dd.senddispls) << ", ";
1644  /** Argument value before PMPI call */
1645  os << "sendtype=" << dd.sendtype << ", ";
1646  /** Argument value before PMPI call. Array of length [commsize] */
1647  os << "recvcounts=" << P::ints(dd.commsize, dd.recvcounts) << ", ";
1648  /** Argument value before PMPI call. Array of length [commsize] */
1649  os << "recvdispls=" << P::ints(dd.commsize, dd.recvdispls) << ", ";
1650  /** Argument value before PMPI call */
1651  os << "recvtype=" << dd.recvtype << ", ";
1652  /** Argument value before PMPI call */
1653  os << "comm=" << dd.comm << ")";
1654  }
1655  else {
1656  os << "NULL)";
1657  }
1658  return os;
1659 }
1660 /**
1661  * C++ IO for a reduce operation.
1662  */
1663 inline std::ostream& operator<<(std::ostream &os, const dumpi_reduce &dd)
1664 {
1665  os << "dumpi_reduce(";
1666  if(&dd) {
1667  /** Argument value before PMPI call */
1668  os << "count=" << dd.count << ", ";
1669  /** Argument value before PMPI call */
1670  os << "datatype=" << dd.datatype << ", ";
1671  /** Argument value before PMPI call */
1672  os << "op=" << dd.op << ", ";
1673  /** Argument value before PMPI call */
1674  os << "root=" << dd.root << ", ";
1675  /** Argument value before PMPI call */
1676  os << "comm=" << dd.comm << ")";
1677  }
1678  else {
1679  os << "NULL)";
1680  }
1681  return os;
1682 }
1683 /**
1684  * C++ IO for a op_create operation.
1685  */
1686 inline std::ostream& operator<<(std::ostream &os, const dumpi_op_create &dd)
1687 {
1688  os << "dumpi_op_create(";
1689  if(&dd) {
1690  /** Argument value before PMPI call */
1691  os << "commute=" << dd.commute << ", ";
1692  /** Argument value after PMPI call */
1693  os << "op=" << dd.op << ")";
1694  }
1695  else {
1696  os << "NULL)";
1697  }
1698  return os;
1699 }
1700 
1701 /**
1702  * C++ IO for a op_free operation.
1703  */
1704 inline std::ostream& operator<<(std::ostream &os, const dumpi_op_free &dd)
1705 {
1706  os << "dumpi_op_free(";
1707  if(&dd) {
1708  /** Argument value before PMPI call */
1709  os << "op=" << dd.op << ")";
1710  }
1711  else {
1712  os << "NULL)";
1713  }
1714  return os;
1715 }
1716 /**
1717  * C++ IO for a allreduce operation.
1718  */
1719 inline std::ostream& operator<<(std::ostream &os, const dumpi_allreduce &dd)
1720 {
1721  os << "dumpi_allreduce(";
1722  if(&dd) {
1723  /** Argument value before PMPI call */
1724  os << "count=" << dd.count << ", ";
1725  /** Argument value before PMPI call */
1726  os << "datatype=" << dd.datatype << ", ";
1727  /** Argument value before PMPI call */
1728  os << "op=" << dd.op << ", ";
1729  /** Argument value before PMPI call */
1730  os << "comm=" << dd.comm << ")";
1731  }
1732  else {
1733  os << "NULL)";
1734  }
1735  return os;
1736 }
1737 /**
1738  * C++ IO for a reduce_scatter operation.
1739  */
1740 inline std::ostream& operator<<(std::ostream &os,
1741  const dumpi_reduce_scatter &dd)
1742 {
1743  os << "dumpi_reduce_scatter(";
1744  if(&dd) {
1745  /** Not an MPI argument. Added to index relevant data in the struct. */
1746  os << "commsize=" << dd.commsize << ", ";
1747  /** Argument value before PMPI call. Array of length [commsize] */
1748  os << "recvcounts=" << P::ints(dd.commsize, dd.recvcounts) << ", ";
1749  /** Argument value before PMPI call */
1750  os << "datatype=" << dd.datatype << ", ";
1751  /** Argument value before PMPI call */
1752  os << "op=" << dd.op << ", ";
1753  /** Argument value before PMPI call */
1754  os << "comm=" << dd.comm << ")";
1755  }
1756  else {
1757  os << "NULL)";
1758  }
1759  return os;
1760 }
1761 /**
1762  * C++ IO for a scan operation.
1763  */
1764 inline std::ostream& operator<<(std::ostream &os, const dumpi_scan &dd)
1765 {
1766  os << "dumpi_scan(";
1767  if(&dd) {
1768  /** Argument value before PMPI call */
1769  os << "count=" << dd.count << ", ";
1770  /** Argument value before PMPI call */
1771  os << "datatype=" << dd.datatype << ", ";
1772  /** Argument value before PMPI call */
1773  os << "op=" << dd.op << ", ";
1774  /** Argument value before PMPI call */
1775  os << "comm=" << dd.comm << ")";
1776  }
1777  else {
1778  os << "NULL)";
1779  }
1780  return os;
1781 }
1782 /**
1783  * C++ IO for a group_size operation.
1784  */
1785 inline std::ostream& operator<<(std::ostream &os, const dumpi_group_size &dd)
1786 {
1787  os << "dumpi_group_size(";
1788  if(&dd) {
1789  /** Argument value before PMPI call */
1790  os << "group=" << dd.group << ", ";
1791  /** Argument value after PMPI call */
1792  os << "size=" << dd.size << ")";
1793  }
1794  else {
1795  os << "NULL)";
1796  }
1797  return os;
1798 }
1799 /**
1800  * C++ IO for a group_rank operation.
1801  */
1802 inline std::ostream& operator<<(std::ostream &os, const dumpi_group_rank &dd)
1803 {
1804  os << "dumpi_group_rank(";
1805  if(&dd) {
1806  /** Argument value before PMPI call */
1807  os << "group=" << dd.group << ", ";
1808  /** Argument value after PMPI call */
1809  os << "rank=" << dd.rank << ")";
1810  }
1811  else {
1812  os << "NULL)";
1813  }
1814  return os;
1815 }
1816 /**
1817  * C++ IO for a group_translate_ranks operation.
1818  */
1819 inline std::ostream& operator<<(std::ostream &os,
1820  const dumpi_group_translate_ranks &dd)
1821 {
1822  os << "dumpi_group_translate_ranks(";
1823  if(&dd) {
1824  /** Argument value before PMPI call */
1825  os << "group1=" << dd.group1 << ", ";
1826  /** Argument value before PMPI call */
1827  os << "count=" << dd.count << ", ";
1828  /** Argument value before PMPI call. Array of length [count] */
1829  os << "ranks1=" << P::ints(dd.count, dd.ranks1) << ", ";
1830  /** Argument value before PMPI call */
1831  os << "group2=" << dd.group2 << ", ";
1832  /** Argument value after PMPI call. Array of length [count] */
1833  os << "ranks2=" << P::ints(dd.count, dd.ranks2) << ")";
1834  }
1835  else {
1836  os << "NULL)";
1837  }
1838  return os;
1839 }
1840 /**
1841  * C++ IO for a group_compare operation.
1842  */
1843 inline std::ostream& operator<<(std::ostream &os,
1844  const dumpi_group_compare &dd)
1845 {
1846  os << "dumpi_group_compare(";
1847  if(&dd) {
1848  /** Argument value before PMPI call */
1849  os << "group1=" << dd.group1 << ", ";
1850  /** Argument value before PMPI call */
1851  os << "group2=" << dd.group2 << ", ";
1852  /** Argument value after PMPI call */
1853  os << "result=" << dd.result << ")";
1854  }
1855  else {
1856  os << "NULL)";
1857  }
1858  return os;
1859 }
1860 /**
1861  * C++ IO for a comm_group operation.
1862  */
1863 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_group &dd)
1864 {
1865  os << "dumpi_comm_group(";
1866  if(&dd) {
1867  /** Argument value before PMPI call */
1868  os << "comm=" << dd.comm << ", ";
1869  /** Argument value after PMPI call */
1870  os << "group=" << dd.group << ")";
1871  }
1872  else {
1873  os << "NULL)";
1874  }
1875  return os;
1876 }
1877 /**
1878  * C++ IO for a group_union operation.
1879  */
1880 inline std::ostream& operator<<(std::ostream &os, const dumpi_group_union &dd)
1881 {
1882  os << "dumpi_group_union(";
1883  if(&dd) {
1884  /** Argument value before PMPI call */
1885  os << "group1=" << dd.group1 << ", ";
1886  /** Argument value before PMPI call */
1887  os << "group2=" << dd.group2 << ", ";
1888  /** Argument value after PMPI call */
1889  os << "newgroup=" << dd.newgroup << ")";
1890  }
1891  else {
1892  os << "NULL)";
1893  }
1894  return os;
1895 }
1896 /**
1897  * C++ IO for a group_intersection operation.
1898  */
1899 inline std::ostream& operator<<(std::ostream &os,
1900  const dumpi_group_intersection &dd)
1901 {
1902  os << "dumpi_group_intersection(";
1903  if(&dd) {
1904  /** Argument value before PMPI call */
1905  os << "group1=" << dd.group1 << ", ";
1906  /** Argument value before PMPI call */
1907  os << "group2=" << dd.group2 << ", ";
1908  /** Argument value after PMPI call */
1909  os << "newgroup=" << dd.newgroup << ")";
1910  }
1911  else {
1912  os << "NULL)";
1913  }
1914  return os;
1915 }
1916 /**
1917  * C++ IO for a group_difference operation.
1918  */
1919 inline std::ostream& operator<<(std::ostream &os,
1920  const dumpi_group_difference &dd)
1921 {
1922  os << "dumpi_group_difference(";
1923  if(&dd) {
1924  /** Argument value before PMPI call */
1925  os << "group1=" << dd.group1 << ", ";
1926  /** Argument value before PMPI call */
1927  os << "group2=" << dd.group2 << ", ";
1928  /** Argument value after PMPI call */
1929  os << "newgroup=" << dd.newgroup << ")";
1930  }
1931  else {
1932  os << "NULL)";
1933  }
1934  return os;
1935 }
1936 /**
1937  * C++ IO for a group_incl operation.
1938  */
1939 inline std::ostream& operator<<(std::ostream &os, const dumpi_group_incl &dd)
1940 {
1941  os << "dumpi_group_incl(";
1942  if(&dd) {
1943  /** Argument value before PMPI call */
1944  os << "group=" << dd.group << ", ";
1945  /** Argument value before PMPI call */
1946  os << "count=" << dd.count << ", ";
1947  /** Argument value before PMPI call. Array of length [count] */
1948  os << "ranks=" << P::ints(dd.count, dd.ranks) << ", ";
1949  /** Argument value after PMPI call */
1950  os << "newgroup=" << dd.newgroup << ")";
1951  }
1952  else {
1953  os << "NULL)";
1954  }
1955  return os;
1956 }
1957 /**
1958  * C++ IO for a group_excl operation.
1959  */
1960 inline std::ostream& operator<<(std::ostream &os, const dumpi_group_excl &dd)
1961 {
1962  os << "dumpi_group_excl(";
1963  if(&dd) {
1964  /** Argument value before PMPI call */
1965  os << "group=" << dd.group << ", ";
1966  /** Argument value before PMPI call */
1967  os << "count=" << dd.count << ", ";
1968  /** Argument value before PMPI call. Array of length [count] */
1969  os << "ranks=" << P::ints(dd.count, dd.ranks) << ", ";
1970  /** Argument value after PMPI call */
1971  os << "newgroup=" << dd.newgroup << ")";
1972  }
1973  else {
1974  os << "NULL)";
1975  }
1976  return os;
1977 }
1978 /**
1979  * C++ IO for a group_range_incl operation.
1980  */
1981 inline std::ostream& operator<<(std::ostream &os,
1982  const dumpi_group_range_incl &dd)
1983 {
1984  os << "dumpi_group_range_incl(";
1985  if(&dd) {
1986  /** Argument value before PMPI call */
1987  os << "group=" << dd.group << ", ";
1988  /** Argument value before PMPI call */
1989  os << "count=" << dd.count << ", ";
1990  /** Argument value before PMPI call. 2D-aray of length [count][3] */
1991  os << "ranges=" << P::ints2d(dd.count, 3, dd.ranges) << ", ";
1992  /** Argument value after PMPI call */
1993  os << "newgroup=" << dd.newgroup << ")";
1994  }
1995  else {
1996  os << "NULL)";
1997  }
1998  return os;
1999 }
2000 /**
2001  * C++ IO for a group_range_excl operation.
2002  */
2003 inline std::ostream& operator<<(std::ostream &os,
2004  const dumpi_group_range_excl &dd)
2005 {
2006  os << "dumpi_group_range_excl(";
2007  if(&dd) {
2008  /** Argument value before PMPI call */
2009  os << "group=" << dd.group << ", ";
2010  /** Argument value before PMPI call */
2011  os << "count=" << dd.count << ", ";
2012  /** Argument value before PMPI call. 2D-array of length [count][3] */
2013  os << "ranges=" << P::ints2d(dd.count, 3, dd.ranges) << ", ";
2014  /** Argument value after PMPI call */
2015  os << "newgroup=" << dd.newgroup << ")";
2016  }
2017  else {
2018  os << "NULL)";
2019  }
2020  return os;
2021 }
2022 /**
2023  * C++ IO for a group_free operation.
2024  */
2025 inline std::ostream& operator<<(std::ostream &os, const dumpi_group_free &dd)
2026 {
2027  os << "dumpi_group_free(";
2028  if(&dd) {
2029  /** Argument value before PMPI call */
2030  os << "group=" << dd.group << ")";
2031  }
2032  else {
2033  os << "NULL)";
2034  }
2035  return os;
2036 }
2037 /**
2038  * C++ IO for a comm_size operation.
2039  */
2040 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_size &dd)
2041 {
2042  os << "dumpi_comm_size(";
2043  if(&dd) {
2044  /** Argument value before PMPI call */
2045  os << "comm=" << dd.comm << ", ";
2046  /** Argument value after PMPI call */
2047  os << "size=" << dd.size << ")";
2048  }
2049  else {
2050  os << "NULL)";
2051  }
2052  return os;
2053 }
2054 /**
2055  * C++ IO for a comm_rank operation.
2056  */
2057 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_rank &dd)
2058 {
2059  os << "dumpi_comm_rank(";
2060  if(&dd) {
2061  /** Argument value before PMPI call */
2062  os << "comm=" << dd.comm << ", ";
2063  /** Argument value after PMPI call */
2064  os << "rank=" << dd.rank << ")";
2065  }
2066  else {
2067  os << "NULL)";
2068  }
2069  return os;
2070 }
2071 /**
2072  * C++ IO for a comm_compare operation.
2073  */
2074 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_compare &dd)
2075 {
2076  os << "dumpi_comm_compare(";
2077  if(&dd) {
2078  /** Argument value before PMPI call */
2079  os << "comm1=" << dd.comm1 << ", ";
2080  /** Argument value before PMPI call */
2081  os << "comm2=" << dd.comm2 << ", ";
2082  /** Argument value after PMPI call */
2083  os << "result=" << dd.result << ")";
2084  }
2085  else {
2086  os << "NULL)";
2087  }
2088  return os;
2089 }
2090 /**
2091  * C++ IO for a comm_dup operation.
2092  */
2093 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_dup &dd)
2094 {
2095  os << "dumpi_comm_dup(";
2096  if(&dd) {
2097  /** Argument value before PMPI call */
2098  os << "oldcomm=" << dd.oldcomm << ", ";
2099  /** Argument value after PMPI call */
2100  os << "newcomm=" << dd.newcomm << ")";
2101  }
2102  else {
2103  os << "NULL)";
2104  }
2105  return os;
2106 }
2107 /**
2108  * C++ IO for a comm_create operation.
2109  */
2110 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_create &dd)
2111 {
2112  os << "dumpi_comm_create(";
2113  if(&dd) {
2114  /** Argument value before PMPI call */
2115  os << "oldcomm=" << dd.oldcomm << ", ";
2116  /** Argument value before PMPI call */
2117  os << "group=" << dd.group << ", ";
2118  /** Argument value after PMPI call */
2119  os << "newcomm=" << dd.newcomm << ")";
2120  }
2121  else {
2122  os << "NULL)";
2123  }
2124  return os;
2125 }
2126 /**
2127  * C++ IO for a comm_split operation.
2128  */
2129 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_split &dd)
2130 {
2131  os << "dumpi_comm_split(";
2132  if(&dd) {
2133  /** Argument value before PMPI call */
2134  os << "oldcomm=" << dd.oldcomm << ", ";
2135  /** Argument value before PMPI call */
2136  os << "color=" << dd.color << ", ";
2137  /** Argument value before PMPI call */
2138  os << "key=" << dd.key << ", ";
2139  /** Argument value after PMPI call */
2140  os << "newcomm=" << dd.newcomm << ")";
2141  }
2142  else {
2143  os << "NULL)";
2144  }
2145  return os;
2146 }
2147 /**
2148  * C++ IO for a comm_free operation.
2149  */
2150 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_free &dd)
2151 {
2152  os << "dumpi_comm_free(";
2153  if(&dd) {
2154  /** Argument value before PMPI call */
2155  os << "comm=" << dd.comm << ")";
2156  }
2157  else {
2158  os << "NULL)";
2159  }
2160  return os;
2161 }
2162 /**
2163  * C++ IO for a comm_test_inter operation.
2164  */
2165 inline std::ostream& operator<<(std::ostream &os,
2166  const dumpi_comm_test_inter &dd)
2167 {
2168  os << "dumpi_comm_test_inter(";
2169  if(&dd) {
2170  /** Argument value before PMPI call */
2171  os << "comm=" << dd.comm << ", ";
2172  /** Argument value after PMPI call */
2173  os << "inter=" << dd.inter << ")";
2174  }
2175  else {
2176  os << "NULL)";
2177  }
2178  return os;
2179 }
2180 /**
2181  * C++ IO for a comm_remote_size operation.
2182  */
2183 inline std::ostream& operator<<(std::ostream &os,
2184  const dumpi_comm_remote_size &dd)
2185 {
2186  os << "dumpi_comm_remote_size(";
2187  if(&dd) {
2188  /** Argument value before PMPI call */
2189  os << "comm=" << dd.comm << ", ";
2190  /** Argument value after PMPI call */
2191  os << "size=" << dd.size << ")";
2192  }
2193  else {
2194  os << "NULL)";
2195  }
2196  return os;
2197 }
2198 /**
2199  * C++ IO for a comm_remote_group operation.
2200  */
2201 inline std::ostream& operator<<(std::ostream &os,
2202  const dumpi_comm_remote_group &dd)
2203 {
2204  os << "dumpi_comm_remote_group(";
2205  if(&dd) {
2206  /** Argument value before PMPI call */
2207  os << "comm=" << dd.comm << ", ";
2208  /** Argument value after PMPI call */
2209  os << "group=" << dd.group << ")";
2210  }
2211  else {
2212  os << "NULL)";
2213  }
2214  return os;
2215 }
2216 /**
2217  * C++ IO for a intercomm_create operation.
2218  */
2219 inline std::ostream& operator<<(std::ostream &os,
2220  const dumpi_intercomm_create &dd)
2221 {
2222  os << "dumpi_intercomm_create(";
2223  if(&dd) {
2224  /** Argument value before PMPI call */
2225  os << "localcomm=" << dd.localcomm << ", ";
2226  /** Argument value before PMPI call */
2227  os << "localleader=" << dd.localleader << ", ";
2228  /** Argument value before PMPI call */
2229  os << "remotecomm=" << dd.remotecomm << ", ";
2230  /** Argument value before PMPI call */
2231  os << "remoteleader=" << dd.remoteleader << ", ";
2232  /** Argument value before PMPI call */
2233  os << "tag=" << dd.tag << ", ";
2234  /** Argument value after PMPI call */
2235  os << "newcomm=" << dd.newcomm << ")";
2236  }
2237  else {
2238  os << "NULL)";
2239  }
2240  return os;
2241 }
2242 /**
2243  * C++ IO for a intercomm_merge operation.
2244  */
2245 inline std::ostream& operator<<(std::ostream &os,
2246  const dumpi_intercomm_merge &dd)
2247 {
2248  os << "dumpi_intercomm_merge(";
2249  if(&dd) {
2250  /** Argument value before PMPI call */
2251  os << "comm=" << dd.comm << ", ";
2252  /** Argument value before PMPI call */
2253  os << "high=" << dd.high << ", ";
2254  /** Argument value after PMPI call */
2255  os << "newcomm=" << dd.newcomm << ")";
2256  }
2257  else {
2258  os << "NULL)";
2259  }
2260  return os;
2261 }
2262 /**
2263  * C++ IO for a keyval_create operation.
2264  */
2265 inline std::ostream& operator<<(std::ostream &os,
2266  const dumpi_keyval_create &dd)
2267 {
2268  os << "dumpi_keyval_create(";
2269  if(&dd) {
2270  /** Argument value after PMPI call */
2271  os << "key=" << dd.key << ")";
2272  }
2273  else {
2274  os << "NULL)";
2275  }
2276  return os;
2277 }
2278 /**
2279  * C++ IO for a keyval_free operation.
2280  */
2281 inline std::ostream& operator<<(std::ostream &os, const dumpi_keyval_free &dd)
2282 {
2283  os << "dumpi_keyval_free(";
2284  if(&dd) {
2285  /** Argument value before PMPI call */
2286  os << "key=" << dd.key << ")";
2287  }
2288  else {
2289  os << "NULL)";
2290  }
2291  return os;
2292 }
2293 /**
2294  * C++ IO for a attr_put operation.
2295  */
2296 inline std::ostream& operator<<(std::ostream &os, const dumpi_attr_put &dd)
2297 {
2298  os << "dumpi_attr_put(";
2299  if(&dd) {
2300  /** Argument value before PMPI call */
2301  os << "comm=" << dd.comm << ", ";
2302  /** Argument value before PMPI call */
2303  os << "key=" << dd.key << ")";
2304  }
2305  else {
2306  os << "NULL)";
2307  }
2308  return os;
2309 }
2310 /**
2311  * C++ IO for a attr_get operation.
2312  */
2313 inline std::ostream& operator<<(std::ostream &os, const dumpi_attr_get &dd)
2314 {
2315  os << "dumpi_attr_get(";
2316  if(&dd) {
2317  /** Argument value before PMPI call */
2318  os << "comm=" << dd.comm << ", ";
2319  /** Argument value before PMPI call */
2320  os << "key=" << dd.key << ", ";
2321  /** Argument value after PMPI call */
2322  os << "flag=" << dd.flag << ")";
2323  }
2324  else {
2325  os << "NULL)";
2326  }
2327  return os;
2328 }
2329 /**
2330  * C++ IO for a attr_delete operation.
2331  */
2332 inline std::ostream& operator<<(std::ostream &os, const dumpi_attr_delete &dd)
2333 {
2334  os << "dumpi_attr_delete(";
2335  if(&dd) {
2336  /** Argument value before PMPI call */
2337  os << "comm=" << dd.comm << ", ";
2338  /** Argument value before PMPI call */
2339  os << "key=" << dd.key << ")";
2340  }
2341  else {
2342  os << "NULL)";
2343  }
2344  return os;
2345 }
2346 /**
2347  * C++ IO for a topo_test operation.
2348  */
2349 inline std::ostream& operator<<(std::ostream &os, const dumpi_topo_test &dd)
2350 {
2351  os << "dumpi_topo_test(";
2352  if(&dd) {
2353  /** Argument value before PMPI call */
2354  os << "comm=" << dd.comm << ", ";
2355  /** Argument value after PMPI call */
2356  os << "topo=" << dd.topo << ")";
2357  }
2358  else {
2359  os << "NULL)";
2360  }
2361  return os;
2362 }
2363 /**
2364  * C++ IO for a cart_create operation.
2365  */
2366 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_create &dd)
2367 {
2368  os << "dumpi_cart_create(";
2369  if(&dd) {
2370  /** Argument value before PMPI call */
2371  os << "oldcomm=" << dd.oldcomm << ", ";
2372  /** Argument value before PMPI call */
2373  os << "ndim=" << dd.ndim << ", ";
2374  /** Argument value before PMPI call. Array of length [ndim] */
2375  os << "dims=" << P::ints(dd.ndim, dd.dims) << ", ";
2376  /** Argument value before PMPI call. Array of length [ndim] */
2377  os << "periods=" << P::ints(dd.ndim, dd.periods) << ", ";
2378  /** Argument value before PMPI call */
2379  os << "reorder=" << dd.reorder << ", ";
2380  /** Argument value after PMPI call */
2381  os << "newcomm=" << dd.newcomm << ")";
2382  }
2383  else {
2384  os << "NULL)";
2385  }
2386  return os;
2387 }
2388 /**
2389  * C++ IO for a dims_create operation.
2390  */
2391 inline std::ostream& operator<<(std::ostream &os, const dumpi_dims_create &dd)
2392 {
2393  os << "dumpi_dims_create(";
2394  if(&dd) {
2395  /** Argument value before PMPI call */
2396  os << "nodes=" << dd.nodes << ", ";
2397  /** Argument value before PMPI call */
2398  os << "ndim=" << dd.ndim << ", ";
2399  /** Argument value before and after PMPI call. Array of lenght [ndim] */
2400  os << "dims={in=" << P::ints(dd.ndim, dd.dims.in) << ", out="
2401  << P::ints(dd.ndim, dd.dims.out) << "})";
2402  }
2403  else {
2404  os << "NULL)";
2405  }
2406  return os;
2407 }
2408 
2409 /**
2410  * C++ IO for a graph_create operation.
2411  */
2412 inline std::ostream& operator<<(std::ostream &os, const dumpi_graph_create &dd)
2413 {
2414  os << "dumpi_graph_create(";
2415  if(&dd) {
2416  /** Not an MPI argument. Added to index relevant data in the struct. */
2417  os << "numedges=" << dd.numedges << ", ";
2418  /** Argument value before PMPI call */
2419  os << "oldcomm=" << dd.oldcomm << ", ";
2420  /** Argument value before PMPI call */
2421  os << "nodes=" << dd.nodes << ", ";
2422  /** Argument value before PMPI call. Array of length [nodes] */
2423  os << "index=" << P::ints(dd.nodes, dd.index) << ", ";
2424  /** Argument value before PMPI call. Array of length [numedges] */
2425  os << "edges=" << P::ints(dd.numedges, dd.edges) << ", ";
2426  /** Argument value before PMPI call */
2427  os << "reorder=" << dd.reorder << ", ";
2428  /** Argument value after PMPI call */
2429  os << "newcomm=" << dd.newcomm << ")";
2430  }
2431  else {
2432  os << "NULL)";
2433  }
2434  return os;
2435 }
2436 /**
2437  * C++ IO for a graphdims_get operation.
2438  */
2439 inline std::ostream& operator<<(std::ostream &os,
2440  const dumpi_graphdims_get &dd)
2441 {
2442  os << "dumpi_graphdims_get(";
2443  if(&dd) {
2444  /** Argument value before PMPI call */
2445  os << "comm=" << dd.comm << ", ";
2446  /** Argument value after PMPI call */
2447  os << "nodes=" << dd.nodes << ", ";
2448  /** Argument value after PMPI call */
2449  os << "edges=" << dd.edges << ")";
2450  }
2451  else {
2452  os << "NULL)";
2453  }
2454  return os;
2455 }
2456 /**
2457  * C++ IO for a graph_get operation.
2458  */
2459 inline std::ostream& operator<<(std::ostream &os, const dumpi_graph_get &dd)
2460 {
2461  os << "dumpi_graph_get(";
2462  if(&dd) {
2463  /** Not an MPI argument. Added to index relevant data in the struct. */
2464  os << "totedges=" << dd.totedges << ", ";
2465  /** Not an MPI argument. Added to index relevant data in the struct. */
2466  os << "totnodes=" << dd.totnodes << ", ";
2467  /** Argument value before PMPI call */
2468  os << "comm=" << dd.comm << ", ";
2469  /** Argument value before PMPI call */
2470  os << "maxindex=" << dd.maxindex << ", ";
2471  /** Argument value before PMPI call */
2472  os << "maxedges=" << dd.maxedges << ", ";
2473  /** Argument value after PMPI call. Array of length [totnodes] */
2474  os << "index=" << P::ints(dd.totnodes, dd.index) << ", ";
2475  /** Argument value after PMPI call. Array of length [totedges] */
2476  os << "edges=" << P::ints(dd.totnodes, dd.edges) << ")";
2477  }
2478  else {
2479  os << "NULL)";
2480  }
2481  return os;
2482 }
2483 /**
2484  * C++ IO for a cartdim_get operation.
2485  */
2486 inline std::ostream& operator<<(std::ostream &os, const dumpi_cartdim_get &dd)
2487 {
2488  os << "dumpi_cartdim_get(";
2489  if(&dd) {
2490  /** Argument value before PMPI call */
2491  os << "comm=" << dd.comm << ", ";
2492  /** Argument value after PMPI call */
2493  os << "ndim=" << dd.ndim << ")";
2494  }
2495  else {
2496  os << "NULL)";
2497  }
2498  return os;
2499 }
2500 /**
2501  * C++ IO for a cart_get operation.
2502  */
2503 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_get &dd)
2504 {
2505  os << "dumpi_cart_get(";
2506  if(&dd) {
2507  /** Not an MPI argument. Added to index relevant data in the struct. */
2508  os << "ndim=" << dd.ndim << ", ";
2509  /** Argument value before PMPI call */
2510  os << "comm=" << dd.comm << ", ";
2511  /** Argument value before PMPI call */
2512  os << "maxdims=" << dd.maxdims << ", ";
2513  /** Argument value after PMPI call. Array of length [ndim] */
2514  os << "dims=" << P::ints(dd.ndim, dd.dims) << ", ";
2515  /** Argument value after PMPI call. Array of length [ndim] */
2516  os << "periods=" << P::ints(dd.ndim, dd.periods) << ", ";
2517  /** Argument value after PMPI call */
2518  os << "coords=" << dd.coords << ")";
2519  }
2520  else {
2521  os << "NULL)";
2522  }
2523  return os;
2524 }
2525 /**
2526  * C++ IO for a cart_rank operation.
2527  */
2528 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_rank &dd)
2529 {
2530  os << "dumpi_cart_rank(";
2531  if(&dd) {
2532  /** Not an MPI argument. Added to index relevant data in the struct. */
2533  os << "ndim=" << dd.ndim << ", ";
2534  /** Argument value before PMPI call */
2535  os << "comm=" << dd.comm << ", ";
2536  /** Argument value before PMPI call. Array of length [ndim] */
2537  os << "coords=" << P::ints(dd.ndim, dd.coords) << ", ";
2538  /** Argument value after PMPI call */
2539  os << "rank=" << dd.rank << ")";
2540  }
2541  else {
2542  os << "NULL)";
2543  }
2544  return os;
2545 }
2546 /**
2547  * C++ IO for a cart_coords operation.
2548  */
2549 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_coords &dd)
2550 {
2551  os << "dumpi_cart_coords(";
2552  if(&dd) {
2553  /** Not an MPI argument. Added to index relevant data in the struct. */
2554  os << "ndim=" << dd.ndim << ", ";
2555  /** Argument value before PMPI call */
2556  os << "comm=" << dd.comm << ", ";
2557  /** Argument value before PMPI call */
2558  os << "rank=" << dd.rank << ", ";
2559  /** Argument value before PMPI call */
2560  os << "maxdims=" << dd.maxdims << ", ";
2561  /** Argument value after PMPI call. Array of length [ndim] */
2562  os << "coords=" << P::ints(dd.ndim, dd.coords) << ")";
2563  }
2564  else {
2565  os << "NULL)";
2566  }
2567  return os;
2568 }
2569 /**
2570  * C++ IO for a graph_neighbors_count operation.
2571  */
2572 inline std::ostream& operator<<(std::ostream &os,
2573  const dumpi_graph_neighbors_count &dd)
2574 {
2575  os << "dumpi_graph_neighbors_count(";
2576  if(&dd) {
2577  /** Argument value before PMPI call */
2578  os << "comm=" << dd.comm << ", ";
2579  /** Argument value before PMPI call */
2580  os << "rank=" << dd.rank << ", ";
2581  /** Argument value after PMPI call */
2582  os << "nneigh=" << dd.nneigh << ")";
2583  }
2584  else {
2585  os << "NULL)";
2586  }
2587  return os;
2588 }
2589 /**
2590  * C++ IO for a graph_neighbors operation.
2591  */
2592 inline std::ostream& operator<<(std::ostream &os,
2593  const dumpi_graph_neighbors &dd)
2594 {
2595  os << "dumpi_graph_neighbors(";
2596  if(&dd) {
2597  /** Not an MPI argument. Added to index relevant data in the struct. */
2598  os << "nneigh=" << dd.nneigh << ", ";
2599  /** Argument value before PMPI call */
2600  os << "comm=" << dd.comm << ", ";
2601  /** Argument value before PMPI call */
2602  os << "rank=" << dd.rank << ", ";
2603  /** Argument value before PMPI call */
2604  os << "maxneighbors=" << dd.maxneighbors << ", ";
2605  /** Argument value after PMPI call. Array of length [nneigh] */
2606  os << "neighbors=" << P::ints(dd.nneigh, dd.neighbors) << ")";
2607  }
2608  else {
2609  os << "NULL)";
2610  }
2611  return os;
2612 }
2613 /**
2614  * C++ IO for a cart_shift operation.
2615  */
2616 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_shift &dd)
2617 {
2618  os << "dumpi_cart_shift(";
2619  if(&dd) {
2620  /** Argument value before PMPI call */
2621  os << "comm=" << dd.comm << ", ";
2622  /** Argument value before PMPI call */
2623  os << "direction=" << dd.direction << ", ";
2624  /** Argument value before PMPI call */
2625  os << "displ=" << dd.displ << ", ";
2626  /** Argument value after PMPI call */
2627  os << "source=" << dd.source << ", ";
2628  /** Argument value after PMPI call */
2629  os << "dest=" << dd.dest << ")";
2630  }
2631  else {
2632  os << "NULL)";
2633  }
2634  return os;
2635 }
2636 /**
2637  * C++ IO for a cart_sub operation.
2638  */
2639 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_sub &dd)
2640 {
2641  os << "dumpi_cart_sub(";
2642  if(&dd) {
2643  /** Not an MPI argument. Added to index relevant data in the struct. */
2644  os << "ndim=" << dd.ndim << ", ";
2645  /** Argument value before PMPI call */
2646  os << "oldcomm=" << dd.oldcomm << ", ";
2647  /** Argument value before PMPI call. Array of length [ndim] */
2648  os << "remain_dims=" << P::ints(dd.ndim, dd.remain_dims) << ", ";
2649  /** Argument value after PMPI call */
2650  os << "newcomm=" << dd.newcomm << ")";
2651  }
2652  else {
2653  os << "NULL)";
2654  }
2655  return os;
2656 }
2657 /**
2658  * C++ IO for a cart_map operation.
2659  */
2660 inline std::ostream& operator<<(std::ostream &os, const dumpi_cart_map &dd)
2661 {
2662  os << "dumpi_cart_map(";
2663  if(&dd) {
2664  /** Argument value before PMPI call */
2665  os << "comm=" << dd.comm << ", ";
2666  /** Argument value before PMPI call */
2667  os << "ndim=" << dd.ndim << ", ";
2668  /** Argument value before PMPI call. Array of length [ndim] */
2669  os << "dims=" << P::ints(dd.ndim, dd.dims) << ", ";
2670  /** Argument value before PMPI call. Array of length [ndim] */
2671  os << "period=" << P::ints(dd.ndim, dd.period) << ", ";
2672  /** Argument value after PMPI call */
2673  os << "newrank=" << dd.newrank << ")";
2674  }
2675  else {
2676  os << "NULL)";
2677  }
2678  return os;
2679 }
2680 /**
2681  * C++ IO for a graph_map operation.
2682  */
2683 inline std::ostream& operator<<(std::ostream &os, const dumpi_graph_map &dd)
2684 {
2685  os << "dumpi_graph_map(";
2686  if(&dd) {
2687  /** Not an MPI argument. Added to index relevant data in the struct. */
2688  os << "numedges=" << dd.numedges << ", ";
2689  /** Argument value before PMPI call */
2690  os << "comm=" << dd.comm << ", ";
2691  /** Argument value before PMPI call */
2692  os << "nodes=" << dd.nodes << ", ";
2693  /** Argument value before PMPI call. Array of length [nodes] */
2694  os << "index=" << P::ints(dd.nodes, dd.index) << ", ";
2695  /** Argument value before PMPI call. Array of length [numedges] */
2696  os << "edges=" << P::ints(dd.numedges, dd.edges) << ", ";
2697  /** Argument value after PMPI call */
2698  os << "newrank=" << dd.newrank << ")";
2699  }
2700  else {
2701  os << "NULL)";
2702  }
2703  return os;
2704 }
2705 /**
2706  * C++ IO for a get_processor_name operation.
2707  */
2708 inline std::ostream& operator<<(std::ostream &os,
2709  const dumpi_get_processor_name &dd)
2710 {
2711  os << "dumpi_get_processor_name(";
2712  if(&dd) {
2713  /** Argument value after PMPI call. Array of length [*resultlen] */
2714  os << "name=\"" << dd.name << "\", ";
2715  /** Argument value after PMPI call */
2716  os << "resultlen=" << dd.resultlen << ")";
2717  }
2718  else {
2719  os << "NULL)";
2720  }
2721  return os;
2722 }
2723 /**
2724  * C++ IO for a get_version operation.
2725  */
2726 inline std::ostream& operator<<(std::ostream &os, const dumpi_get_version &dd)
2727 {
2728  os << "dumpi_get_version(";
2729  if(&dd) {
2730  /** Argument value after PMPI call */
2731  os << "version=" << dd.version << ", ";
2732  /** Argument value after PMPI call */
2733  os << "subversion=" << dd.subversion << ")";
2734  }
2735  else {
2736  os << "NULL)";
2737  }
2738  return os;
2739 }
2740 /**
2741  * C++ IO for a errhandler_create operation.
2742  */
2743 inline std::ostream& operator<<(std::ostream &os,
2744  const dumpi_errhandler_create &dd)
2745 {
2746  os << "dumpi_errhandler_create(";
2747  if(&dd) {
2748  /** Argument value after PMPI call */
2749  os << "errhandler=" << dd.errhandler << ")";
2750  }
2751  else {
2752  os << "NULL)";
2753  }
2754  return os;
2755 }
2756 /**
2757  * C++ IO for a errhandler_set operation.
2758  */
2759 inline std::ostream& operator<<(std::ostream &os,
2760  const dumpi_errhandler_set &dd)
2761 {
2762  os << "dumpi_errhandler_set(";
2763  if(&dd) {
2764  /** Argument value before PMPI call */
2765  os << "comm=" << dd.comm << ", ";
2766  /** Argument value before PMPI call */
2767  os << "errhandler=" << dd.errhandler << ")";
2768  }
2769  else {
2770  os << "NULL)";
2771  }
2772  return os;
2773 }
2774 /**
2775  * C++ IO for a errhandler_get operation.
2776  */
2777 inline std::ostream& operator<<(std::ostream &os,
2778  const dumpi_errhandler_get &dd)
2779 {
2780  os << "dumpi_errhandler_get(";
2781  if(&dd) {
2782  /** Argument value before PMPI call */
2783  os << "comm=" << dd.comm << ", ";
2784  /** Argument value after PMPI call */
2785  os << "errhandler=" << dd.errhandler << ")";
2786  }
2787  else {
2788  os << "NULL)";
2789  }
2790  return os;
2791 }
2792 /**
2793  * C++ IO for a errhandler_free operation.
2794  */
2795 inline std::ostream& operator<<(std::ostream &os,
2796  const dumpi_errhandler_free &dd)
2797 {
2798  os << "dumpi_errhandler_free(";
2799  if(&dd) {
2800  /** Argument value before PMPI call */
2801  os << "errhandler=" << dd.errhandler << ")";
2802  }
2803  else {
2804  os << "NULL)";
2805  }
2806  return os;
2807 }
2808 /**
2809  * C++ IO for a error_string operation.
2810  */
2811 inline std::ostream& operator<<(std::ostream &os, const dumpi_error_string &dd)
2812 {
2813  os << "dumpi_error_string(";
2814  if(&dd) {
2815  /** Argument value before PMPI call */
2816  os << "errorcode=" << dd.errorcode << ", ";
2817  /** Argument value after PMPI call. Array of length [*resultlen] */
2818  os << "errorstring=\"" << dd.errorstring << "\", ";
2819  /** Argument value after PMPI call */
2820  os << "resultlen=" << dd.resultlen << ")";
2821  }
2822  else {
2823  os << "NULL)";
2824  }
2825  return os;
2826 }
2827 /**
2828  * C++ IO for a error_class operation.
2829  */
2830 inline std::ostream& operator<<(std::ostream &os, const dumpi_error_class &dd)
2831 {
2832  os << "dumpi_error_class(";
2833  if(&dd) {
2834  /** Argument value before PMPI call */
2835  os << "errorcode=" << dd.errorcode << ", ";
2836  /** Argument value after PMPI call */
2837  os << "errorclass=" << dd.errorclass << ")";
2838  }
2839  else {
2840  os << "NULL)";
2841  }
2842  return os;
2843 }
2844 /**
2845  * C++ IO for a wtime operation.
2846  */
2847 inline std::ostream& operator<<(std::ostream &os, const dumpi_wtime &dd)
2848 {
2849  os << "dumpi_wtime(";
2850  if(&dd) {
2851  os << "psec=" << dd.psec << ")";
2852  }
2853  else {
2854  os << "NULL)";
2855  }
2856  return os;
2857 }
2858 /**
2859  * C++ IO for a wtick operation.
2860  */
2861 inline std::ostream& operator<<(std::ostream &os, const dumpi_wtick &dd)
2862 {
2863  os << "dumpi_wtick(";
2864  if(&dd) {
2865  os << "psec=" << dd.psec << ")";
2866  }
2867  else {
2868  os << "NULL)";
2869  }
2870  return os;
2871 }
2872 /**
2873  * C++ IO for a init operation.
2874  */
2875 inline std::ostream& operator<<(std::ostream &os, const dumpi_init &dd)
2876 {
2877  os << "dumpi_init(";
2878  if(&dd) {
2879  /** Argument value before PMPI call */
2880  os << "argc=" << dd.argc << ", ";
2881  /**
2882  * Argument value before PMPI call.
2883  * Array of length [argc] containing NUL-terminated std::strings.
2884  */
2885  os << "argv=" << P::stringarray(dd.argc, dd.argv) << ")";
2886  }
2887  else {
2888  os << "NULL)";
2889  }
2890  return os;
2891 }
2892 /**
2893  * C++ IO for a finalize operation.
2894  */
2895 inline std::ostream& operator<<(std::ostream &os, const dumpi_finalize &dd)
2896 {
2897  os << "dumpi_finalize(";
2898  if(&dd) {
2899  os << ")";
2900  }
2901  else {
2902  os << "NULL)";
2903  }
2904  return os;
2905 }
2906 /**
2907  * C++ IO for a initialized operation.
2908  */
2909 inline std::ostream& operator<<(std::ostream &os, const dumpi_initialized &dd)
2910 {
2911  os << "dumpi_initialized(";
2912  if(&dd) {
2913  /** Argument value after PMPI call */
2914  os << "result=" << dd.result << ")";
2915  }
2916  else {
2917  os << "NULL)";
2918  }
2919  return os;
2920 }
2921 /**
2922  * C++ IO for a abort operation.
2923  */
2924 inline std::ostream& operator<<(std::ostream &os, const dumpi_abort &dd)
2925 {
2926  os << "dumpi_abort(";
2927  if(&dd) {
2928  /** Argument value before PMPI call */
2929  os << "comm=" << dd.comm << ", ";
2930  /** Argument value before PMPI call */
2931  os << "errorcode=" << dd.errorcode << ")";
2932  }
2933  else {
2934  os << "NULL)";
2935  }
2936  return os;
2937 }
2938 /**
2939  * C++ IO for a close_port operation.
2940  */
2941 inline std::ostream& operator<<(std::ostream &os, const dumpi_close_port &dd)
2942 {
2943  os << "dumpi_close_port(";
2944  if(&dd) {
2945  /** Argument value before PMPI call. NUL-terminated std::string */
2946  os << "portname=\"" << dd.portname << "\")";
2947  }
2948  else {
2949  os << "NULL)";
2950  }
2951  return os;
2952 }
2953 /**
2954  * C++ IO for a comm_accept operation.
2955  */
2956 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_accept &dd)
2957 {
2958  os << "dumpi_comm_accept(";
2959  if(&dd) {
2960  /** Argument value before PMPI call. NUL-terminated std::string */
2961  os << "portname=\"" << dd.portname << "\", ";
2962  /** Argument value before PMPI call */
2963  os << "info=" << dd.info << ", ";
2964  /** Argument value before PMPI call */
2965  os << "root=" << dd.root << ", ";
2966  /** Argument value before PMPI call */
2967  os << "oldcomm=" << dd.oldcomm << ", ";
2968  /** Argument value after PMPI call */
2969  os << "newcomm=" << dd.newcomm << ")";
2970  }
2971  else {
2972  os << "NULL)";
2973  }
2974  return os;
2975 }
2976 /**
2977  * C++ IO for a comm_connect operation.
2978  */
2979 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_connect &dd)
2980 {
2981  os << "dumpi_comm_connect(";
2982  if(&dd) {
2983  /** Argument value before PMPI call. NUL-terminated std::string */
2984  os << "portname=\"" << dd.portname << "\", ";
2985  /** Argument value before PMPI call */
2986  os << "info=" << dd.info << ", ";
2987  /** Argument value before PMPI call */
2988  os << "root=" << dd.root << ", ";
2989  /** Argument value before PMPI call */
2990  os << "oldcomm=" << dd.oldcomm << ", ";
2991  /** Argument value after PMPI call */
2992  os << "newcomm=" << dd.newcomm << ")";
2993  }
2994  else {
2995  os << "NULL)";
2996  }
2997  return os;
2998 }
2999 /**
3000  * C++ IO for a comm_disconnect operation.
3001  */
3002 inline std::ostream& operator<<(std::ostream &os,
3003  const dumpi_comm_disconnect &dd)
3004 {
3005  os << "dumpi_comm_disconnect(";
3006  if(&dd) {
3007  /** Argument value before PMPI call */
3008  os << "comm=" << dd.comm << ")";
3009  }
3010  else {
3011  os << "NULL)";
3012  }
3013  return os;
3014 }
3015 /**
3016  * C++ IO for a comm_get_parent operation.
3017  */
3018 inline std::ostream& operator<<(std::ostream &os,
3019  const dumpi_comm_get_parent &dd)
3020 {
3021  os << "dumpi_comm_get_parent(";
3022  if(&dd) {
3023  /** Argument value after PMPI call */
3024  os << "parent=" << dd.parent << ")";
3025  }
3026  else {
3027  os << "NULL)";
3028  }
3029  return os;
3030 }
3031 /**
3032  * C++ IO for a comm_join operation.
3033  */
3034 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_join &dd)
3035 {
3036  os << "dumpi_comm_join(";
3037  if(&dd) {
3038  /** Argument value before PMPI call */
3039  os << "fd=" << dd.fd << ", ";
3040  /** Argument value after PMPI call */
3041  os << "comm=" << dd.comm << ")";
3042  }
3043  else {
3044  os << "NULL)";
3045  }
3046  return os;
3047 }
3048 /**
3049  * C++ IO for a comm_spawn operation.
3050  */
3051 inline std::ostream& operator<<(std::ostream &os, const dumpi_comm_spawn &dd)
3052 {
3053  os << "dumpi_comm_spawn(";
3054  if(&dd) {
3055  /** Not an MPI argument. Added to index relevant data in the struct. */
3056  os << "oldcommrank=" << dd.oldcommrank << ", ";
3057  /**
3058  * Argument value before PMPI call. NUL-terminated std::string.
3059  * Only stored if(oldcommrank==root)
3060  */
3061  os << "command=\"" << dd.command << "\", ";
3062  /**
3063  * Argument value before PMPI call.
3064  * Null-terminated array of containing NUL-terminated std::strings.
3065  * Only stored if(oldcommrank==root)
3066  */
3067  os << "argv="
3068  << P::stringarraynull(dd.oldcommrank == dd.root, dd.argv) << ", ";
3069  /** Argument value before PMPI call. Only stored if(oldcommrank==root) */
3070  os << "maxprocs=" << dd.maxprocs << ", ";
3071  /** Argument value before PMPI call. Only stored if(oldcommrank==root) */
3072  os << "info=" << dd.info << ", ";
3073  /** Argument value before PMPI call */
3074  os << "root=" << dd.root << ", ";
3075  /** Argument value before PMPI call */
3076  os << "oldcomm=" << dd.oldcomm << ", ";
3077  /** Argument value after PMPI call */
3078  os << "newcomm=" << dd.newcomm << ", ";
3079  /**
3080  * Argument value after PMPI call. Array of length [maxprocs].
3081  * Only stored if(oldcommrank==root)
3082  */
3083  os << "errcodes="
3084  << P::ints(dd.oldcommrank == dd.root, dd.maxprocs, dd.errcodes)
3085  << ")";
3086  }
3087  else {
3088  os << "NULL)";
3089  }
3090  return os;
3091 }
3092 /**
3093  * C++ IO for a comm_spawn_multiple operation.
3094  */
3095 inline std::ostream& operator<<(std::ostream &os,
3096  const dumpi_comm_spawn_multiple &dd)
3097 {
3098  os << "dumpi_comm_spawn_multiple(";
3099  if(&dd) {
3100  /** Not an MPI argument. Added to index relevant data in the struct. */
3101  os << "totprocs=" << dd.totprocs << ", ";
3102  /** Not an MPI argument. Added to index relevant data in the struct. */
3103  os << "oldcommrank=" << dd.oldcommrank << ", ";
3104  /** Argument value before PMPI call. Only stored if(oldcommrank==root) */
3105  os << "count=" << dd.count << ", ";
3106  /**
3107  * Argument value before PMPI call.
3108  * Array of length [count] containing NUL-terminated std::strings.
3109  * Only stored if(oldcommrank==root)
3110  */
3111  os << "commands="
3112  << P::stringarray(dd.oldcommrank == dd.root, dd.count, dd.commands)
3113  << ", ";
3114  /**
3115  * Argument value before PMPI call.
3116  * 3D-array of length [count], with second-dimension NULL-terminated,
3117  * and third dimension NUL-terminated strings (MPI_Comm_spawn_multiple
3118  * is completely insane).
3119  * Only stored if(oldcommrank==root)
3120  */
3121  os << "argvs="
3122  << P::stringarraynull2d(dd.oldcommrank==dd.root,dd.count,dd.argvs)
3123  << ", ";
3124  /**
3125  * Argument value before PMPI call. Array of length [count].
3126  * Only stored if(oldcommrank==root)
3127  */
3128  os << "maxprocs="
3129  << P::ints(dd.oldcommrank == dd.root, dd.count, dd.maxprocs)
3130  << ", ";
3131  /**
3132  * Argument value before PMPI call. Array of length [count].
3133  * Only stored if(oldcommrank==root)
3134  */
3135  os << "info="
3136  << P::ints(dd.oldcommrank == dd.root, dd.count, dd.info) << ", ";
3137  /** Argument value before PMPI call */
3138  os << "root=" << dd.root << ", ";
3139  /** Argument value before PMPI call */
3140  os << "oldcomm=" << dd.oldcomm << ", ";
3141  /** Argument value after PMPI call */
3142  os << "newcomm=" << dd.newcomm << ", ";
3143  /**
3144  * Argument value after PMPI call. Array of length [totprocs].
3145  * Only stored if(oldcommrank==root)
3146  */
3147  os << "errcodes="
3148  << P::ints(dd.oldcommrank==dd.root, dd.totprocs, dd.errcodes)
3149  << ")";
3150  }
3151  else {
3152  os << "NULL)";
3153  }
3154  return os;
3155 }
3156 /**
3157  * C++ IO for a lookup_name operation.
3158  */
3159 inline std::ostream& operator<<(std::ostream &os, const dumpi_lookup_name &dd)
3160 {
3161  os << "dumpi_lookup_name(";
3162  if(&dd) {
3163  /** Argument value before PMPI call. NUL-terminated std::string */
3164  os << "servicename=\"" << dd.servicename << "\", ";
3165  /** Argument value before PMPI call */
3166  os << "info=" << dd.info << ", ";
3167  /** Argument value after PMPI call. NUL-terminated std::string. */
3168  os << "portname=\"" << dd.portname << "\")";
3169  }
3170  else {
3171  os << "NULL)";
3172  }
3173  return os;
3174 }
3175 /**
3176  * C++ IO for a open_port operation.
3177  */
3178 inline std::ostream& operator<<(std::ostream &os, const dumpi_open_port &dd)
3179 {
3180  os << "dumpi_open_port(";
3181  if(&dd) {
3182  /** Argument value before PMPI call */
3183  os << "info=" << dd.info << ", ";
3184  /** Argument value after PMPI call. NUL-terminated std::string */
3185  os << "portname=\"" << dd.portname << "\")";
3186  }
3187  else {
3188  os << "NULL)";
3189  }
3190  return os;
3191 }
3192 /**
3193  * C++ IO for a publish_name operation.
3194  */
3195 inline std::ostream& operator<<(std::ostream &os, const dumpi_publish_name &dd)
3196 {
3197  os << "dumpi_publish_name(";
3198  if(&dd) {
3199  /** Argument value before PMPI call. NUL-terminated std::string */
3200  os << "servicename=\"" << dd.servicename << "\", ";
3201  /** Argument value before PMPI call */
3202  os << "info=" << dd.info << ", ";
3203  /** Argument value before PMPI call. NUL-terminated std::string */
3204  os << "portname=\"" << dd.portname << "\")";
3205  }
3206  else {
3207  os << "NULL)";
3208  }
3209  return os;
3210 }
3211 /**
3212  * C++ IO for a unpublish_name operation.
3213  */
3214 inline std::ostream& operator<<(std::ostream &os,
3215  const dumpi_unpublish_name &dd)
3216 {
3217  os << "dumpi_unpublish_name(";
3218  if(&dd) {
3219  /** Argument value before PMPI call. NUL-terminated std::string */
3220  os << "servicename=\"" << dd.servicename << "\", ";
3221  /** Argument value before PMPI call */
3222  os << "info=" << dd.info << ", ";
3223  /** Argument value before PMPI call. NUL-terminated std::string */
3224  os << "portname=\"" << dd.portname << "\")";
3225  }
3226  else {
3227  os << "NULL)";
3228  }
3229  return os;
3230 }
3231 /**
3232  * C++ IO for a accumulate operation.
3233  */
3234 inline std::ostream& operator<<(std::ostream &os, const dumpi_accumulate &dd)
3235 {
3236  os << "dumpi_accumulate(";
3237  if(&dd) {
3238  /** Argument value before PMPI call */
3239  os << "origincount=" << dd.origincount << ", ";
3240  /** Argument value before PMPI call */
3241  os << "origintype=" << dd.origintype << ", ";
3242  /** Argument value before PMPI call */
3243  os << "targetrank=" << dd.targetrank << ", ";
3244  /** Argument value before PMPI call */
3245  os << "targetdisp=" << dd.targetdisp << ", ";
3246  /** Argument value before PMPI call */
3247  os << "targetcount=" << dd.targetcount << ", ";
3248  /** Argument value before PMPI call */
3249  os << "targettype=" << dd.targettype << ", ";
3250  /** Argument value before PMPI call */
3251  os << "op=" << dd.op << ", ";
3252  /** Argument value before PMPI call */
3253  os << "win=" << dd.win << ")";
3254  }
3255  else {
3256  os << "NULL)";
3257  }
3258  return os;
3259 }
3260 /**
3261  * C++ IO for a get operation.
3262  */
3263 inline std::ostream& operator<<(std::ostream &os, const dumpi_get &dd)
3264 {
3265  os << "dumpi_get(";
3266  if(&dd) {
3267  /** Argument value before PMPI call */
3268  os << "origincount=" << dd.origincount << ", ";
3269  /** Argument value before PMPI call */
3270  os << "origintype=" << dd.origintype << ", ";
3271  /** Argument value before PMPI call */
3272  os << "targetrank=" << dd.targetrank << ", ";
3273  /** Argument value before PMPI call */
3274  os << "targetdisp=" << dd.targetdisp << ", ";
3275  /** Argument value before PMPI call */
3276  os << "targetcount=" << dd.targetcount << ", ";
3277  /** Argument value before PMPI call */
3278  os << "targettype=" << dd.targettype << ", ";
3279  /** Argument value before PMPI call */
3280  os << "win=" << dd.win << ")";
3281  }
3282  else {
3283  os << "NULL)";
3284  }
3285  return os;
3286 }
3287 /**
3288  * C++ IO for a put operation.
3289  */
3290 inline std::ostream& operator<<(std::ostream &os, const dumpi_put &dd)
3291 {
3292  os << "dumpi_put(";
3293  if(&dd) {
3294  /** Argument value before PMPI call */
3295  os << "origincount=" << dd.origincount << ", ";
3296  /** Argument value before PMPI call */
3297  os << "origintype=" << dd.origintype << ", ";
3298  /** Argument value before PMPI call */
3299  os << "targetrank=" << dd.targetrank << ", ";
3300  /** Argument value before PMPI call */
3301  os << "targetdisp=" << dd.targetdisp << ", ";
3302  /** Argument value before PMPI call */
3303  os << "targetcount=" << dd.targetcount << ", ";
3304  /** Argument value before PMPI call */
3305  os << "targettype=" << dd.targettype << ", ";
3306  /** Argument value before PMPI call */
3307  os << "win=" << dd.win << ")";
3308  }
3309  else {
3310  os << "NULL)";
3311  }
3312  return os;
3313 }
3314 /**
3315  * C++ IO for a win_complete operation.
3316  */
3317 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_complete &dd)
3318 {
3319  os << "dumpi_win_complete(";
3320  if(&dd) {
3321  /** Argument value before PMPI call */
3322  os << "win=" << dd.win << ")";
3323  }
3324  else {
3325  os << "NULL)";
3326  }
3327  return os;
3328 }
3329 /**
3330  * C++ IO for a win_create operation.
3331  */
3332 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_create &dd)
3333 {
3334  os << "dumpi_win_create(";
3335  if(&dd) {
3336  /** Argument value before PMPI call */
3337  os << "size=" << dd.size << ", ";
3338  /** Argument value before PMPI call */
3339  os << "dispunit=" << dd.dispunit << ", ";
3340  /** Argument value before PMPI call */
3341  os << "info=" << dd.info << ", ";
3342  /** Argument value before PMPI call */
3343  os << "comm=" << dd.comm << ", ";
3344  /** Argument value after PMPI call */
3345  os << "win=" << dd.win << ")";
3346  }
3347  else {
3348  os << "NULL)";
3349  }
3350  return os;
3351 }
3352 /**
3353  * C++ IO for a win_fence operation.
3354  */
3355 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_fence &dd)
3356 {
3357  os << "dumpi_win_fence(";
3358  if(&dd) {
3359  /** Argument value before PMPI call */
3360  os << "assertion=" << dd.assertion << ", ";
3361  /** Argument value before PMPI call */
3362  os << "win=" << dd.win << ")";
3363  }
3364  else {
3365  os << "NULL)";
3366  }
3367  return os;
3368 }
3369 /**
3370  * C++ IO for a win_free operation.
3371  */
3372 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_free &dd)
3373 {
3374  os << "dumpi_win_free(";
3375  if(&dd) {
3376  /** Argument value before PMPI call */
3377  os << "win=" << dd.win << ")";
3378  }
3379  else {
3380  os << "NULL)";
3381  }
3382  return os;
3383 }
3384 /**
3385  * C++ IO for a win_get_group operation.
3386  */
3387 inline std::ostream& operator<<(std::ostream &os,
3388  const dumpi_win_get_group &dd)
3389 {
3390  os << "dumpi_win_get_group(";
3391  if(&dd) {
3392  /** Argument value before PMPI call */
3393  os << "win=" << dd.win << ", ";
3394  /** Argument value after PMPI call */
3395  os << "group=" << dd.group << ")";
3396  }
3397  else {
3398  os << "NULL)";
3399  }
3400  return os;
3401 }
3402 /**
3403  * C++ IO for a win_lock operation.
3404  */
3405 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_lock &dd)
3406 {
3407  os << "dumpi_win_lock(";
3408  if(&dd) {
3409  /** Argument value before PMPI call */
3410  os << "locktype=" << dd.locktype << ", ";
3411  /** Argument value before PMPI call */
3412  os << "winrank=" << dd.winrank << ", ";
3413  /** Argument value before PMPI call */
3414  os << "assertion=" << dd.assertion << ", ";
3415  /** Argument value before PMPI call */
3416  os << "win=" << dd.win << ")";
3417  }
3418  else {
3419  os << "NULL)";
3420  }
3421  return os;
3422 }
3423 /**
3424  * C++ IO for a win_post operation.
3425  */
3426 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_post &dd)
3427 {
3428  os << "dumpi_win_post(";
3429  if(&dd) {
3430  /** Argument value before PMPI call */
3431  os << "group=" << dd.group << ", ";
3432  /** Argument value before PMPI call */
3433  os << "assertion=" << dd.assertion << ", ";
3434  /** Argument value before PMPI call */
3435  os << "win=" << dd.win << ")";
3436  }
3437  else {
3438  os << "NULL)";
3439  }
3440  return os;
3441 }
3442 /**
3443  * C++ IO for a win_start operation.
3444  */
3445 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_start &dd)
3446 {
3447  os << "dumpi_win_start(";
3448  if(&dd) {
3449  /** Argument value before PMPI call */
3450  os << "group=" << dd.group << ", ";
3451  /** Argument value before PMPI call */
3452  os << "assertion=" << dd.assertion << ", ";
3453  /** Argument value before PMPI call */
3454  os << "win=" << dd.win << ")";
3455  }
3456  else {
3457  os << "NULL)";
3458  }
3459  return os;
3460 }
3461 /**
3462  * C++ IO for a win_test operation.
3463  */
3464 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_test &dd)
3465 {
3466  os << "dumpi_win_test(";
3467  if(&dd) {
3468  /** Argument value before PMPI call */
3469  os << "win=" << dd.win << ", ";
3470  /** Argument value after PMPI call */
3471  os << "flag=" << dd.flag << ")";
3472  }
3473  else {
3474  os << "NULL)";
3475  }
3476  return os;
3477 }
3478 /**
3479  * C++ IO for a win_unlock operation.
3480  */
3481 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_unlock &dd)
3482 {
3483  os << "dumpi_win_unlock(";
3484  if(&dd) {
3485  /** Argument value before PMPI call */
3486  os << "winrank=" << dd.winrank << ", ";
3487  /** Argument value before PMPI call */
3488  os << "win=" << dd.win << ")";
3489  }
3490  else {
3491  os << "NULL)";
3492  }
3493  return os;
3494 }
3495 /**
3496  * C++ IO for a win_wait operation.
3497  */
3498 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_wait &dd)
3499 {
3500  os << "dumpi_win_wait(";
3501  if(&dd) {
3502  /** Argument value before PMPI call */
3503  os << "win=" << dd.win << ")";
3504  }
3505  else {
3506  os << "NULL)";
3507  }
3508  return os;
3509 }
3510 /**
3511  * C++ IO for a alltoallw operation.
3512  */
3513 inline std::ostream& operator<<(std::ostream &os, const dumpi_alltoallw &dd)
3514 {
3515  os << "dumpi_alltoallw(";
3516  if(&dd) {
3517  /** Not an MPI argument. Added to index relevant data in the struct. */
3518  os << "commsize=" << dd.commsize << ", ";
3519  /** Argument value before PMPI call. Array of length [commsize] */
3520  os << "sendcounts=" << P::ints(dd.commsize, dd.sendcounts) << ", ";
3521  /** Argument value before PMPI call. Array of length [commsize] */
3522  os << "senddispls=" << P::ints(dd.commsize, dd.senddispls) << ", ";
3523  /** Argument value before PMPI call. Array of length [commsize] */
3524  os << "sendtypes=" << P::ints(dd.commsize, dd.sendtypes) << ", ";
3525  /** Argument value before PMPI call. Array of length [commsize] */
3526  os << "recvcounts=" << P::ints(dd.commsize, dd.recvcounts) << ", ";
3527  /** Argument value before PMPI call. Array of length [commsize] */
3528  os << "recvdispls=" << P::ints(dd.commsize, dd.recvdispls) << ", ";
3529  /** Argument value before PMPI call. Array of length [commsize] */
3530  os << "recvtypes=" << P::ints(dd.commsize, dd.recvtypes) << ", ";
3531  /** Argument value before PMPI call */
3532  os << "comm=" << dd.comm << ")";
3533  }
3534  else {
3535  os << "NULL)";
3536  }
3537  return os;
3538 }
3539 /**
3540  * C++ IO for a exscan operation.
3541  */
3542 inline std::ostream& operator<<(std::ostream &os, const dumpi_exscan &dd)
3543 {
3544  os << "dumpi_exscan(";
3545  if(&dd) {
3546  /** Argument value before PMPI call */
3547  os << "count=" << dd.count << ", ";
3548  /** Argument value before PMPI call */
3549  os << "datatype=" << dd.datatype << ", ";
3550  /** Argument value before PMPI call */
3551  os << "op=" << dd.op << ", ";
3552  /** Argument value before PMPI call */
3553  os << "comm=" << dd.comm << ")";
3554  }
3555  else {
3556  os << "NULL)";
3557  }
3558  return os;
3559 }
3560 /**
3561  * C++ IO for a add_error_class operation.
3562  */
3563 inline std::ostream& operator<<(std::ostream &os,
3564  const dumpi_add_error_class &dd)
3565 {
3566  os << "dumpi_add_error_class(";
3567  if(&dd) {
3568  /** Argument value after PMPI call */
3569  os << "errorclass=" << dd.errorclass << ")";
3570  }
3571  else {
3572  os << "NULL)";
3573  }
3574  return os;
3575 }
3576 /**
3577  * C++ IO for a add_error_code operation.
3578  */
3579 inline std::ostream& operator<<(std::ostream &os,
3580  const dumpi_add_error_code &dd)
3581 {
3582  os << "dumpi_add_error_code(";
3583  if(&dd) {
3584  /** Argument value before PMPI call */
3585  os << "errorclass=" << dd.errorclass << ", ";
3586  /** Argument value after PMPI call */
3587  os << "errorcode=" << dd.errorcode << ")";
3588  }
3589  else {
3590  os << "NULL)";
3591  }
3592  return os;
3593 }
3594 /**
3595  * C++ IO for a add_error_string operation.
3596  */
3597 inline std::ostream& operator<<(std::ostream &os,
3598  const dumpi_add_error_string &dd)
3599 {
3600  os << "dumpi_add_error_string(";
3601  if(&dd) {
3602  /** Argument value before PMPI call */
3603  os << "errorcode=" << dd.errorcode << ", ";
3604  /** Argument value before PMPI call. NUL-terminated std::string */
3605  os << "errorstring=\"" << dd.errorstring << "\")";
3606  }
3607  else {
3608  os << "NULL)";
3609  }
3610  return os;
3611 }
3612 /**
3613  * C++ IO for a comm_call_errhandler operation.
3614  */
3615 inline std::ostream& operator<<(std::ostream &os,
3616  const dumpi_comm_call_errhandler &dd)
3617 {
3618  os << "dumpi_comm_call_errhandler(";
3619  if(&dd) {
3620  /** Argument value before PMPI call */
3621  os << "comm=" << dd.comm << ", ";
3622  /** Argument value before PMPI call */
3623  os << "errorcode=" << dd.errorcode << ")";
3624  }
3625  else {
3626  os << "NULL)";
3627  }
3628  return os;
3629 }
3630 /**
3631  * C++ IO for a comm_create_keyval operation.
3632  */
3633 inline std::ostream& operator<<(std::ostream &os,
3634  const dumpi_comm_create_keyval &dd)
3635 {
3636  os << "dumpi_comm_create_keyval(";
3637  if(&dd) {
3638  /** Argument value after PMPI call */
3639  os << "keyval=" << dd.keyval << ")";
3640  }
3641  else {
3642  os << "NULL)";
3643  }
3644  return os;
3645 }
3646 /**
3647  * C++ IO for a comm_delete_attr operation.
3648  */
3649 inline std::ostream& operator<<(std::ostream &os,
3650  const dumpi_comm_delete_attr &dd)
3651 {
3652  os << "dumpi_comm_delete_attr(";
3653  if(&dd) {
3654  /** Argument value before PMPI call */
3655  os << "comm=" << dd.comm << ", ";
3656  /** Argument value before PMPI call */
3657  os << "keyval=" << dd.keyval << ")";
3658  }
3659  else {
3660  os << "NULL)";
3661  }
3662  return os;
3663 }
3664 /**
3665  * C++ IO for a comm_free_keyval operation.
3666  */
3667 inline std::ostream& operator<<(std::ostream &os,
3668  const dumpi_comm_free_keyval &dd)
3669 {
3670  os << "dumpi_comm_free_keyval(";
3671  if(&dd) {
3672  /** Argument value before PMPI call */
3673  os << "keyval=" << dd.keyval << ")";
3674  }
3675  else {
3676  os << "NULL)";
3677  }
3678  return os;
3679 }
3680 /**
3681  * C++ IO for a comm_get_attr operation.
3682  */
3683 inline std::ostream& operator<<(std::ostream &os,
3684  const dumpi_comm_get_attr &dd)
3685 {
3686  os << "dumpi_comm_get_attr(";
3687  if(&dd) {
3688  /** Argument value before PMPI call */
3689  os << "comm=" << dd.comm << ", ";
3690  /** Argument value before PMPI call */
3691  os << "keyval=" << dd.keyval << ", ";
3692  /** Argument value after PMPI call */
3693  os << "flag=" << dd.flag << ")";
3694  }
3695  else {
3696  os << "NULL)";
3697  }
3698  return os;
3699 }
3700 /**
3701  * C++ IO for a comm_get_name operation.
3702  */
3703 inline std::ostream& operator<<(std::ostream &os,
3704  const dumpi_comm_get_name &dd)
3705 {
3706  os << "dumpi_comm_get_name(";
3707  if(&dd) {
3708  /** Argument value before PMPI call */
3709  os << "comm=" << dd.comm << ", ";
3710  /** Argument value after PMPI call. Array of length [*resultlen] */
3711  os << "name=\"" << dd.name << "\", ";
3712  /** Argument value after PMPI call */
3713  os << "resultlen=" << dd.resultlen << ")";
3714  }
3715  else {
3716  os << "NULL)";
3717  }
3718  return os;
3719 }
3720 /**
3721  * C++ IO for a comm_set_attr operation.
3722  */
3723 inline std::ostream& operator<<(std::ostream &os,
3724  const dumpi_comm_set_attr &dd)
3725 {
3726  os << "dumpi_comm_set_attr(";
3727  if(&dd) {
3728  /** Argument value before PMPI call */
3729  os << "comm=" << dd.comm << ", ";
3730  /** Argument value before PMPI call */
3731  os << "keyval=" << dd.keyval << ")";
3732  }
3733  else {
3734  os << "NULL)";
3735  }
3736  return os;
3737 }
3738 /**
3739  * C++ IO for a comm_set_name operation.
3740  */
3741 inline std::ostream& operator<<(std::ostream &os,
3742  const dumpi_comm_set_name &dd)
3743 {
3744  os << "dumpi_comm_set_name(";
3745  if(&dd) {
3746  /** Argument value before PMPI call */
3747  os << "comm=" << dd.comm << ", ";
3748  /** Argument value before PMPI call. NUL-terminated std::string */
3749  os << "name=\"" << dd.name << "\")";
3750  }
3751  else {
3752  os << "NULL)";
3753  }
3754  return os;
3755 }
3756 /**
3757  * C++ IO for a file_call_errhandler operation.
3758  */
3759 inline std::ostream& operator<<(std::ostream &os,
3760  const dumpi_file_call_errhandler &dd)
3761 {
3762  os << "dumpi_file_call_errhandler(";
3763  if(&dd) {
3764  /** Argument value before PMPI call */
3765  os << "file=" << dd.file << ", ";
3766  /** Argument value before PMPI call */
3767  os << "errorcode=" << dd.errorcode << ")";
3768  }
3769  else {
3770  os << "NULL)";
3771  }
3772  return os;
3773 }
3774 /**
3775  * C++ IO for a grequest_complete operation.
3776  */
3777 inline std::ostream& operator<<(std::ostream &os,
3778  const dumpi_grequest_complete &dd)
3779 {
3780  os << "dumpi_grequest_complete(";
3781  if(&dd) {
3782  /** Argument value before PMPI call */
3783  os << "request=" << dd.request << ")";
3784  }
3785  else {
3786  os << "NULL)";
3787  }
3788  return os;
3789 }
3790 /**
3791  * C++ IO for a grequest_start operation.
3792  */
3793 inline std::ostream& operator<<(std::ostream &os,
3794  const dumpi_grequest_start &dd)
3795 {
3796  os << "dumpi_grequest_start(";
3797  if(&dd) {
3798  /** Argument value after PMPI call */
3799  os << "request=" << dd.request << ")";
3800  }
3801  else {
3802  os << "NULL)";
3803  }
3804  return os;
3805 }
3806 /**
3807  * C++ IO for a init_thread operation.
3808  */
3809 inline std::ostream& operator<<(std::ostream &os, const dumpi_init_thread &dd)
3810 {
3811  os << "dumpi_init_thread(";
3812  if(&dd) {
3813  /** Argument value before PMPI call */
3814  os << "argc=" << dd.argc << ", ";
3815  /**
3816  * Argument value before PMPI call.
3817  * Array of length [argc] containing NUL-terminated std::strings.
3818  */
3819  os << "argv=" << P::stringarray(dd.argc, dd.argv) << ", ";
3820  /** Argument value before PMPI call */
3821  os << "required=" << dd.required << ", ";
3822  /** Argument value after PMPI call */
3823  os << "provided=" << dd.provided << ")";
3824  }
3825  else {
3826  os << "NULL)";
3827  }
3828  return os;
3829 }
3830 /**
3831  * C++ IO for a is_thread_main operation.
3832  */
3833 inline std::ostream& operator<<(std::ostream &os,
3834  const dumpi_is_thread_main &dd)
3835 {
3836  os << "dumpi_is_thread_main(";
3837  if(&dd) {
3838  /** Argument value after PMPI call */
3839  os << "flag=" << dd.flag << ")";
3840  }
3841  else {
3842  os << "NULL)";
3843  }
3844  return os;
3845 }
3846 /**
3847  * C++ IO for a query_thread operation.
3848  */
3849 inline std::ostream& operator<<(std::ostream &os, const dumpi_query_thread &dd)
3850 {
3851  os << "dumpi_query_thread(";
3852  if(&dd) {
3853  /** Argument value after PMPI call */
3854  os << "supported=" << dd.supported << ")";
3855  }
3856  else {
3857  os << "NULL)";
3858  }
3859  return os;
3860 }
3861 /**
3862  * C++ IO for a status_set_cancelled operation.
3863  */
3864 inline std::ostream& operator<<(std::ostream &os,
3865  const dumpi_status_set_cancelled &dd)
3866 {
3867  os << "dumpi_status_set_cancelled(";
3868  if(&dd) {
3869  /** Argument value before PMPI call */
3870  os << "status=" << *dd.status << ", ";
3871  /** Argument value before PMPI call */
3872  os << "flag=" << dd.flag << ")";
3873  }
3874  else {
3875  os << "NULL)";
3876  }
3877  return os;
3878 }
3879 /**
3880  * C++ IO for a status_set_elements operation.
3881  */
3882 inline std::ostream& operator<<(std::ostream &os,
3883  const dumpi_status_set_elements &dd)
3884 {
3885  os << "dumpi_status_set_elements(";
3886  if(&dd) {
3887  /** Argument value before PMPI call */
3888  os << "status=" << *dd.status << ", ";
3889  /** Argument value before PMPI call */
3890  os << "datatype=" << dd.datatype << ", ";
3891  /** Argument value before PMPI call */
3892  os << "count=" << dd.count << ")";
3893  }
3894  else {
3895  os << "NULL)";
3896  }
3897  return os;
3898 }
3899 /**
3900  * C++ IO for a type_create_keyval operation.
3901  */
3902 inline std::ostream& operator<<(std::ostream &os,
3903  const dumpi_type_create_keyval &dd)
3904 {
3905  os << "dumpi_type_create_keyval(";
3906  if(&dd) {
3907  /** Argument value after PMPI call */
3908  os << "keyval=" << dd.keyval << ")";
3909  }
3910  else {
3911  os << "NULL)";
3912  }
3913  return os;
3914 }
3915 /**
3916  * C++ IO for a type_delete_attr operation.
3917  */
3918 inline std::ostream& operator<<(std::ostream &os,
3919  const dumpi_type_delete_attr &dd)
3920 {
3921  os << "dumpi_type_delete_attr(";
3922  if(&dd) {
3923  /** Argument value before PMPI call */
3924  os << "datatype=" << dd.datatype << ", ";
3925  /** Argument value before PMPI call */
3926  os << "keyval=" << dd.keyval << ")";
3927  }
3928  else {
3929  os << "NULL)";
3930  }
3931  return os;
3932 }
3933 /**
3934  * C++ IO for a type_dup operation.
3935  */
3936 inline std::ostream& operator<<(std::ostream &os, const dumpi_type_dup &dd)
3937 {
3938  os << "dumpi_type_dup(";
3939  if(&dd) {
3940  /** Argument value before PMPI call */
3941  os << "oldtype=" << dd.oldtype << ", ";
3942  /** Argument value after PMPI call */
3943  os << "newtype=" << dd.newtype << ")";
3944  }
3945  else {
3946  os << "NULL)";
3947  }
3948  return os;
3949 }
3950 /**
3951  * C++ IO for a type_free_keyval operation.
3952  */
3953 inline std::ostream& operator<<(std::ostream &os,
3954  const dumpi_type_free_keyval &dd)
3955 {
3956  os << "dumpi_type_free_keyval(";
3957  if(&dd) {
3958  /** Argument value before PMPI call */
3959  os << "keyval=" << dd.keyval << ")";
3960  }
3961  else {
3962  os << "NULL)";
3963  }
3964  return os;
3965 }
3966 /**
3967  * C++ IO for a type_get_attr operation.
3968  */
3969 inline std::ostream& operator<<(std::ostream &os,
3970  const dumpi_type_get_attr &dd)
3971 {
3972  os << "dumpi_type_get_attr(";
3973  if(&dd) {
3974  /** Argument value before PMPI call */
3975  os << "datatype=" << dd.datatype << ", ";
3976  /** Argument value before PMPI call */
3977  os << "keyval=" << dd.keyval << ", ";
3978  /** Argument value after PMPI call */
3979  os << "flag=" << dd.flag << ")";
3980  }
3981  else {
3982  os << "NULL)";
3983  }
3984  return os;
3985 }
3986 /**
3987  * C++ IO for a type_get_contents operation.
3988  */
3989 inline std::ostream& operator<<(std::ostream &os,
3990  const dumpi_type_get_contents &dd)
3991 {
3992  os << "dumpi_type_get_contents(";
3993  if(&dd) {
3994  /** Not an MPI argument. Added to index relevant data in the struct. */
3995  os << "numdatatypes=" << dd.numdatatypes << ", ";
3996  /** Not an MPI argument. Added to index relevant data in the struct. */
3997  os << "numaddresses=" << dd.numaddresses << ", ";
3998  /** Not an MPI argument. Added to index relevant data in the struct. */
3999  os << "numintegers=" << dd.numintegers << ", ";
4000  /** Argument value before PMPI call */
4001  os << "datatype=" << dd.datatype << ", ";
4002  /** Argument value before PMPI call */
4003  os << "maxintegers=" << dd.maxintegers << ", ";
4004  /** Argument value before PMPI call */
4005  os << "maxaddresses=" << dd.maxaddresses << ", ";
4006  /** Argument value before PMPI call */
4007  os << "maxdatatypes=" << dd.maxdatatypes << ", ";
4008  /** Argument value after PMPI call. Array of length [numintegers] */
4009  os << "arrintegers=" << P::ints(dd.numintegers, dd.arrintegers)
4010  << ", ";
4011  /** Argument value after PMPI call. Array of length [numaddresses] */
4012  os << "arraddresses=" << P::ints(dd.numaddresses, dd.arraddresses)
4013  << ", ";
4014  /** Argument value after PMPI call. Array of length [numdatatypes] */
4015  os << "arrdatatypes=" << P::ints(dd.numdatatypes, dd.arrdatatypes)
4016  << ")";
4017  }
4018  else {
4019  os << "NULL)";
4020  }
4021  return os;
4022 }
4023 /**
4024  * C++ IO for a type_get_envelope operation.
4025  */
4026 inline std::ostream& operator<<(std::ostream &os,
4027  const dumpi_type_get_envelope &dd)
4028 {
4029  os << "dumpi_type_get_envelope(";
4030  if(&dd) {
4031  /** Argument value before PMPI call */
4032  os << "datatype=" << dd.datatype << ", ";
4033  /** Argument value after PMPI call */
4034  os << "numintegers=" << dd.numintegers << ", ";
4035  /** Argument value after PMPI call */
4036  os << "numaddresses=" << dd.numaddresses << ", ";
4037  /** Argument value after PMPI call */
4038  os << "numdatatypes=" << dd.numdatatypes << ", ";
4039  /** Argument value after PMPI call */
4040  os << "combiner=" << dd.combiner << ")";
4041  }
4042  else {
4043  os << "NULL)";
4044  }
4045  return os;
4046 }
4047 /**
4048  * C++ IO for a type_get_name operation.
4049  */
4050 inline std::ostream& operator<<(std::ostream &os,
4051  const dumpi_type_get_name &dd)
4052 {
4053  os << "dumpi_type_get_name(";
4054  if(&dd) {
4055  /** Argument value before PMPI call */
4056  os << "datatype=" << dd.datatype << ", ";
4057  /** Argument value after PMPI call. NUL-terminated std::string. */
4058  os << "name=\"" << dd.name << "\", ";
4059  /** Argument value after PMPI call */
4060  os << "resultlen=" << dd.resultlen << ")";
4061  }
4062  else {
4063  os << "NULL)";
4064  }
4065  return os;
4066 }
4067 /**
4068  * C++ IO for a type_set_attr operation.
4069  */
4070 inline std::ostream& operator<<(std::ostream &os,
4071  const dumpi_type_set_attr &dd)
4072 {
4073  os << "dumpi_type_set_attr(";
4074  if(&dd) {
4075  /** Argument value before PMPI call */
4076  os << "datatype=" << dd.datatype << ", ";
4077  /** Argument value before PMPI call */
4078  os << "keyval=" << dd.keyval << ")";
4079  }
4080  else {
4081  os << "NULL)";
4082  }
4083  return os;
4084 }
4085 /**
4086  * C++ IO for a type_set_name operation.
4087  */
4088 inline std::ostream& operator<<(std::ostream &os,
4089  const dumpi_type_set_name &dd)
4090 {
4091  os << "dumpi_type_set_name(";
4092  if(&dd) {
4093  /** Argument value before PMPI call */
4094  os << "datatype=" << dd.datatype << ", ";
4095  /** Argument value before PMPI call. NUL-terminated std::string */
4096  os << "name=\"" << dd.name << "\")";
4097  }
4098  else {
4099  os << "NULL)";
4100  }
4101  return os;
4102 }
4103 /**
4104  * C++ IO for a type_match_size operation.
4105  */
4106 inline std::ostream& operator<<(std::ostream &os,
4107  const dumpi_type_match_size &dd)
4108 {
4109  os << "dumpi_type_match_size(";
4110  if(&dd) {
4111  /** Argument value before PMPI call */
4112  os << "typeclass=" << dd.typeclass << ", ";
4113  /** Argument value before PMPI call */
4114  os << "size=" << dd.size << ", ";
4115  /** Argument value after PMPI call */
4116  os << "datatype=" << dd.datatype << ")";
4117  }
4118  else {
4119  os << "NULL)";
4120  }
4121  return os;
4122 }
4123 /**
4124  * C++ IO for a win_call_errhandler operation.
4125  */
4126 inline std::ostream& operator<<(std::ostream &os,
4127  const dumpi_win_call_errhandler &dd)
4128 {
4129  os << "dumpi_win_call_errhandler(";
4130  if(&dd) {
4131  /** Argument value before PMPI call */
4132  os << "win=" << dd.win << ", ";
4133  /** Argument value before PMPI call */
4134  os << "errorcode=" << dd.errorcode << ")";
4135  }
4136  else {
4137  os << "NULL)";
4138  }
4139  return os;
4140 }
4141 /**
4142  * C++ IO for a win_create_keyval operation.
4143  */
4144 inline std::ostream& operator<<(std::ostream &os,
4145  const dumpi_win_create_keyval &dd)
4146 {
4147  os << "dumpi_win_create_keyval(";
4148  if(&dd) {
4149  /** Argument value after PMPI call */
4150  os << "keyval=" << dd.keyval << ")";
4151  }
4152  else {
4153  os << "NULL)";
4154  }
4155  return os;
4156 }
4157 /**
4158  * C++ IO for a win_delete_attr operation.
4159  */
4160 inline std::ostream& operator<<(std::ostream &os,
4161  const dumpi_win_delete_attr &dd)
4162 {
4163  os << "dumpi_win_delete_attr(";
4164  if(&dd) {
4165  /** Argument value before PMPI call */
4166  os << "win=" << dd.win << ", ";
4167  /** Argument value before PMPI call */
4168  os << "keyval=" << dd.keyval << ")";
4169  }
4170  else {
4171  os << "NULL)";
4172  }
4173  return os;
4174 }
4175 /**
4176  * C++ IO for a win_free_keyval operation.
4177  */
4178 inline std::ostream& operator<<(std::ostream &os,
4179  const dumpi_win_free_keyval &dd)
4180 {
4181  os << "dumpi_win_free_keyval(";
4182  if(&dd) {
4183  /** Argument value before PMPI call */
4184  os << "keyval=" << dd.keyval << ")";
4185  }
4186  else {
4187  os << "NULL)";
4188  }
4189  return os;
4190 }
4191 /**
4192  * C++ IO for a win_get_attr operation.
4193  */
4194 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_get_attr &dd)
4195 {
4196  os << "dumpi_win_get_attr(";
4197  if(&dd) {
4198  /** Argument value before PMPI call */
4199  os << "win=" << dd.win << ", ";
4200  /** Argument value before PMPI call */
4201  os << "keyval=" << dd.keyval << ", ";
4202  /** Argument value after PMPI call */
4203  os << "flag=" << dd.flag << ")";
4204  }
4205  else {
4206  os << "NULL)";
4207  }
4208  return os;
4209 }
4210 /**
4211  * C++ IO for a win_get_name operation.
4212  */
4213 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_get_name &dd)
4214 {
4215  os << "dumpi_win_get_name(";
4216  if(&dd) {
4217  /** Argument value before PMPI call */
4218  os << "win=" << dd.win << ", ";
4219  /** Argument value after PMPI call. NUL-terminated std::string. */
4220  os << "name=\"" << dd.name << "\", ";
4221  /** Argument value after PMPI call */
4222  os << "resultlen=" << dd.resultlen << ")";
4223  }
4224  else {
4225  os << "NULL)";
4226  }
4227  return os;
4228 }
4229 /**
4230  * C++ IO for a win_set_attr operation.
4231  */
4232 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_set_attr &dd)
4233 {
4234  os << "dumpi_win_set_attr(";
4235  if(&dd) {
4236  /** Argument value before PMPI call */
4237  os << "win=" << dd.win << ", ";
4238  /** Argument value before PMPI call */
4239  os << "keyval=" << dd.keyval << ")";
4240  }
4241  else {
4242  os << "NULL)";
4243  }
4244  return os;
4245 }
4246 /**
4247  * C++ IO for a win_set_name operation.
4248  */
4249 inline std::ostream& operator<<(std::ostream &os, const dumpi_win_set_name &dd)
4250 {
4251  os << "dumpi_win_set_name(";
4252  if(&dd) {
4253  /** Argument value before PMPI call */
4254  os << "win=" << dd.win << ", ";
4255  /** Argument value before PMPI call. NUL-terminated std::string */
4256  os << "name=\"" << dd.name << "\")";
4257  }
4258  else {
4259  os << "NULL)";
4260  }
4261  return os;
4262 }
4263 /**
4264  * C++ IO for a alloc_mem operation.
4265  */
4266 inline std::ostream& operator<<(std::ostream &os, const dumpi_alloc_mem &dd)
4267 {
4268  os << "dumpi_alloc_mem(";
4269  if(&dd) {
4270  /** Argument value before PMPI call */
4271  os << "size=" << dd.size << ", ";
4272  /** Argument value before PMPI call */
4273  os << "info=" << dd.info << ")";
4274  }
4275  else {
4276  os << "NULL)";
4277  }
4278  return os;
4279 }
4280 /**
4281  * C++ IO for a comm_create_errhandler operation.
4282  */
4283 inline std::ostream& operator<<(std::ostream &os,
4284  const dumpi_comm_create_errhandler &dd)
4285 {
4286  os << "dumpi_comm_create_errhandler(";
4287  if(&dd) {
4288  /** Argument value after PMPI call */
4289  os << "errhandler=" << dd.errhandler << ")";
4290  }
4291  else {
4292  os << "NULL)";
4293  }
4294  return os;
4295 }
4296 /**
4297  * C++ IO for a comm_get_errhandler operation.
4298  */
4299 inline std::ostream& operator<<(std::ostream &os,
4300  const dumpi_comm_get_errhandler &dd)
4301 {
4302  os << "dumpi_comm_get_errhandler(";
4303  if(&dd) {
4304  /** Argument value before PMPI call */
4305  os << "comm=" << dd.comm << ", ";
4306  /** Argument value after PMPI call */
4307  os << "errhandler=" << dd.errhandler << ")";
4308  }
4309  else {
4310  os << "NULL)";
4311  }
4312  return os;
4313 }
4314 /**
4315  * C++ IO for a comm_set_errhandler operation.
4316  */
4317 inline std::ostream& operator<<(std::ostream &os,
4318  const dumpi_comm_set_errhandler &dd)
4319 {
4320  os << "dumpi_comm_set_errhandler(";
4321  if(&dd) {
4322  /** Argument value before PMPI call */
4323  os << "comm=" << dd.comm << ", ";
4324  /** Argument value before PMPI call */
4325  os << "errhandler=" << dd.errhandler << ")";
4326  }
4327  else {
4328  os << "NULL)";
4329  }
4330  return os;
4331 }
4332 /**
4333  * C++ IO for a file_create_errhandler operation.
4334  */
4335 inline std::ostream& operator<<(std::ostream &os,
4336  const dumpi_file_create_errhandler &dd)
4337 {
4338  os << "dumpi_file_create_errhandler(";
4339  if(&dd) {
4340  /** Argument value after PMPI call */
4341  os << "errhandler=" << dd.errhandler << ")";
4342  }
4343  else {
4344  os << "NULL)";
4345  }
4346  return os;
4347 }
4348 /**
4349  * C++ IO for a file_get_errhandler operation.
4350  */
4351 inline std::ostream& operator<<(std::ostream &os,
4352  const dumpi_file_get_errhandler &dd)
4353 {
4354  os << "dumpi_file_get_errhandler(";
4355  if(&dd) {
4356  /** Argument value before PMPI call */
4357  os << "file=" << dd.file << ", ";
4358  /** Argument value after PMPI call */
4359  os << "errhandler=" << dd.errhandler << ")";
4360  }
4361  else {
4362  os << "NULL)";
4363  }
4364  return os;
4365 }
4366 /**
4367  * C++ IO for a file_set_errhandler operation.
4368  */
4369 inline std::ostream& operator<<(std::ostream &os,
4370  const dumpi_file_set_errhandler &dd)
4371 {
4372  os << "dumpi_file_set_errhandler(";
4373  if(&dd) {
4374  /** Argument value before PMPI call */
4375  os << "file=" << dd.file << ", ";
4376  /** Argument value before PMPI call */
4377  os << "errhandler=" << dd.errhandler << ")";
4378  }
4379  else {
4380  os << "NULL)";
4381  }
4382  return os;
4383 }
4384 /**
4385  * C++ IO for a finalized operation.
4386  */
4387 inline std::ostream& operator<<(std::ostream &os, const dumpi_finalized &dd)
4388 {
4389  os << "dumpi_finalized(";
4390  if(&dd) {
4391  /** Argument value after PMPI call */
4392  os << "flag=" << dd.flag << ")";
4393  }
4394  else {
4395  os << "NULL)";
4396  }
4397  return os;
4398 }
4399 /**
4400  * C++ IO for a free_mem operation.
4401  */
4402 inline std::ostream& operator<<(std::ostream &os, const dumpi_free_mem &dd)
4403 {
4404  os << "dumpi_free_mem(";
4405  if(&dd) {
4406  os << ")";
4407  }
4408  else {
4409  os << "NULL)";
4410  }
4411  return os;
4412 }
4413 /**
4414  * C++ IO for a get_address operation.
4415  */
4416 inline std::ostream& operator<<(std::ostream &os, const dumpi_get_address &dd)
4417 {
4418  os << "dumpi_get_address(";
4419  if(&dd) {
4420  /** Argument value after PMPI call */
4421  os << "address=" << dd.address << ")";
4422  }
4423  else {
4424  os << "NULL)";
4425  }
4426  return os;
4427 }
4428 /**
4429  * C++ IO for a info_create operation.
4430  */
4431 inline std::ostream& operator<<(std::ostream &os, const dumpi_info_create &dd)
4432 {
4433  os << "dumpi_info_create(";
4434  if(&dd) {
4435  /** Argument value after PMPI call */
4436  os << "info=" << dd.info << ")";
4437  }
4438  else {
4439  os << "NULL)";
4440  }
4441  return os;
4442 }
4443 /**
4444  * C++ IO for a info_delete operation.
4445  */
4446 inline std::ostream& operator<<(std::ostream &os, const dumpi_info_delete &dd)
4447 {
4448  os << "dumpi_info_delete(";
4449  if(&dd) {
4450  /** Argument value before PMPI call */
4451  os << "info=" << dd.info << ", ";
4452  /** Argument value before PMPI call. NUL-terminated std::string */
4453  os << "key=\"" << dd.key << "\")";
4454  }
4455  else {
4456  os << "NULL)";
4457  }
4458  return os;
4459 }
4460 /**
4461  * C++ IO for a info_dup operation.
4462  */
4463 inline std::ostream& operator<<(std::ostream &os, const dumpi_info_dup &dd)
4464 {
4465  os << "dumpi_info_dup(";
4466  if(&dd) {
4467  /** Argument value before PMPI call */
4468  os << "oldinfo=" << dd.oldinfo << ", ";
4469  /** Argument value after PMPI call */
4470  os << "newinfo=" << dd.newinfo << ")";
4471  }
4472  else {
4473  os << "NULL)";
4474  }
4475  return os;
4476 }
4477 /**
4478  * C++ IO for a info_free operation.
4479  */
4480 inline std::ostream& operator<<(std::ostream &os, const dumpi_info_free &dd)
4481 {
4482  os << "dumpi_info_free(";
4483  if(&dd) {
4484  /** Argument value before PMPI call */
4485  os << "info=" << dd.info << ")";
4486  }
4487  else {
4488  os << "NULL)";
4489  }
4490  return os;
4491 }
4492 /**
4493  * C++ IO for a info_get operation.
4494  */
4495 inline std::ostream& operator<<(std::ostream &os, const dumpi_info_get &dd)
4496 {
4497  os << "dumpi_info_get(";
4498  if(&dd) {
4499  /** Argument value before PMPI call */
4500  os << "info=" << dd.info << ", ";
4501  /** Argument value before PMPI call. NUL-terminated std::string */
4502  os << "key=\"" << dd.key << "\", ";
4503  /** Argument value before PMPI call */
4504  os << "valuelength=" << dd.valuelength << ", ";
4505  /** Argument value after PMPI call. NUL-terminated std::string. */
4506  os << "value=\"" << dd.value << "\", ";
4507  /** Argument value after PMPI call */
4508  os << "flag=" << dd.flag << ")";
4509  }
4510  else {
4511  os << "NULL)";
4512  }
4513  return os;
4514 }
4515 /**
4516  * C++ IO for a info_get_nkeys operation.
4517  */
4518 inline std::ostream& operator<<(std::ostream &os,
4519  const dumpi_info_get_nkeys &dd)
4520 {
4521  os << "dumpi_info_get_nkeys(";
4522  if(&dd) {
4523  /** Argument value before PMPI call */
4524  os << "info=" << dd.info << ", ";
4525  /** Argument value after PMPI call */
4526  os << "nkeys=" << dd.nkeys << ")";
4527  }
4528  else {
4529  os << "NULL)";
4530  }
4531  return os;
4532 }
4533 /**
4534  * C++ IO for a info_get_nthkey operation.
4535  */
4536 inline std::ostream& operator<<(std::ostream &os,
4537  const dumpi_info_get_nthkey &dd)
4538 {
4539  os << "dumpi_info_get_nthkey(";
4540  if(&dd) {
4541  /** Argument value before PMPI call */
4542  os << "info=" << dd.info << ", ";
4543  /** Argument value before PMPI call */
4544  os << "n=" << dd.n << ", ";
4545  /** Argument value after PMPI call. NUL-terminated std::string */
4546  os << "key=\"" << dd.key << "\")";
4547  }
4548  else {
4549  os << "NULL)";
4550  }
4551  return os;
4552 }
4553 /**
4554  * C++ IO for a info_get_valuelen operation.
4555  */
4556 inline std::ostream& operator<<(std::ostream &os,
4557  const dumpi_info_get_valuelen &dd)
4558 {
4559  os << "dumpi_info_get_valuelen(";
4560  if(&dd) {
4561  /** Argument value before PMPI call */
4562  os << "info=" << dd.info << ", ";
4563  /** Argument value before PMPI call. NUL-terminated std::string */
4564  os << "key=\"" << dd.key << "\", ";
4565  /** Argument value after PMPI call */
4566  os << "valuelen=" << dd.valuelen << ", ";
4567  /** Argument value after PMPI call */
4568  os << "flag=" << dd.flag << ")";
4569  }
4570  else {
4571  os << "NULL)";
4572  }
4573  return os;
4574 }
4575 /**
4576  * C++ IO for a info_set operation.
4577  */
4578 inline std::ostream& operator<<(std::ostream &os, const dumpi_info_set &dd)
4579 {
4580  os << "dumpi_info_set(";
4581  if(&dd) {
4582  /** Argument value before PMPI call */
4583  os << "info=" << dd.info << ", ";
4584  /** Argument value before PMPI call. NUL-terminated std::string */
4585  os << "key=\"" << dd.key << "\", ";
4586  /** Argument value before PMPI call. NUL-terminated std::string */
4587  os << "value=\"" << dd.value << "\")";
4588  }
4589  else {
4590  os << "NULL)";
4591  }
4592  return os;
4593 }
4594 /**
4595  * C++ IO for a pack_external operation.
4596  */
4597 inline std::ostream& operator<<(std::ostream &os,
4598  const dumpi_pack_external &dd)
4599 {
4600  os << "dumpi_pack_external(";
4601  if(&dd) {
4602  /** Argument value before PMPI call. NUL-terminated std::string */
4603  os << "datarep=\"" << dd.datarep << "\", ";
4604  /** Argument value before PMPI call */
4605  os << "incount=" << dd.incount << ", ";
4606  /** Argument value before PMPI call */
4607  os << "intype=" << dd.intype << ", ";
4608  /** Argument value before PMPI call */
4609  os << "outcount=" << dd.outcount << ", ";
4610  /** Argument value before and after PMPI call. */
4611  os << "position={in=" << dd.position.in << ", out="
4612  << dd.position.out << "})";
4613  }
4614  else {
4615  os << "NULL)";
4616  }
4617  return os;
4618 }
4619 
4620 /**
4621  * C++ IO for a pack_external_size operation.
4622  */
4623 inline std::ostream& operator<<(std::ostream &os,
4624  const dumpi_pack_external_size &dd)
4625 {
4626  os << "dumpi_pack_external_size(";
4627  if(&dd) {
4628  /** Argument value before PMPI call. NUL-terminated std::string */
4629  os << "datarep=\"" << dd.datarep << "\", ";
4630  /** Argument value before PMPI call */
4631  os << "incount=" << dd.incount << ", ";
4632  /** Argument value before PMPI call */
4633  os << "datatype=" << dd.datatype << ", ";
4634  /** Argument value after PMPI call */
4635  os << "size=" << dd.size << ")";
4636  }
4637  else {
4638  os << "NULL)";
4639  }
4640  return os;
4641 }
4642 /**
4643  * C++ IO for a request_get_status operation.
4644  */
4645 inline std::ostream& operator<<(std::ostream &os,
4646  const dumpi_request_get_status &dd)
4647 {
4648  os << "dumpi_request_get_status(";
4649  if(&dd) {
4650  /** Argument value before PMPI call */
4651  os << "request=" << dd.request << ", ";
4652  /** Argument value after PMPI call */
4653  os << "flag=" << dd.flag << ", ";
4654  /** Argument value before PMPI call. Only stored if(flag!=0) */
4655  os << "status=" << *dd.status << ")";
4656  }
4657  else {
4658  os << "NULL)";
4659  }
4660  return os;
4661 }
4662 /**
4663  * C++ IO for a type_create_darray operation.
4664  */
4665 inline std::ostream& operator<<(std::ostream &os,
4666  const dumpi_type_create_darray &dd)
4667 {
4668  os << "dumpi_type_create_darray(";
4669  if(&dd) {
4670  /** Argument value before PMPI call */
4671  os << "size=" << dd.size << ", ";
4672  /** Argument value before PMPI call */
4673  os << "rank=" << dd.rank << ", ";
4674  /** Argument value before PMPI call */
4675  os << "ndims=" << dd.ndims << ", ";
4676  /** Argument value before PMPI call. Array of length [ndims] */
4677  os << "gsizes=" << P::ints(dd.ndims, dd.gsizes) << ", ";
4678  /** Argument value before PMPI call. Array of length [ndims] */
4679  os << "distribs=" << P::ints(dd.ndims, dd.distribs) << ", ";
4680  /** Argument value before PMPI call. Array of length [ndims] */
4681  os << "dargs=" << P::ints(dd.ndims, dd.dargs) << ", ";
4682  /** Argument value before PMPI call. Array of length [ndims] */
4683  os << "psizes=" << P::ints(dd.ndims, dd.psizes) << ", ";
4684  /** Argument value before PMPI call */
4685  os << "order=" << dd.order << ", ";
4686  /** Argument value before PMPI call */
4687  os << "oldtype=" << dd.oldtype << ", ";
4688  /** Argument value after PMPI call */
4689  os << "newtype=" << dd.newtype << ")";
4690  }
4691  else {
4692  os << "NULL)";
4693  }
4694  return os;
4695 }
4696 /**
4697  * C++ IO for a type_create_hindexed operation.
4698  */
4699 inline std::ostream& operator<<(std::ostream &os,
4700  const dumpi_type_create_hindexed &dd)
4701 {
4702  os << "dumpi_type_create_hindexed(";
4703  if(&dd) {
4704  /** Argument value before PMPI call */
4705  os << "count=" << dd.count << ", ";
4706  /** Argument value before PMPI call. Array of length [count] */
4707  os << "blocklengths=" << P::ints(dd.count, dd.blocklengths) << ", ";
4708  /** Argument value before PMPI call. Array of length [count] */
4709  os << "displacements=" << P::ints(dd.count, dd.displacements)
4710  << ", ";
4711  /** Argument value before PMPI call */
4712  os << "oldtype=" << dd.oldtype << ", ";
4713  /** Argument value after PMPI call */
4714  os << "newtype=" << dd.newtype << ")";
4715  }
4716  else {
4717  os << "NULL)";
4718  }
4719  return os;
4720 }
4721 /**
4722  * C++ IO for a type_create_hvector operation.
4723  */
4724 inline std::ostream& operator<<(std::ostream &os,
4725  const dumpi_type_create_hvector &dd)
4726 {
4727  os << "dumpi_type_create_hvector(";
4728  if(&dd) {
4729  /** Argument value before PMPI call */
4730  os << "count=" << dd.count << ", ";
4731  /** Argument value before PMPI call */
4732  os << "blocklength=" << dd.blocklength << ", ";
4733  /** Argument value before PMPI call */
4734  os << "stride=" << dd.stride << ", ";
4735  /** Argument value before PMPI call */
4736  os << "oldtype=" << dd.oldtype << ", ";
4737  /** Argument value after PMPI call */
4738  os << "newtype=" << dd.newtype << ")";
4739  }
4740  else {
4741  os << "NULL)";
4742  }
4743  return os;
4744 }
4745 /**
4746  * C++ IO for a type_create_indexed_block operation.
4747  */
4748 inline std::ostream& operator<<(std::ostream &os,
4749  const dumpi_type_create_indexed_block &dd)
4750 {
4751  os << "dumpi_type_create_indexed_block(";
4752  if(&dd) {
4753  /** Argument value before PMPI call */
4754  os << "count=" << dd.count << ", ";
4755  /** Argument value before PMPI call */
4756  os << "blocklength=" << dd.blocklength << ", ";
4757  /** Argument value before PMPI call. Array of length [count] */
4758  os << "displacments=" << P::ints(dd.count, dd.displacments) << ", ";
4759  /** Argument value before PMPI call */
4760  os << "oldtype=" << dd.oldtype << ", ";
4761  /** Argument value after PMPI call */
4762  os << "newtype=" << dd.newtype << ")";
4763  }
4764  else {
4765  os << "NULL)";
4766  }
4767  return os;
4768 }
4769 /**
4770  * C++ IO for a type_create_resized operation.
4771  */
4772 inline std::ostream& operator<<(std::ostream &os,
4773  const dumpi_type_create_resized &dd)
4774 {
4775  os << "dumpi_type_create_resized(";
4776  if(&dd) {
4777  /** Argument value before PMPI call */
4778  os << "oldtype=" << dd.oldtype << ", ";
4779  /** Argument value before PMPI call */
4780  os << "lb=" << dd.lb << ", ";
4781  /** Argument value before PMPI call */
4782  os << "extent=" << dd.extent << ", ";
4783  /** Argument value after PMPI call */
4784  os << "newtype=" << dd.newtype << ")";
4785  }
4786  else {
4787  os << "NULL)";
4788  }
4789  return os;
4790 }
4791 /**
4792  * C++ IO for a type_create_struct operation.
4793  */
4794 inline std::ostream& operator<<(std::ostream &os,
4795  const dumpi_type_create_struct &dd)
4796 {
4797  os << "dumpi_type_create_struct(";
4798  if(&dd) {
4799  /** Argument value before PMPI call */
4800  os << "count=" << dd.count << ", ";
4801  /** Argument value before PMPI call. Array of length [count] */
4802  os << "blocklengths=" << P::ints(dd.count, dd.blocklengths) << ", ";
4803  /** Argument value before PMPI call. Array of length [count] */
4804  os << "displacements=" << P::ints(dd.count, dd.displacements)<< ", ";
4805  /** Argument value before PMPI call. Array of length [count] */
4806  os << "oldtypes=" << P::ints(dd.count, dd.oldtypes) << ", ";
4807  /** Argument value after PMPI call */
4808  os << "newtype=" << dd.newtype << ")";
4809  }
4810  else {
4811  os << "NULL)";
4812  }
4813  return os;
4814 }
4815 /**
4816  * C++ IO for a type_create_subarray operation.
4817  */
4818 inline std::ostream& operator<<(std::ostream &os,
4819  const dumpi_type_create_subarray &dd)
4820 {
4821  os << "dumpi_type_create_subarray(";
4822  if(&dd) {
4823  /** Argument value before PMPI call */
4824  os << "ndims=" << dd.ndims << ", ";
4825  /** Argument value before PMPI call. Array of length [ndims] */
4826  os << "sizes=" << P::ints(dd.ndims, dd.sizes) << ", ";
4827  /** Argument value before PMPI call. Array of length [ndims] */
4828  os << "subsizes=" << P::ints(dd.ndims, dd.subsizes) << ", ";
4829  /** Argument value before PMPI call. Array of length [ndims] */
4830  os << "starts=" << P::ints(dd.ndims, dd.starts) << ", ";
4831  /** Argument value before PMPI call */
4832  os << "order=" << dd.order << ", ";
4833  /** Argument value before PMPI call */
4834  os << "oldtype=" << dd.oldtype << ", ";
4835  /** Argument value after PMPI call */
4836  os << "newtype=" << dd.newtype << ")";
4837  }
4838  else {
4839  os << "NULL)";
4840  }
4841  return os;
4842 }
4843 /**
4844  * C++ IO for a type_get_extent operation.
4845  */
4846 inline std::ostream& operator<<(std::ostream &os,
4847  const dumpi_type_get_extent &dd)
4848 {
4849  os << "dumpi_type_get_extent(";
4850  if(&dd) {
4851  /** Argument value before PMPI call */
4852  os << "datatype=" << dd.datatype << ", ";
4853  /** Argument value after PMPI call */
4854  os << "lb=" << dd.lb << ", ";
4855  /** Argument value after PMPI call */
4856  os << "extent=" << dd.extent << ")";
4857  }
4858  else {
4859  os << "NULL)";
4860  }
4861  return os;
4862 }
4863 /**
4864  * C++ IO for a type_get_true_extent operation.
4865  */
4866 inline std::ostream& operator<<(std::ostream &os,
4867  const dumpi_type_get_true_extent &dd)
4868 {
4869  os << "dumpi_type_get_true_extent(";
4870  if(&dd) {
4871  /** Argument value before PMPI call */
4872  os << "datatype=" << dd.datatype << ", ";
4873  /** Argument value after PMPI call */
4874  os << "lb=" << dd.lb << ", ";
4875  /** Argument value after PMPI call */
4876  os << "extent=" << dd.extent << ")";
4877  }
4878  else {
4879  os << "NULL)";
4880  }
4881  return os;
4882 }
4883 /**
4884  * C++ IO for a unpack_external operation.
4885  */
4886 inline std::ostream& operator<<(std::ostream &os,
4887  const dumpi_unpack_external &dd)
4888 {
4889  os << "dumpi_unpack_external(";
4890  if(&dd) {
4891  /** Argument value before PMPI call. NUL-terminated std::string */
4892  os << "datarep=\"" << dd.datarep << "\", ";
4893  /** Argument value before PMPI call */
4894  os << "insize=" << dd.insize << ", ";
4895  /** Argument value before and after PMPI call. */
4896  os << "position={in=" << dd.position.in << ", out="
4897  << dd.position.out << "}, ";
4898  /** Argument value before PMPI call */
4899  os << "outcount=" << dd.outcount << ", ";
4900  /** Argument value before PMPI call */
4901  os << "datatype=" << dd.datatype << ")";
4902  }
4903  else {
4904  os << "NULL)";
4905  }
4906  return os;
4907 }
4908 /**
4909  * C++ IO for a win_create_errhandler operation.
4910  */
4911 inline std::ostream& operator<<(std::ostream &os,
4912  const dumpi_win_create_errhandler &dd)
4913 {
4914  os << "dumpi_win_create_errhandler(";
4915  if(&dd) {
4916  /** Argument value after PMPI call */
4917  os << "errhandler=" << dd.errhandler << ")";
4918  }
4919  else {
4920  os << "NULL)";
4921  }
4922  return os;
4923 }
4924 /**
4925  * C++ IO for a win_get_errhandler operation.
4926  */
4927 inline std::ostream& operator<<(std::ostream &os,
4928  const dumpi_win_get_errhandler &dd)
4929 {
4930  os << "dumpi_win_get_errhandler(";
4931  if(&dd) {
4932  /** Argument value before PMPI call */
4933  os << "win=" << dd.win << ", ";
4934  /** Argument value after PMPI call */
4935  os << "errhandler=" << dd.errhandler << ")";
4936  }
4937  else {
4938  os << "NULL)";
4939  }
4940  return os;
4941 }
4942 /**
4943  * C++ IO for a win_set_errhandler operation.
4944  */
4945 inline std::ostream& operator<<(std::ostream &os,
4946  const dumpi_win_set_errhandler &dd)
4947 {
4948  os << "dumpi_win_set_errhandler(";
4949  if(&dd) {
4950  /** Argument value before PMPI call */
4951  os << "win=" << dd.win << ", ";
4952  /** Argument value after PMPI call */
4953  os << "errhandler=" << dd.errhandler << ")";
4954  }
4955  else {
4956  os << "NULL)";
4957  }
4958  return os;
4959 }
4960 /**
4961  * C++ IO for a file_open operation.
4962  */
4963 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_open &dd)
4964 {
4965  os << "dumpi_file_open(";
4966  if(&dd) {
4967  /** Argument value before PMPI call */
4968  os << "comm=" << dd.comm << ", ";
4969  /** Argument value before PMPI call. NUL-terminated std::string */
4970  os << "filename=\"" << dd.filename << "\", ";
4971  /** Argument value before PMPI call */
4972  os << "amode=" << dd.amode << ", ";
4973  /** Argument value before PMPI call */
4974  os << "info=" << dd.info << ", ";
4975  /** Argument value after PMPI call */
4976  os << "file=" << dd.file << ")";
4977  }
4978  else {
4979  os << "NULL)";
4980  }
4981  return os;
4982 }
4983 /**
4984  * C++ IO for a file_close operation.
4985  */
4986 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_close &dd)
4987 {
4988  os << "dumpi_file_close(";
4989  if(&dd) {
4990  /** Argument value before PMPI call */
4991  os << "file=" << dd.file << ")";
4992  }
4993  else {
4994  os << "NULL)";
4995  }
4996  return os;
4997 }
4998 /**
4999  * C++ IO for a file_delete operation.
5000  */
5001 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_delete &dd)
5002 {
5003  os << "dumpi_file_delete(";
5004  if(&dd) {
5005  /** Argument value before PMPI call. NUL-terminated std::string */
5006  os << "filename=\"" << dd.filename << "\", ";
5007  /** Argument value before PMPI call */
5008  os << "info=" << dd.info << ")";
5009  }
5010  else {
5011  os << "NULL)";
5012  }
5013  return os;
5014 }
5015 /**
5016  * C++ IO for a file_set_size operation.
5017  */
5018 inline std::ostream& operator<<(std::ostream &os,
5019  const dumpi_file_set_size &dd)
5020 {
5021  os << "dumpi_file_set_size(";
5022  if(&dd) {
5023  /** Argument value before PMPI call */
5024  os << "file=" << dd.file << ", ";
5025  /** Argument value before PMPI call */
5026  os << "size=" << dd.size << ")";
5027  }
5028  else {
5029  os << "NULL)";
5030  }
5031  return os;
5032 }
5033 /**
5034  * C++ IO for a file_preallocate operation.
5035  */
5036 inline std::ostream& operator<<(std::ostream &os,
5037  const dumpi_file_preallocate &dd)
5038 {
5039  os << "dumpi_file_preallocate(";
5040  if(&dd) {
5041  /** Argument value before PMPI call */
5042  os << "file=" << dd.file << ", ";
5043  /** Argument value before PMPI call */
5044  os << "size=" << dd.size << ")";
5045  }
5046  else {
5047  os << "NULL)";
5048  }
5049  return os;
5050 }
5051 /**
5052  * C++ IO for a file_get_size operation.
5053  */
5054 inline std::ostream& operator<<(std::ostream &os,
5055  const dumpi_file_get_size &dd)
5056 {
5057  os << "dumpi_file_get_size(";
5058  if(&dd) {
5059  /** Argument value before PMPI call */
5060  os << "file=" << dd.file << ", ";
5061  /** Argument value after PMPI call */
5062  os << "size=" << dd.size << ")";
5063  }
5064  else {
5065  os << "NULL)";
5066  }
5067  return os;
5068 }
5069 /**
5070  * C++ IO for a file_get_group operation.
5071  */
5072 inline std::ostream& operator<<(std::ostream &os,
5073  const dumpi_file_get_group &dd)
5074 {
5075  os << "dumpi_file_get_group(";
5076  if(&dd) {
5077  /** Argument value before PMPI call */
5078  os << "file=" << dd.file << ", ";
5079  /** Argument value after PMPI call */
5080  os << "group=" << dd.group << ")";
5081  }
5082  else {
5083  os << "NULL)";
5084  }
5085  return os;
5086 }
5087 /**
5088  * C++ IO for a file_get_amode operation.
5089  */
5090 inline std::ostream& operator<<(std::ostream &os,
5091  const dumpi_file_get_amode &dd)
5092 {
5093  os << "dumpi_file_get_amode(";
5094  if(&dd) {
5095  /** Argument value before PMPI call */
5096  os << "file=" << dd.file << ", ";
5097  /** Argument value after PMPI call */
5098  os << "amode=" << dd.amode << ")";
5099  }
5100  else {
5101  os << "NULL)";
5102  }
5103  return os;
5104 }
5105 /**
5106  * C++ IO for a file_set_info operation.
5107  */
5108 inline std::ostream& operator<<(std::ostream &os,
5109  const dumpi_file_set_info &dd)
5110 {
5111  os << "dumpi_file_set_info(";
5112  if(&dd) {
5113  /** Argument value before PMPI call */
5114  os << "file=" << dd.file << ", ";
5115  /** Argument value before PMPI call */
5116  os << "info=" << dd.info << ")";
5117  }
5118  else {
5119  os << "NULL)";
5120  }
5121  return os;
5122 }
5123 /**
5124  * C++ IO for a file_get_info operation.
5125  */
5126 inline std::ostream& operator<<(std::ostream &os,
5127  const dumpi_file_get_info &dd)
5128 {
5129  os << "dumpi_file_get_info(";
5130  if(&dd) {
5131  /** Argument value before PMPI call */
5132  os << "file=" << dd.file << ", ";
5133  /** Argument value after PMPI call */
5134  os << "info=" << dd.info << ")";
5135  }
5136  else {
5137  os << "NULL)";
5138  }
5139  return os;
5140 }
5141 /**
5142  * C++ IO for a file_set_view operation.
5143  */
5144 inline std::ostream& operator<<(std::ostream &os,
5145  const dumpi_file_set_view &dd)
5146 {
5147  os << "dumpi_file_set_view(";
5148  if(&dd) {
5149  /** Argument value before PMPI call */
5150  os << "file=" << dd.file << ", ";
5151  /** Argument value before PMPI call */
5152  os << "offset=" << dd.offset << ", ";
5153  /** Argument value before PMPI call */
5154  os << "hosttype=" << dd.hosttype << ", ";
5155  /** Argument value before PMPI call */
5156  os << "filetype=" << dd.filetype << ", ";
5157  /** Argument value before PMPI call. NUL-terminated std::string */
5158  os << "datarep=\"" << dd.datarep << "\", ";
5159  /** Argument value before PMPI call */
5160  os << "info=" << dd.info << ")";
5161  }
5162  else {
5163  os << "NULL)";
5164  }
5165  return os;
5166 }
5167 /**
5168  * C++ IO for a file_get_view operation.
5169  */
5170 inline std::ostream& operator<<(std::ostream &os,
5171  const dumpi_file_get_view &dd)
5172 {
5173  os << "dumpi_file_get_view(";
5174  if(&dd) {
5175  /** Argument value before PMPI call */
5176  os << "file=" << dd.file << ", ";
5177  /** Argument value after PMPI call */
5178  os << "offset=" << dd.offset << ", ";
5179  /** Argument value after PMPI call */
5180  os << "hosttype=" << dd.hosttype << ", ";
5181  /** Argument value after PMPI call */
5182  os << "filetype=" << dd.filetype << ", ";
5183  /** Argument value after PMPI call. NUL-terminated std::string */
5184  os << "datarep=\"" << dd.datarep << "\")";
5185  }
5186  else {
5187  os << "NULL)";
5188  }
5189  return os;
5190 }
5191 /**
5192  * C++ IO for a file_read_at operation.
5193  */
5194 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_read_at &dd)
5195 {
5196  os << "dumpi_file_read_at(";
5197  if(&dd) {
5198  /** Argument value before PMPI call */
5199  os << "file=" << dd.file << ", ";
5200  /** Argument value before PMPI call */
5201  os << "offset=" << dd.offset << ", ";
5202  /** Argument value before PMPI call */
5203  os << "count=" << dd.count << ", ";
5204  /** Argument value before PMPI call */
5205  os << "datatype=" << dd.datatype << ", ";
5206  /** Argument value after PMPI call */
5207  os << "status=" << *dd.status << ")";
5208  }
5209  else {
5210  os << "NULL)";
5211  }
5212  return os;
5213 }
5214 /**
5215  * C++ IO for a file_read_at_all operation.
5216  */
5217 inline std::ostream& operator<<(std::ostream &os,
5218  const dumpi_file_read_at_all &dd)
5219 {
5220  os << "dumpi_file_read_at_all(";
5221  if(&dd) {
5222  /** Argument value before PMPI call */
5223  os << "file=" << dd.file << ", ";
5224  /** Argument value before PMPI call */
5225  os << "offset=" << dd.offset << ", ";
5226  /** Argument value before PMPI call */
5227  os << "count=" << dd.count << ", ";
5228  /** Argument value before PMPI call */
5229  os << "datatype=" << dd.datatype << ", ";
5230  /** Argument value after PMPI call */
5231  os << "status=" << *dd.status << ")";
5232  }
5233  else {
5234  os << "NULL)";
5235  }
5236  return os;
5237 }
5238 /**
5239  * C++ IO for a file_write_at operation.
5240  */
5241 inline std::ostream& operator<<(std::ostream &os,
5242  const dumpi_file_write_at &dd)
5243 {
5244  os << "dumpi_file_write_at(";
5245  if(&dd) {
5246  /** Argument value before PMPI call */
5247  os << "file=" << dd.file << ", ";
5248  /** Argument value before PMPI call */
5249  os << "offset=" << dd.offset << ", ";
5250  /** Argument value before PMPI call */
5251  os << "count=" << dd.count << ", ";
5252  /** Argument value before PMPI call */
5253  os << "datatype=" << dd.datatype << ", ";
5254  /** Argument value after PMPI call */
5255  os << "status=" << *dd.status << ")";
5256  }
5257  else {
5258  os << "NULL)";
5259  }
5260  return os;
5261 }
5262 /**
5263  * C++ IO for a file_write_at_all operation.
5264  */
5265 inline std::ostream& operator<<(std::ostream &os,
5266  const dumpi_file_write_at_all &dd)
5267 {
5268  os << "dumpi_file_write_at_all(";
5269  if(&dd) {
5270  /** Argument value before PMPI call */
5271  os << "file=" << dd.file << ", ";
5272  /** Argument value before PMPI call */
5273  os << "offset=" << dd.offset << ", ";
5274  /** Argument value before PMPI call */
5275  os << "count=" << dd.count << ", ";
5276  /** Argument value before PMPI call */
5277  os << "datatype=" << dd.datatype << ", ";
5278  /** Argument value after PMPI call */
5279  os << "status=" << *dd.status << ")";
5280  }
5281  else {
5282  os << "NULL)";
5283  }
5284  return os;
5285 }
5286 /**
5287  * C++ IO for a file_iread_at operation.
5288  */
5289 inline std::ostream& operator<<(std::ostream &os,
5290  const dumpi_file_iread_at &dd)
5291 {
5292  os << "dumpi_file_iread_at(";
5293  if(&dd) {
5294  /** Argument value before PMPI call */
5295  os << "file=" << dd.file << ", ";
5296  /** Argument value before PMPI call */
5297  os << "offset=" << dd.offset << ", ";
5298  /** Argument value before PMPI call */
5299  os << "count=" << dd.count << ", ";
5300  /** Argument value before PMPI call */
5301  os << "datatype=" << dd.datatype << ", ";
5302  /** Argument value after PMPI call */
5303  os << "request=" << dd.request << ")";
5304  }
5305  else {
5306  os << "NULL)";
5307  }
5308  return os;
5309 }
5310 /**
5311  * C++ IO for a file_iwrite_at operation.
5312  */
5313 inline std::ostream& operator<<(std::ostream &os,
5314  const dumpi_file_iwrite_at &dd)
5315 {
5316  os << "dumpi_file_iwrite_at(";
5317  if(&dd) {
5318  /** Argument value before PMPI call */
5319  os << "file=" << dd.file << ", ";
5320  /** Argument value before PMPI call */
5321  os << "offset=" << dd.offset << ", ";
5322  /** Argument value before PMPI call */
5323  os << "count=" << dd.count << ", ";
5324  /** Argument value before PMPI call */
5325  os << "datatype=" << dd.datatype << ", ";
5326  /** Argument value after PMPI call */
5327  os << "request=" << dd.request << ")";
5328  }
5329  else {
5330  os << "NULL)";
5331  }
5332  return os;
5333 }
5334 /**
5335  * C++ IO for a file_read operation.
5336  */
5337 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_read &dd)
5338 {
5339  os << "dumpi_file_read(";
5340  if(&dd) {
5341  /** Argument value before PMPI call */
5342  os << "file=" << dd.file << ", ";
5343  /** Argument value before PMPI call */
5344  os << "count=" << dd.count << ", ";
5345  /** Argument value before PMPI call */
5346  os << "datatype=" << dd.datatype << ", ";
5347  /** Argument value after PMPI call */
5348  os << "status=" << *dd.status << ")";
5349  }
5350  else {
5351  os << "NULL)";
5352  }
5353  return os;
5354 }
5355 /**
5356  * C++ IO for a file_read_all operation.
5357  */
5358 inline std::ostream& operator<<(std::ostream &os,
5359  const dumpi_file_read_all &dd)
5360 {
5361  os << "dumpi_file_read_all(";
5362  if(&dd) {
5363  /** Argument value before PMPI call */
5364  os << "file=" << dd.file << ", ";
5365  /** Argument value before PMPI call */
5366  os << "count=" << dd.count << ", ";
5367  /** Argument value before PMPI call */
5368  os << "datatype=" << dd.datatype << ", ";
5369  /** Argument value after PMPI call */
5370  os << "status=" << *dd.status << ")";
5371  }
5372  else {
5373  os << "NULL)";
5374  }
5375  return os;
5376 }
5377 /**
5378  * C++ IO for a file_write operation.
5379  */
5380 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_write &dd)
5381 {
5382  os << "dumpi_file_write(";
5383  if(&dd) {
5384  /** Argument value before PMPI call */
5385  os << "file=" << dd.file << ", ";
5386  /** Argument value before PMPI call */
5387  os << "count=" << dd.count << ", ";
5388  /** Argument value before PMPI call */
5389  os << "datatype=" << dd.datatype << ", ";
5390  /** Argument value after PMPI call */
5391  os << "status=" << *dd.status << ")";
5392  }
5393  else {
5394  os << "NULL)";
5395  }
5396  return os;
5397 }
5398 /**
5399  * C++ IO for a file_write_all operation.
5400  */
5401 inline std::ostream& operator<<(std::ostream &os,
5402  const dumpi_file_write_all &dd)
5403 {
5404  os << "dumpi_file_write_all(";
5405  if(&dd) {
5406  /** Argument value before PMPI call */
5407  os << "file=" << dd.file << ", ";
5408  /** Argument value before PMPI call */
5409  os << "count=" << dd.count << ", ";
5410  /** Argument value before PMPI call */
5411  os << "datatype=" << dd.datatype << ", ";
5412  /** Argument value after PMPI call */
5413  os << "status=" << *dd.status << ")";
5414  }
5415  else {
5416  os << "NULL)";
5417  }
5418  return os;
5419 }
5420 /**
5421  * C++ IO for a file_iread operation.
5422  */
5423 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_iread &dd)
5424 {
5425  os << "dumpi_file_iread(";
5426  if(&dd) {
5427  /** Argument value before PMPI call */
5428  os << "file=" << dd.file << ", ";
5429  /** Argument value before PMPI call */
5430  os << "count=" << dd.count << ", ";
5431  /** Argument value before PMPI call */
5432  os << "datatype=" << dd.datatype << ", ";
5433  /** Argument value after PMPI call */
5434  os << "request=" << dd.request << ")";
5435  }
5436  else {
5437  os << "NULL)";
5438  }
5439  return os;
5440 }
5441 /**
5442  * C++ IO for a file_iwrite operation.
5443  */
5444 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_iwrite &dd)
5445 {
5446  os << "dumpi_file_iwrite(";
5447  if(&dd) {
5448  /** Argument value before PMPI call */
5449  os << "file=" << dd.file << ", ";
5450  /** Argument value before PMPI call */
5451  os << "count=" << dd.count << ", ";
5452  /** Argument value before PMPI call */
5453  os << "datatype=" << dd.datatype << ", ";
5454  /** Argument value after PMPI call */
5455  os << "request=" << dd.request << ")";
5456  }
5457  else {
5458  os << "NULL)";
5459  }
5460  return os;
5461 }
5462 /**
5463  * C++ IO for a file_seek operation.
5464  */
5465 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_seek &dd)
5466 {
5467  os << "dumpi_file_seek(";
5468  if(&dd) {
5469  /** Argument value before PMPI call */
5470  os << "file=" << dd.file << ", ";
5471  /** Argument value before PMPI call */
5472  os << "offset=" << dd.offset << ", ";
5473  /** Argument value before PMPI call */
5474  os << "whence=" << dd.whence << ")";
5475  }
5476  else {
5477  os << "NULL)";
5478  }
5479  return os;
5480 }
5481 /**
5482  * C++ IO for a file_get_position operation.
5483  */
5484 inline std::ostream& operator<<(std::ostream &os,
5485  const dumpi_file_get_position &dd)
5486 {
5487  os << "dumpi_file_get_position(";
5488  if(&dd) {
5489  /** Argument value before PMPI call */
5490  os << "file=" << dd.file << ", ";
5491  /** Argument value after PMPI call */
5492  os << "offset=" << dd.offset << ")";
5493  }
5494  else {
5495  os << "NULL)";
5496  }
5497  return os;
5498 }
5499 /**
5500  * C++ IO for a file_get_byte_offset operation.
5501  */
5502 inline std::ostream& operator<<(std::ostream &os,
5503  const dumpi_file_get_byte_offset &dd)
5504 {
5505  os << "dumpi_file_get_byte_offset(";
5506  if(&dd) {
5507  /** Argument value before PMPI call */
5508  os << "file=" << dd.file << ", ";
5509  /** Argument value before PMPI call */
5510  os << "offset=" << dd.offset << ", ";
5511  /** Argument value after PMPI call */
5512  os << "bytes=" << dd.bytes << ")";
5513  }
5514  else {
5515  os << "NULL)";
5516  }
5517  return os;
5518 }
5519 /**
5520  * C++ IO for a file_read_shared operation.
5521  */
5522 inline std::ostream& operator<<(std::ostream &os,
5523  const dumpi_file_read_shared &dd)
5524 {
5525  os << "dumpi_file_read_shared(";
5526  if(&dd) {
5527  /** Argument value before PMPI call */
5528  os << "file=" << dd.file << ", ";
5529  /** Argument value before PMPI call */
5530  os << "count=" << dd.count << ", ";
5531  /** Argument value before PMPI call */
5532  os << "datatype=" << dd.datatype << ", ";
5533  /** Argument value after PMPI call */
5534  os << "status=" << *dd.status << ")";
5535  }
5536  else {
5537  os << "NULL)";
5538  }
5539  return os;
5540 }
5541 /**
5542  * C++ IO for a file_write_shared operation.
5543  */
5544 inline std::ostream& operator<<(std::ostream &os,
5545  const dumpi_file_write_shared &dd)
5546 {
5547  os << "dumpi_file_write_shared(";
5548  if(&dd) {
5549  /** Argument value before PMPI call */
5550  os << "file=" << dd.file << ", ";
5551  /** Argument value before PMPI call */
5552  os << "count=" << dd.count << ", ";
5553  /** Argument value before PMPI call */
5554  os << "datatype=" << dd.datatype << ", ";
5555  /** Argument value after PMPI call */
5556  os << "status=" << *dd.status << ")";
5557  }
5558  else {
5559  os << "NULL)";
5560  }
5561  return os;
5562 }
5563 /**
5564  * C++ IO for a file_iread_shared operation.
5565  */
5566 inline std::ostream& operator<<(std::ostream &os,
5567  const dumpi_file_iread_shared &dd)
5568 {
5569  os << "dumpi_file_iread_shared(";
5570  if(&dd) {
5571  /** Argument value before PMPI call */
5572  os << "file=" << dd.file << ", ";
5573  /** Argument value before PMPI call */
5574  os << "count=" << dd.count << ", ";
5575  /** Argument value before PMPI call */
5576  os << "datatype=" << dd.datatype << ", ";
5577  /** Argument value after PMPI call */
5578  os << "request=" << dd.request << ")";
5579  }
5580  else {
5581  os << "NULL)";
5582  }
5583  return os;
5584 }
5585 /**
5586  * C++ IO for a file_iwrite_shared operation.
5587  */
5588 inline std::ostream& operator<<(std::ostream &os,
5589  const dumpi_file_iwrite_shared &dd)
5590 {
5591  os << "dumpi_file_iwrite_shared(";
5592  if(&dd) {
5593  /** Argument value before PMPI call */
5594  os << "file=" << dd.file << ", ";
5595  /** Argument value before PMPI call */
5596  os << "count=" << dd.count << ", ";
5597  /** Argument value before PMPI call */
5598  os << "datatype=" << dd.datatype << ", ";
5599  /** Argument value after PMPI call */
5600  os << "request=" << dd.request << ")";
5601  }
5602  else {
5603  os << "NULL)";
5604  }
5605  return os;
5606 }
5607 /**
5608  * C++ IO for a file_read_ordered operation.
5609  */
5610 inline std::ostream& operator<<(std::ostream &os,
5611  const dumpi_file_read_ordered &dd)
5612 {
5613  os << "dumpi_file_read_ordered(";
5614  if(&dd) {
5615  /** Argument value before PMPI call */
5616  os << "file=" << dd.file << ", ";
5617  /** Argument value before PMPI call */
5618  os << "count=" << dd.count << ", ";
5619  /** Argument value before PMPI call */
5620  os << "datatype=" << dd.datatype << ", ";
5621  /** Argument value after PMPI call */
5622  os << "status=" << *dd.status << ")";
5623  }
5624  else {
5625  os << "NULL)";
5626  }
5627  return os;
5628 }
5629 /**
5630  * C++ IO for a file_write_ordered operation.
5631  */
5632 inline std::ostream& operator<<(std::ostream &os,
5633  const dumpi_file_write_ordered &dd)
5634 {
5635  os << "dumpi_file_write_ordered(";
5636  if(&dd) {
5637  /** Argument value before PMPI call */
5638  os << "file=" << dd.file << ", ";
5639  /** Argument value before PMPI call */
5640  os << "count=" << dd.count << ", ";
5641  /** Argument value before PMPI call */
5642  os << "datatype=" << dd.datatype << ", ";
5643  /** Argument value after PMPI call */
5644  os << "status=" << *dd.status << ")";
5645  }
5646  else {
5647  os << "NULL)";
5648  }
5649  return os;
5650 }
5651 /**
5652  * C++ IO for a file_seek_shared operation.
5653  */
5654 inline std::ostream& operator<<(std::ostream &os,
5655  const dumpi_file_seek_shared &dd)
5656 {
5657  os << "dumpi_file_seek_shared(";
5658  if(&dd) {
5659  /** Argument value before PMPI call */
5660  os << "file=" << dd.file << ", ";
5661  /** Argument value before PMPI call */
5662  os << "offset=" << dd.offset << ", ";
5663  /** Argument value before PMPI call */
5664  os << "whence=" << dd.whence << ")";
5665  }
5666  else {
5667  os << "NULL)";
5668  }
5669  return os;
5670 }
5671 /**
5672  * C++ IO for a file_get_position_shared operation.
5673  */
5674 inline std::ostream& operator<<(std::ostream &os,
5675  const dumpi_file_get_position_shared &dd)
5676 {
5677  os << "dumpi_file_get_position_shared(";
5678  if(&dd) {
5679  /** Argument value before PMPI call */
5680  os << "file=" << dd.file << ", ";
5681  /** Argument value after PMPI call */
5682  os << "offset=" << dd.offset << ")";
5683  }
5684  else {
5685  os << "NULL)";
5686  }
5687  return os;
5688 }
5689 /**
5690  * C++ IO for a file_read_at_all_begin operation.
5691  */
5692 inline std::ostream& operator<<(std::ostream &os,
5693  const dumpi_file_read_at_all_begin &dd)
5694 {
5695  os << "dumpi_file_read_at_all_begin(";
5696  if(&dd) {
5697  /** Argument value before PMPI call */
5698  os << "file=" << dd.file << ", ";
5699  /** Argument value before PMPI call */
5700  os << "offset=" << dd.offset << ", ";
5701  /** Argument value before PMPI call */
5702  os << "count=" << dd.count << ", ";
5703  /** Argument value before PMPI call */
5704  os << "datatype=" << dd.datatype << ")";
5705  }
5706  else {
5707  os << "NULL)";
5708  }
5709  return os;
5710 }
5711 /**
5712  * C++ IO for a file_read_at_all_end operation.
5713  */
5714 inline std::ostream& operator<<(std::ostream &os,
5715  const dumpi_file_read_at_all_end &dd)
5716 {
5717  os << "dumpi_file_read_at_all_end(";
5718  if(&dd) {
5719  /** Argument value before PMPI call */
5720  os << "file=" << dd.file << ", ";
5721  /** Argument value after PMPI call */
5722  os << "status=" << *dd.status << ")";
5723  }
5724  else {
5725  os << "NULL)";
5726  }
5727  return os;
5728 }
5729 /**
5730  * C++ IO for a file_write_at_all_begin operation.
5731  */
5732 inline std::ostream& operator<<(std::ostream &os,
5733  const dumpi_file_write_at_all_begin &dd)
5734 {
5735  os << "dumpi_file_write_at_all_begin(";
5736  if(&dd) {
5737  /** Argument value before PMPI call */
5738  os << "file=" << dd.file << ", ";
5739  /** Argument value before PMPI call */
5740  os << "offset=" << dd.offset << ", ";
5741  /** Argument value before PMPI call */
5742  os << "count=" << dd.count << ", ";
5743  /** Argument value before PMPI call */
5744  os << "datatype=" << dd.datatype << ")";
5745  }
5746  else {
5747  os << "NULL)";
5748  }
5749  return os;
5750 }
5751 /**
5752  * C++ IO for a file_write_at_all_end operation.
5753  */
5754 inline std::ostream& operator<<(std::ostream &os,
5755  const dumpi_file_write_at_all_end &dd)
5756 {
5757  os << "dumpi_file_write_at_all_end(";
5758  if(&dd) {
5759  /** Argument value before PMPI call */
5760  os << "file=" << dd.file << ", ";
5761  /** Argument value after PMPI call */
5762  os << "status=" << *dd.status << ")";
5763  }
5764  else {
5765  os << "NULL)";
5766  }
5767  return os;
5768 }
5769 /**
5770  * C++ IO for a file_read_all_begin operation.
5771  */
5772 inline std::ostream& operator<<(std::ostream &os,
5773  const dumpi_file_read_all_begin &dd)
5774 {
5775  os << "dumpi_file_read_all_begin(";
5776  if(&dd) {
5777  /** Argument value before PMPI call */
5778  os << "file=" << dd.file << ", ";
5779  /** Argument value before PMPI call */
5780  os << "count=" << dd.count << ", ";
5781  /** Argument value before PMPI call */
5782  os << "datatype=" << dd.datatype << ")";
5783  }
5784  else {
5785  os << "NULL)";
5786  }
5787  return os;
5788 }
5789 /**
5790  * C++ IO for a file_read_all_end operation.
5791  */
5792 inline std::ostream& operator<<(std::ostream &os,
5793  const dumpi_file_read_all_end &dd)
5794 {
5795  os << "dumpi_file_read_all_end(";
5796  if(&dd) {
5797  /** Argument value before PMPI call */
5798  os << "file=" << dd.file << ", ";
5799  /** Argument value after PMPI call */
5800  os << "status=" << *dd.status << ")";
5801  }
5802  else {
5803  os << "NULL)";
5804  }
5805  return os;
5806 }
5807 /**
5808  * C++ IO for a file_write_all_begin operation.
5809  */
5810 inline std::ostream& operator<<(std::ostream &os,
5811  const dumpi_file_write_all_begin &dd)
5812 {
5813  os << "dumpi_file_write_all_begin(";
5814  if(&dd) {
5815  /** Argument value before PMPI call */
5816  os << "file=" << dd.file << ", ";
5817  /** Argument value before PMPI call */
5818  os << "count=" << dd.count << ", ";
5819  /** Argument value before PMPI call */
5820  os << "datatype=" << dd.datatype << ")";
5821  }
5822  else {
5823  os << "NULL)";
5824  }
5825  return os;
5826 }
5827 /**
5828  * C++ IO for a file_write_all_end operation.
5829  */
5830 inline std::ostream& operator<<(std::ostream &os,
5831  const dumpi_file_write_all_end &dd)
5832 {
5833  os << "dumpi_file_write_all_end(";
5834  if(&dd) {
5835  /** Argument value before PMPI call */
5836  os << "file=" << dd.file << ", ";
5837  /** Argument value after PMPI call */
5838  os << "status=" << *dd.status << ")";
5839  }
5840  else {
5841  os << "NULL)";
5842  }
5843  return os;
5844 }
5845 /**
5846  * C++ IO for a file_read_ordered_begin operation.
5847  */
5848 inline std::ostream& operator<<(std::ostream &os,
5849  const dumpi_file_read_ordered_begin &dd)
5850 {
5851  os << "dumpi_file_read_ordered_begin(";
5852  if(&dd) {
5853  /** Argument value before PMPI call */
5854  os << "file=" << dd.file << ", ";
5855  /** Argument value before PMPI call */
5856  os << "count=" << dd.count << ", ";
5857  /** Argument value before PMPI call */
5858  os << "datatype=" << dd.datatype << ")";
5859  }
5860  else {
5861  os << "NULL)";
5862  }
5863  return os;
5864 }
5865 /**
5866  * C++ IO for a file_read_ordered_end operation.
5867  */
5868 inline std::ostream& operator<<(std::ostream &os,
5869  const dumpi_file_read_ordered_end &dd)
5870 {
5871  os << "dumpi_file_read_ordered_end(";
5872  if(&dd) {
5873  /** Argument value before PMPI call */
5874  os << "file=" << dd.file << ", ";
5875  /** Argument value after PMPI call */
5876  os << "status=" << *dd.status << ")";
5877  }
5878  else {
5879  os << "NULL)";
5880  }
5881  return os;
5882 }
5883 /**
5884  * C++ IO for a file_write_ordered_begin operation.
5885  */
5886 inline std::ostream& operator<<(std::ostream &os,
5887  const dumpi_file_write_ordered_begin &dd)
5888 {
5889  os << "dumpi_file_write_ordered_begin(";
5890  if(&dd) {
5891  /** Argument value before PMPI call */
5892  os << "file=" << dd.file << ", ";
5893  /** Argument value before PMPI call */
5894  os << "count=" << dd.count << ", ";
5895  /** Argument value before PMPI call */
5896  os << "datatype=" << dd.datatype << ")";
5897  }
5898  else {
5899  os << "NULL)";
5900  }
5901  return os;
5902 }
5903 /**
5904  * C++ IO for a file_write_ordered_end operation.
5905  */
5906 inline std::ostream& operator<<(std::ostream &os,
5907  const dumpi_file_write_ordered_end &dd)
5908 {
5909  os << "dumpi_file_write_ordered_end(";
5910  if(&dd) {
5911  /** Argument value before PMPI call */
5912  os << "file=" << dd.file << ", ";
5913  /** Argument value after PMPI call */
5914  os << "status=" << *dd.status << ")";
5915  }
5916  else {
5917  os << "NULL)";
5918  }
5919  return os;
5920 }
5921 /**
5922  * C++ IO for a file_get_type_extent operation.
5923  */
5924 inline std::ostream& operator<<(std::ostream &os,
5925  const dumpi_file_get_type_extent &dd)
5926 {
5927  os << "dumpi_file_get_type_extent(";
5928  if(&dd) {
5929  /** Argument value before PMPI call */
5930  os << "file=" << dd.file << ", ";
5931  /** Argument value before PMPI call */
5932  os << "datatype=" << dd.datatype << ", ";
5933  /** Argument value after PMPI call */
5934  os << "extent=" << dd.extent << ")";
5935  }
5936  else {
5937  os << "NULL)";
5938  }
5939  return os;
5940 }
5941 /**
5942  * C++ IO for a register_datarep operation.
5943  */
5944 inline std::ostream& operator<<(std::ostream &os,
5945  const dumpi_register_datarep &dd)
5946 {
5947  os << "dumpi_register_datarep(";
5948  if(&dd) {
5949  /** Argument value before PMPI call. NUL-terminated std::string */
5950  os << "name=\"" << dd.name << "\")";
5951  }
5952  else {
5953  os << "NULL)";
5954  }
5955  return os;
5956 }
5957 /**
5958  * C++ IO for a file_set_atomicity operation.
5959  */
5960 inline std::ostream& operator<<(std::ostream &os,
5961  const dumpi_file_set_atomicity &dd)
5962 {
5963  os << "dumpi_file_set_atomicity(";
5964  if(&dd) {
5965  /** Argument value before PMPI call */
5966  os << "file=" << dd.file << ", ";
5967  /** Argument value before PMPI call */
5968  os << "flag=" << dd.flag << ")";
5969  }
5970  else {
5971  os << "NULL)";
5972  }
5973  return os;
5974 }
5975 /**
5976  * C++ IO for a file_get_atomicity operation.
5977  */
5978 inline std::ostream& operator<<(std::ostream &os,
5979  const dumpi_file_get_atomicity &dd)
5980 {
5981  os << "dumpi_file_get_atomicity(";
5982  if(&dd) {
5983  /** Argument value before PMPI call */
5984  os << "file=" << dd.file << ", ";
5985  /** Argument value after PMPI call */
5986  os << "flag=" << dd.flag << ")";
5987  }
5988  else {
5989  os << "NULL)";
5990  }
5991  return os;
5992 }
5993 /**
5994  * C++ IO for a file_sync operation.
5995  */
5996 inline std::ostream& operator<<(std::ostream &os, const dumpi_file_sync &dd)
5997 {
5998  os << "dumpi_file_sync(";
5999  if(&dd) {
6000  /** Argument value before PMPI call */
6001  os << "file=" << dd.file << ")";
6002  }
6003  else {
6004  os << "NULL)";
6005  }
6006  return os;
6007 }
6008 /**
6009  * C++ IO for an IO test operation.
6010  */
6011 inline std::ostream& operator<<(std::ostream &os, const dumpio_test &dd)
6012 {
6013  os << "dumpio_test(";
6014  if(&dd) {
6015  /** Argument value before PMPI call */
6016  os << "request=" << dd.request << ", ";
6017  /** Argument value after PMPI call */
6018  os << "flag=" << dd.flag << ", ";
6019  /** Argument value before PMPI call. Only stored if(flag!=0) */
6020  os << "status=" << *dd.status << ")";
6021  }
6022  else {
6023  os << "NULL)";
6024  }
6025  return os;
6026 }
6027 /**
6028  * C++ IO for an IO wait operation.
6029  */
6030 inline std::ostream& operator<<(std::ostream &os, const dumpio_wait &dd)
6031 {
6032  os << "dumpio_wait(";
6033  if(&dd) {
6034  /** Argument value before PMPI call */
6035  os << "request=" << dd.request << ", ";
6036  /** Argument value after PMPI call */
6037  os << "status=" << *dd.status << ")";
6038  }
6039  else {
6040  os << "NULL)";
6041  }
6042  return os;
6043 }
6044 /**
6045  * C++ IO for an IO testall operation.
6046  */
6047 inline std::ostream& operator<<(std::ostream &os, const dumpio_testall &dd)
6048 {
6049  os << "dumpio_testall(";
6050  if(&dd) {
6051  /** Argument value before PMPI call */
6052  os << "count=" << dd.count << ", ";
6053  /** Argument value before PMPI call. Array of length [count] */
6054  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
6055  /** Argument value after PMPI call */
6056  os << "flag=" << dd.flag << ", ";
6057  /**
6058  * Argument value after PMPI call. Array of length [count].
6059  * Only stored if(flag!=0)
6060  */
6061  os << "statuses=" << P::statuses(dd.count, dd.statuses) << ")";
6062  }
6063  else {
6064  os << "NULL)";
6065  }
6066  return os;
6067 }
6068 /**
6069  * C++ IO for an IO waitall operation.
6070  */
6071 inline std::ostream& operator<<(std::ostream &os, const dumpio_waitall &dd)
6072 {
6073  os << "dumpio_waitall(";
6074  if(&dd) {
6075  /** Argument value before PMPI call */
6076  os << "count=" << dd.count << ", ";
6077  /** Argument value before PMPI call. Array of length [count] */
6078  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
6079  /** Argument value after PMPI call. Array of length [count] */
6080  os << "statuses=" << P::statuses(dd.count, dd.statuses) << ")";
6081  }
6082  else {
6083  os << "NULL)";
6084  }
6085  return os;
6086 }
6087 /**
6088  * C++ IO for an IO testany operation.
6089  */
6090 inline std::ostream& operator<<(std::ostream &os, const dumpio_testany &dd)
6091 {
6092  os << "dumpio_testany(";
6093  if(&dd) {
6094  /** Argument value before PMPI call */
6095  os << "count=" << dd.count << ", ";
6096  /** Argument value before PMPI call. Array of length [count] */
6097  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
6098  /** Argument value before PMPI call. Only stored if(flag!=0) */
6099  os << "index=" << dd.index << ", ";
6100  /** Argument value after PMPI call */
6101  os << "flag=" << dd.flag << ", ";
6102  /**
6103  * Argument value after PMPI call. Array of length [count].
6104  * Only stored if(flag!=0)
6105  */
6106  os << "statuses=" << P::statuses(dd.count, dd.statuses) << ")";
6107  }
6108  else {
6109  os << "NULL)";
6110  }
6111  return os;
6112 }
6113 /**
6114  * C++ IO for an IO waitany operation.
6115  */
6116 inline std::ostream& operator<<(std::ostream &os, const dumpio_waitany &dd)
6117 {
6118  os << "dumpio_waitany(";
6119  if(&dd) {
6120  /** Argument value before PMPI call */
6121  os << "count=" << dd.count << ", ";
6122  /** Argument value before PMPI call. Array of length [count] */
6123  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
6124  /** Argument value after PMPI call */
6125  os << "index=" << dd.index << ", ";
6126  /**
6127  * Argument value after PMPI call. Array of length [count].
6128  * Only stored if(index != MPI_UNDEFINED)
6129  */
6130  os << "statuses=" << P::statuses(dd.count, dd.statuses) << ")";
6131  }
6132  else {
6133  os << "NULL)";
6134  }
6135  return os;
6136 }
6137 /**
6138  * C++ IO for an IO waitsome operation.
6139  */
6140 inline std::ostream& operator<<(std::ostream &os, const dumpio_waitsome &dd)
6141 {
6142  os << "dumpio_waitsome(";
6143  if(&dd) {
6144  /** Argument value before PMPI call */
6145  os << "count=" << dd.count << ", ";
6146  /** Argument value before PMPI call. Array of length [count] */
6147  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
6148  /** Argument value after PMPI call */
6149  os << "outcount=" << dd.outcount << ", ";
6150  /** Argument value after PMPI call. Array of length [*outcount] */
6151  os << "indices=" << P::ints(dd.outcount, dd.indices) << ", ";
6152  /** Argument value after PMPI call. Array of length [*outcount] */
6153  os << "statuses=" << P::statuses(dd.outcount, dd.statuses) << ")";
6154  }
6155  else {
6156  os << "NULL)";
6157  }
6158  return os;
6159 }
6160 /**
6161  * C++ IO for an IO testsome operation.
6162  */
6163 inline std::ostream& operator<<(std::ostream &os, const dumpio_testsome &dd)
6164 {
6165  os << "dumpio_testsome(";
6166  if(&dd) {
6167  /** Argument value before PMPI call */
6168  os << "count=" << dd.count << ", ";
6169  /** Argument value before PMPI call. Array of length [count] */
6170  os << "requests=" << P::ints(dd.count, dd.requests) << ", ";
6171  /** Argument value after PMPI call */
6172  os << "outcount=" << dd.outcount << ", ";
6173  /** Argument value after PMPI call. Array of length [*outcount] */
6174  os << "indices=" << P::ints(dd.outcount, dd.indices) << ", ";
6175  /** Argument value after PMPI call. Array of length [*outcount] */
6176  os << "statuses=" << P::statuses(dd.outcount, dd.statuses) << ")";
6177  }
6178  else {
6179  os << "NULL)";
6180  }
6181  return os;
6182 }
6183 
6184 }
6185 }
6186 
6187 #endif /* SSTMAC_SOFTWARE_SKELETONS_UNDUMPI_DUMPITYPEIO_H_INCLUDED */
6188 
std::ostream & operator<<(std::ostream &os, const dumpi_status &status)
Print status info.
Definition: dumpi_type_io.h:33
std::string ints(int len, const T *arr)
Definition: dumpi_type_io.h:75
std::string stringarray(int len, char **arr)
std::string statuses(int len, const dumpi_status *statuses)
std::string stringarraynull2d(bool do_output, int xl, char ***arr)
SUMI = Simulator unified messagine interface It is also the name for a solid ink in Japanese - i...
std::string ints2d(int xl, int yl, T **arr)
std::string stringarraynull(char **arr)