29 #include "libmesh/xdr_cxx.h"
30 #include "libmesh/libmesh_logging.h"
31 #ifdef LIBMESH_HAVE_GZSTREAM
32 # include "libmesh/ignore_warnings.h"
33 # include "gzstream.h"
34 # include "libmesh/restore_warnings.h"
36 #include "libmesh/auto_ptr.h"
42 void bzip_file (
const std::string & unzipped_name)
44 #ifdef LIBMESH_HAVE_BZIP
45 LOG_SCOPE(
"system(bzip2)",
"XdrIO");
47 std::string system_string =
"bzip2 -f ";
48 system_string += unzipped_name;
49 if (std::system(system_string.c_str()))
50 libmesh_file_error(system_string);
52 libmesh_error_msg(
"ERROR: need bzip2/bunzip2 to create " << unzipped_name <<
".bz2");
56 std::string unzip_file (
const std::string &
name)
58 std::ostringstream pid_suffix;
59 pid_suffix <<
'_' << getpid();
61 std::string new_name =
name;
62 if (
name.size() -
name.rfind(
".bz2") == 4)
64 #ifdef LIBMESH_HAVE_BZIP
65 new_name.erase(new_name.end() - 4, new_name.end());
66 new_name += pid_suffix.str();
67 LOG_SCOPE(
"system(bunzip2)",
"XdrIO");
68 std::string system_string =
"bunzip2 -f -k -c ";
69 system_string +=
name +
" > " + new_name;
70 if (std::system(system_string.c_str()))
71 libmesh_file_error(system_string);
73 libmesh_error_msg(
"ERROR: need bzip2/bunzip2 to open .bz2 file " <<
name);
76 else if (
name.size() -
name.rfind(
".xz") == 3)
78 #ifdef LIBMESH_HAVE_XZ
79 new_name.erase(new_name.end() - 3, new_name.end());
80 new_name += pid_suffix.str();
81 LOG_SCOPE(
"system(xz -d)",
"XdrIO");
82 std::string system_string =
"xz -f -d -k -c ";
83 system_string +=
name +
" > " + new_name;
84 if (std::system(system_string.c_str()))
85 libmesh_file_error(system_string);
87 libmesh_error_msg(
"ERROR: need xz to open .xz file " <<
name);
93 void xzip_file (
const std::string & unzipped_name)
95 #ifdef LIBMESH_HAVE_XZ
96 LOG_SCOPE(
"system(xz)",
"XdrIO");
98 std::string system_string =
"xz -f ";
99 system_string += unzipped_name;
100 if (std::system(system_string.c_str()))
101 libmesh_file_error(system_string);
103 libmesh_error_msg(
"ERROR: need xz to create " << unzipped_name <<
".xz");
109 void remove_unzipped_file (
const std::string &
name)
111 std::ostringstream pid_suffix;
112 pid_suffix <<
'_' << getpid();
116 if (
name.size() -
name.rfind(
".bz2") == 4)
118 std::string new_name(
name.begin(),
name.end()-4);
119 new_name += pid_suffix.str();
120 std::remove(new_name.c_str());
122 if (
name.size() -
name.rfind(
".xz") == 3)
124 std::string new_name(
name.begin(),
name.end()-3);
125 new_name += pid_suffix.str();
126 std::remove(new_name.c_str());
140 #ifdef LIBMESH_HAVE_XDR
174 #ifdef LIBMESH_HAVE_XDR
178 libmesh_file_error(
name.c_str());
179 xdrs = libmesh_make_unique<XDR>();
180 xdrstdio_create (
xdrs.get(),
fp, (
mode ==
ENCODE) ? XDR_ENCODE : XDR_DECODE);
183 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
184 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
185 <<
"The XDR interface is not available in this installation");
200 #ifdef LIBMESH_HAVE_GZSTREAM
201 igzstream * inf =
new igzstream;
204 inf->open(
name.c_str(), std::ios::in);
206 libmesh_error_msg(
"ERROR: need gzstream to handle .gz files!!!");
211 std::ifstream * inf =
new std::ifstream;
215 std::string new_name = unzip_file(
name);
217 inf->open(new_name.c_str(), std::ios::in);
223 libmesh_file_error(
name);
235 #ifdef LIBMESH_HAVE_GZSTREAM
236 ogzstream * outf =
new ogzstream;
241 libmesh_error_msg(
"ERROR: need gzstream to handle .gz files!!!");
246 std::ofstream * outf =
new std::ofstream;
250 std::string new_name =
name;
253 new_name.erase(new_name.end() - 4, new_name.end());
256 new_name.erase(new_name.end() - 3, new_name.end());
267 libmesh_error_msg(
"Invalid mode = " <<
mode);
280 #ifdef LIBMESH_HAVE_XDR
284 xdr_destroy (
xdrs.get());
296 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
297 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
298 <<
"The XDR interface is not available in this installation");
307 if (
in.get() !=
nullptr)
320 if (
out.get() !=
nullptr)
335 libmesh_error_msg(
"Invalid mode = " <<
mode);
348 #ifdef LIBMESH_HAVE_XDR
358 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
359 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
360 <<
"The XDR interface is not available in this installation");
370 if (
in.get() !=
nullptr)
377 if (
out.get() !=
nullptr)
383 libmesh_error_msg(
"Invalid mode = " <<
mode);
398 #ifdef LIBMESH_HAVE_XDR
426 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
427 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
428 <<
"The XDR interface is not available in this installation");
469 #ifdef LIBMESH_HAVE_XDR
475 template <
typename T>
476 xdrproc_t xdr_translator();
478 template <
typename T>
479 bool xdr_translate(XDR * x, T & a)
481 return (xdr_translator<T>())(x, &a, 0);
485 bool xdr_translate(XDR * x,
489 std::copy(s.begin(), s.end(), sptr);
496 bool b = xdr_string(x, &begin, length);
499 length = cast_int<unsigned int>(std::strlen(sptr));
501 std::copy(sptr, sptr+length, s.begin());
506 template <
typename T>
507 bool xdr_translate(XDR * x, std::complex<T> & a)
509 T r = a.real(), i = a.imag();
510 bool b1 = xdr_translate(x, r);
511 bool b2 = xdr_translate(x, i);
512 a = std::complex<T>(r,i);
516 template <
typename T>
517 bool xdr_translate(XDR * x, std::vector<T> & a)
519 unsigned int length = cast_int<unsigned int>(a.size());
520 xdr_u_int(x, &length);
524 return xdr_vector(x, reinterpret_cast<char *>(a.data()), length,
sizeof(T),
525 xdr_translator<T>());
531 template <
typename T>
532 bool xdr_translate(XDR * x, std::vector<std::complex<T>> & a)
534 unsigned int length = cast_int<unsigned int>(a.size());
535 bool b = xdr_u_int(x, &length);
538 if (!xdr_translate(x, val))
544 bool xdr_translate(XDR * x, std::vector<std::string> & s)
546 unsigned int length = cast_int<unsigned int>(s.size());
547 bool b = xdr_u_int(x, &length);
550 if (!xdr_translate(x, val))
556 xdrproc_t xdr_translator<int>()
560 if (
sizeof(
int) <= 4)
561 return (xdrproc_t)(xdr_int);
562 else if (
sizeof(
int) ==
sizeof(
long long))
563 return (xdrproc_t)(xdr_longlong_t);
564 else if (
sizeof(
int) ==
sizeof(long))
565 return (xdrproc_t)(xdr_long);
571 xdrproc_t xdr_translator<unsigned int>()
575 if (
sizeof(
unsigned int) <= 4)
576 return (xdrproc_t)(xdr_u_int);
577 else if (
sizeof(
unsigned int) ==
sizeof(
unsigned long))
578 return (xdrproc_t)(xdr_u_long);
579 else if (
sizeof(
unsigned int) ==
sizeof(
unsigned long long))
580 return (xdrproc_t)(xdr_u_longlong_t);
586 xdrproc_t xdr_translator<long int>()
590 if (
sizeof(
long int) <= 4)
591 return (xdrproc_t)(xdr_long);
592 else if (
sizeof(
long int) ==
sizeof(
long long))
593 return (xdrproc_t)(xdr_longlong_t);
599 xdrproc_t xdr_translator<unsigned long int>()
603 if (
sizeof(
unsigned long int) <= 4)
604 return (xdrproc_t)(xdr_u_long);
605 else if (
sizeof(
unsigned long int) ==
sizeof(
unsigned long long))
606 return (xdrproc_t)(xdr_u_longlong_t);
620 xdrproc_t xdr_translator<long long>() {
return (xdrproc_t)(xdr_longlong_t); }
623 xdrproc_t xdr_translator<unsigned long long>() {
return (xdrproc_t)(xdr_u_longlong_t); }
626 xdrproc_t xdr_translator<short int>() {
return (xdrproc_t)(xdr_short); }
629 xdrproc_t xdr_translator<unsigned short int>() {
return (xdrproc_t)(xdr_u_short); }
632 xdrproc_t xdr_translator<char>() {
return (xdrproc_t)(xdr_char); }
635 xdrproc_t xdr_translator<signed char>() {
return (xdrproc_t)(xdr_char); }
638 xdrproc_t xdr_translator<unsigned char>() {
return (xdrproc_t)(xdr_u_char); }
641 xdrproc_t xdr_translator<float>() {
return (xdrproc_t)(xdr_float); }
644 xdrproc_t xdr_translator<double>() {
return (xdrproc_t)(xdr_double); }
648 xdrproc_t xdr_translator<long double>() {
return (xdrproc_t)(xdr_double); }
650 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION
652 xdrproc_t xdr_translator<Real>() {
return (xdrproc_t)(xdr_double); }
659 template <
typename T>
666 template <
typename T>
671 a = std::complex<T>(r,i);
682 for (
unsigned int c=0, sl=std::strlen(
comm); c!=sl; c++)
686 a.push_back(
comm[c]);
690 template <
typename T>
693 unsigned int length=0;
694 data(length,
"# vector length");
706 template <
typename T>
709 unsigned int length=0;
710 data(length,
"# vector length x 2 (complex)");
713 for (std::complex<T> & a_i : a)
719 a_i = std::complex<T>(r,im);
724 template <
typename T>
727 template <
typename T>
730 *
out << a.real() <<
"\t " << a.imag();
733 template <
typename T>
736 std::size_t length = a.size();
737 data(length,
"# vector length");
748 template <
typename T>
751 std::size_t length=a.size();
752 data(length,
"# vector length x 2 (complex)");
754 for (std::complex<T> & a_i : a)
765 template <
typename T>
773 #ifdef LIBMESH_HAVE_XDR
777 xdr_translate(
xdrs.get(), a);
781 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
782 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
783 <<
"The XDR interface is not available in this installation");
808 *
out << std::scientific
809 << std::setprecision(std::numeric_limits<T>::max_digits10);
815 if (std::string(comment_in) !=
"")
816 *
out <<
"\t " << comment_in;
825 libmesh_error_msg(
"Invalid mode = " <<
mode);
830 template <
typename T>
837 #ifdef LIBMESH_HAVE_XDR
841 unsigned int size_of_type = cast_int<unsigned int>(
sizeof(T));
843 xdr_vector(
xdrs.get(),
847 xdr_translator<T>());
849 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
850 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
851 <<
"The XDR interface is not available in this installation");
859 #ifdef LIBMESH_HAVE_XDR
863 unsigned int size_of_type = cast_int<unsigned int>(
sizeof(T));
866 xdr_vector(
xdrs.get(),
870 xdr_translator<T>());
872 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
873 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
874 <<
"The XDR interface is not available in this installation");
885 for (
unsigned int i=0; i<len; i++)
904 *
out << std::scientific
905 << std::setprecision(std::numeric_limits<T>::max_digits10);
908 for (
unsigned int i=0; i<len; i++)
912 *
out << val[i] <<
" ";
916 const unsigned imax = std::min(line_break, len);
920 for (
unsigned int i=0; i<imax; i++)
940 libmesh_error_msg(
"Invalid mode = " <<
mode);
947 void Xdr::data_stream (
double * val,
const unsigned int len,
const unsigned int line_break)
954 #ifdef LIBMESH_HAVE_XDR
959 xdr_vector(
xdrs.get(),
963 (xdrproc_t) xdr_double);
967 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
968 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
969 <<
"The XDR interface is not available in this installation");
980 for (
unsigned int i=0; i<len; i++)
996 std::ios_base::fmtflags out_flags =
out->flags();
1002 *
out << std::scientific
1003 << std::setprecision(std::numeric_limits<double>::max_digits10);
1006 for (
unsigned int i=0; i<len; i++)
1010 *
out << val[i] <<
' ';
1014 const unsigned imax = std::min(line_break, len);
1018 for (
unsigned int i=0; i<imax; i++)
1035 out->flags(out_flags);
1041 libmesh_error_msg(
"Invalid mode = " <<
mode);
1054 #ifdef LIBMESH_HAVE_XDR
1059 xdr_vector(
xdrs.get(),
1063 (xdrproc_t) xdr_float);
1067 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
1068 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
1069 <<
"The XDR interface is not available in this installation");
1080 for (
unsigned int i=0; i<len; i++)
1096 std::ios_base::fmtflags out_flags =
out->flags();
1102 *
out << std::scientific
1103 << std::setprecision(std::numeric_limits<float>::max_digits10);
1106 for (
unsigned int i=0; i<len; i++)
1110 *
out << val[i] <<
' ';
1114 const unsigned imax = std::min(line_break, len);
1118 for (
unsigned int i=0; i<imax; i++)
1135 out->flags(out_flags);
1141 libmesh_error_msg(
"Invalid mode = " <<
mode);
1147 void Xdr::data_stream (
long double * val,
const unsigned int len,
const unsigned int line_break)
1154 #ifdef LIBMESH_HAVE_XDR
1172 std::vector<double> io_buffer (len);
1176 for (
unsigned int i=0, cnt=0; i<len; i++)
1177 io_buffer[cnt++] =
double(val[i]);
1179 xdr_vector(
xdrs.get(),
1180 reinterpret_cast<char *>(io_buffer.data()),
1183 (xdrproc_t) xdr_double);
1187 for (
unsigned int i=0, cnt=0; i<len; i++)
1189 val[i] = io_buffer[cnt++];
1195 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
1196 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
1197 <<
"The XDR interface is not available in this installation");
1208 for (
unsigned int i=0; i<len; i++)
1224 std::ios_base::fmtflags out_flags =
out->flags();
1230 *
out << std::scientific
1231 << std::setprecision(std::numeric_limits<long double>::max_digits10);
1234 for (
unsigned int i=0; i<len; i++)
1238 *
out << val[i] <<
' ';
1242 const unsigned imax = std::min(line_break, len);
1246 for (
unsigned int i=0; i<imax; i++)
1263 out->flags(out_flags);
1269 libmesh_error_msg(
"Invalid mode = " <<
mode);
1274 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION
1283 #ifdef LIBMESH_HAVE_XDR
1300 std::vector<double> io_buffer (len);
1304 for (
unsigned int i=0, cnt=0; i<len; i++)
1305 io_buffer[cnt++] =
double(val[i]);
1307 xdr_vector(
xdrs.get(),
1308 reinterpret_cast<char *>(io_buffer.data()),
1311 (xdrproc_t) xdr_double);
1315 for (
unsigned int i=0, cnt=0; i<len; i++)
1317 val[i] = io_buffer[cnt++];
1323 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
1324 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
1325 <<
"The XDR interface is not available in this installation");
1336 for (
unsigned int i=0; i<len; i++)
1352 std::ios_base::fmtflags out_flags =
out->flags();
1357 *
out << std::scientific
1358 << std::setprecision(36);
1361 for (
unsigned int i=0; i<len; i++)
1365 *
out << val[i] <<
' ';
1369 const unsigned imax = std::min(line_break, len);
1373 for (
unsigned int i=0; i<imax; i++)
1390 out->flags(out_flags);
1396 libmesh_error_msg(
"Invalid mode = " <<
mode);
1399 #endif // LIBMESH_DEFAULT_QUADRUPLE_PRECISION
1403 #ifdef LIBMESH_USE_COMPLEX_NUMBERS
1405 void Xdr::data_stream (std::complex<double> * val,
const unsigned int len,
const unsigned int line_break)
1412 #ifdef LIBMESH_HAVE_XDR
1419 std::vector<double> io_buffer (2*len);
1423 for (
unsigned int i=0, cnt=0; i<len; i++)
1425 io_buffer[cnt++] = val[i].real();
1426 io_buffer[cnt++] = val[i].imag();
1429 xdr_vector(
xdrs.get(),
1430 reinterpret_cast<char *>(io_buffer.data()),
1433 (xdrproc_t) xdr_double);
1437 for (
unsigned int i=0, cnt=0; i<len; i++)
1439 double re = io_buffer[cnt++];
1440 double im = io_buffer[cnt++];
1441 val[i] = std::complex<double>(re,im);
1446 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
1447 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
1448 <<
"The XDR interface is not available in this installation");
1459 for (
unsigned int i=0; i<len; i++)
1465 val[i] = std::complex<double>(re,im);
1477 std::ios_base::fmtflags out_flags =
out->flags();
1483 *
out << std::scientific
1484 << std::setprecision(std::numeric_limits<double>::max_digits10);
1487 for (
unsigned int i=0; i<len; i++)
1491 *
out << val[i].real() <<
' ';
1492 *
out << val[i].imag() <<
' ';
1496 const unsigned imax = std::min(line_break, len);
1500 for (
unsigned int i=0; i<imax; i++)
1504 *
out << val[cnt].real() <<
' ';
1505 *
out << val[cnt].imag();
1519 out->flags(out_flags);
1525 libmesh_error_msg(
"Invalid mode = " <<
mode);
1530 void Xdr::data_stream (std::complex<long double> * val,
const unsigned int len,
const unsigned int line_break)
1537 #ifdef LIBMESH_HAVE_XDR
1549 std::vector<double> io_buffer (2*len);
1553 for (
unsigned int i=0, cnt=0; i<len; i++)
1555 io_buffer[cnt++] = val[i].real();
1556 io_buffer[cnt++] = val[i].imag();
1559 xdr_vector(
xdrs.get(),
1560 reinterpret_cast<char *>(io_buffer.data()),
1563 (xdrproc_t) xdr_double);
1567 for (
unsigned int i=0, cnt=0; i<len; i++)
1569 double re = io_buffer[cnt++];
1570 double im = io_buffer[cnt++];
1571 val[i] = std::complex<long double>(re, im);
1576 libmesh_error_msg(
"ERROR: Functionality is not available.\n" \
1577 <<
"Make sure LIBMESH_HAVE_XDR is defined at build time\n" \
1578 <<
"The XDR interface is not available in this installation");
1589 for (
unsigned int i=0; i<len; i++)
1595 val[i] = std::complex<long double>(re,im);
1608 std::ios_base::fmtflags out_flags =
out->flags();
1616 *
out << std::scientific
1617 << std::setprecision(std::numeric_limits<long double>::max_digits10);
1620 for (
unsigned int i=0; i<len; i++)
1624 *
out << val[i].real() <<
' ' << val[i].imag() <<
' ';
1628 const unsigned imax = std::min(line_break, len);
1632 for (
unsigned int i=0; i<imax; i++)
1636 *
out << val[cnt].real() <<
' ' << val[cnt].imag();
1650 out->flags(out_flags);
1656 libmesh_error_msg(
"Invalid mode = " <<
mode);
1659 #endif // # LIBMESH_USE_COMPLEX_NUMBERS
1683 *
out <<
"\t " << comment_in <<
'\n';
1688 libmesh_error_msg(
"Invalid mode = " <<
mode);
1697 template void Xdr::data<int> (
int &,
const char *);
1698 template void Xdr::data<unsigned int> (
unsigned int &,
const char *);
1699 template void Xdr::data<unsigned short int> (
unsigned short int &,
const char *);
1700 template void Xdr::data<short int> (
short int &,
const char *);
1701 template void Xdr::data<unsigned long int> (
unsigned long int &,
const char *);
1702 template void Xdr::data<unsigned long long> (
unsigned long long &,
const char *);
1703 template void Xdr::data<long int> (
long int &,
const char *);
1704 template void Xdr::data<long long> (
long long &,
const char *);
1705 template void Xdr::data<char> (
char &,
const char *);
1706 template void Xdr::data<signed char> (
signed char &,
const char *);
1707 template void Xdr::data<unsigned char> (
unsigned char &,
const char *);
1708 template void Xdr::data<float> (
float &,
const char *);
1709 template void Xdr::data<double> (
double &,
const char *);
1710 template void Xdr::data<long double> (
long double &,
const char *);
1711 template void Xdr::data<std::complex<float>> (std::complex<float> &,
const char *);
1712 template void Xdr::data<std::complex<double>> (std::complex<double> &,
const char *);
1713 template void Xdr::data<std::complex<long double>> (std::complex<long double> &,
const char *);
1714 template void Xdr::data<std::string> (std::string &,
const char *);
1715 template void Xdr::data<std::vector<int>> (std::vector<int> &,
const char *);
1716 template void Xdr::data<std::vector<unsigned int>> (std::vector<unsigned int> &,
const char *);
1717 template void Xdr::data<std::vector<short int>> (std::vector<short int> &,
const char *);
1718 template void Xdr::data<std::vector<unsigned short int>> (std::vector<unsigned short int> &,
const char *);
1719 template void Xdr::data<std::vector<long int>> (std::vector<long int> &,
const char *);
1720 template void Xdr::data<std::vector<long long>> (std::vector<long long> &,
const char *);
1721 template void Xdr::data<std::vector<unsigned long int>> (std::vector<unsigned long int> &,
const char *);
1722 template void Xdr::data<std::vector<unsigned long long>> (std::vector<unsigned long long> &,
const char *);
1723 template void Xdr::data<std::vector<char>> (std::vector<char> &,
const char *);
1724 template void Xdr::data<std::vector<signed char>> (std::vector<signed char> &,
const char *);
1725 template void Xdr::data<std::vector<unsigned char>> (std::vector<unsigned char> &,
const char *);
1726 template void Xdr::data<std::vector<float>> (std::vector<float> &,
const char *);
1727 template void Xdr::data<std::vector<double>> (std::vector<double> &,
const char *);
1728 template void Xdr::data<std::vector<long double>> (std::vector<long double> &,
const char *);
1729 template void Xdr::data<std::vector<std::complex<float>>> (std::vector<std::complex<float>> &,
const char *);
1730 template void Xdr::data<std::vector<std::complex<double>>> (std::vector<std::complex<double>> &,
const char *);
1731 template void Xdr::data<std::vector<std::complex<long double>>> (std::vector<std::complex<long double>> &,
const char *);
1732 template void Xdr::data<std::vector<std::string>> (std::vector<std::string> &,
const char *);
1733 template void Xdr::data_stream<unsigned char> (
unsigned char * val,
const unsigned int len,
const unsigned int line_break);
1734 template void Xdr::data_stream<short int> (
short int * val,
const unsigned int len,
const unsigned int line_break);
1735 template void Xdr::data_stream<int> (
int * val,
const unsigned int len,
const unsigned int line_break);
1736 template void Xdr::data_stream<long long> (
long long * val,
const unsigned int len,
const unsigned int line_break);
1737 template void Xdr::data_stream<unsigned short int> (
unsigned short int * val,
const unsigned int len,
const unsigned int line_break);
1738 template void Xdr::data_stream<unsigned int> (
unsigned int * val,
const unsigned int len,
const unsigned int line_break);
1739 template void Xdr::data_stream<unsigned long int> (
unsigned long int * val,
const unsigned int len,
const unsigned int line_break);
1740 template void Xdr::data_stream<unsigned long long> (
unsigned long long * val,
const unsigned int len,
const unsigned int line_break);
1742 #ifdef LIBMESH_DEFAULT_QUADRUPLE_PRECISION
1743 template void Xdr::data<Real> (
Real &,
const char *);
1744 template void Xdr::data<std::complex<Real>> (std::complex<Real> &,
const char *);
1745 template void Xdr::data<std::vector<Real>> (std::vector<Real> &,
const char *);
1746 template void Xdr::data<std::vector<std::complex<Real>>> (std::vector<std::complex<Real>> &,
const char *);