X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fstlplus%2Fpersistence%2Fpersistent_shortcuts.tpp;fp=src%2Fstlplus%2Fpersistence%2Fpersistent_shortcuts.tpp;h=9b5aac5578040bcceb238f6fe5f48bb7214308cb;hb=6b0a0d0efafe34d48ab344fca3b479553bd4e62c;hp=0000000000000000000000000000000000000000;hpb=85783316365181491a3e3c0c63659972477cebba;p=chaz%2Fyoink diff --git a/src/stlplus/persistence/persistent_shortcuts.tpp b/src/stlplus/persistence/persistent_shortcuts.tpp new file mode 100644 index 0000000..9b5aac5 --- /dev/null +++ b/src/stlplus/persistence/persistent_shortcuts.tpp @@ -0,0 +1,80 @@ +//////////////////////////////////////////////////////////////////////////////// + +// Author: Andy Rushton +// Copyright: (c) Southampton University 1999-2004 +// (c) Andy Rushton 2004-2009 +// License: BSD License, see ../docs/license.html + +//////////////////////////////////////////////////////////////////////////////// +#include +#include + +namespace stlplus +{ + + //////////////////////////////////////////////////////////////////////////////// + + template + void dump_to_device(const T& source, std::ostream& result, D dump_fn, + dump_context::installer installer) + throw(persistent_dump_failed) + { + dump_context context(result); + context.register_all(installer); + dump_fn(context, source); + } + + template + void restore_from_device(std::istream& source, T& result, R restore_fn, + restore_context::installer installer) + throw(persistent_restore_failed) + { + restore_context context(source); + context.register_all(installer); + restore_fn(context, result); + } + + //////////////////////////////////////////////////////////////////////////////// + + template + void dump_to_string(const T& source, std::string& result, D dump_fn, + dump_context::installer installer) + throw(persistent_dump_failed) + { + std::ostringstream output(std::ios_base::out | std::ios_base::binary); + dump_to_device(source, output, dump_fn, installer); + result = output.str(); + } + + template + void restore_from_string(const std::string& source, T& result, R restore_fn, + restore_context::installer installer) + throw(persistent_restore_failed) + { + std::istringstream input(source, std::ios_base::in | std::ios_base::binary); + restore_from_device(input, result, restore_fn, installer); + } + + //////////////////////////////////////////////////////////////////////////////// + + template + void dump_to_file(const T& source, const std::string& filename, D dump_fn, + dump_context::installer installer) + throw(persistent_dump_failed) + { + std::ofstream output(filename.c_str(), std::ios_base::out | std::ios_base::binary); + dump_to_device(source, output, dump_fn, installer); + } + + template + void restore_from_file(const std::string& filename, T& result, R restore_fn, + restore_context::installer installer) + throw(persistent_restore_failed) + { + std::ifstream input(filename.c_str(), std::ios_base::in | std::ios_base::binary); + restore_from_device(input, result, restore_fn, installer); + } + + //////////////////////////////////////////////////////////////////////////////// + +} // end namespace stlplus