diff --git a/libsrc/general/archive_base.hpp b/libsrc/general/archive_base.hpp index f6e18cea..9531c7ac 100644 --- a/libsrc/general/archive_base.hpp +++ b/libsrc/general/archive_base.hpp @@ -1,6 +1,8 @@ #ifndef NGS_ARCHIVE_BASE #define NGS_ARCHIVE_BASE +// copied from netgen + namespace ngstd { @@ -20,6 +22,37 @@ namespace ngstd virtual Archive & operator & (string & str) = 0; virtual Archive & operator & (char *& str) = 0; + template + Archive & Do (T * data, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & data[j]; }; return *this; }; + + + virtual Archive & Do (double * d, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & d[j]; }; return *this; }; + + virtual Archive & Do (int * i, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & i[j]; }; return *this; }; + + virtual Archive & Do (long * i, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & i[j]; }; return *this; }; + + virtual Archive & Do (size_t * i, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & i[j]; }; return *this; }; + + virtual Archive & Do (short * i, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & i[j]; }; return *this; }; + + virtual Archive & Do (unsigned char * i, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & i[j]; }; return *this; }; + + virtual Archive & Do (bool * b, size_t n) + { for (size_t j = 0; j < n; j++) { (*this) & b[j]; }; return *this; }; + + + // nvirtual Archive & Do (string * str, size_t n) + // { for (size_t j = 0; j < n; j++) { (*this) & str[j]; }; return *this; }; + // virtual Archive & operator & (char *& str) = 0; + template Archive & operator << (const T & t) {