]> Dogcows Code - chaz/yoink/blob - src/stlplus/persistence/persistent_shortcuts.tpp
archiving support for releases
[chaz/yoink] / src / stlplus / persistence / persistent_shortcuts.tpp
1 ////////////////////////////////////////////////////////////////////////////////
2
3 // Author: Andy Rushton
4 // Copyright: (c) Southampton University 1999-2004
5 // (c) Andy Rushton 2004-2009
6 // License: BSD License, see ../docs/license.html
7
8 ////////////////////////////////////////////////////////////////////////////////
9 #include <sstream>
10 #include <fstream>
11
12 namespace stlplus
13 {
14
15 ////////////////////////////////////////////////////////////////////////////////
16
17 template<typename T, class D>
18 void dump_to_device(const T& source, std::ostream& result, D dump_fn,
19 dump_context::installer installer)
20 throw(persistent_dump_failed)
21 {
22 dump_context context(result);
23 context.register_all(installer);
24 dump_fn(context, source);
25 }
26
27 template<typename T, class R>
28 void restore_from_device(std::istream& source, T& result, R restore_fn,
29 restore_context::installer installer)
30 throw(persistent_restore_failed)
31 {
32 restore_context context(source);
33 context.register_all(installer);
34 restore_fn(context, result);
35 }
36
37 ////////////////////////////////////////////////////////////////////////////////
38
39 template<typename T, class D>
40 void dump_to_string(const T& source, std::string& result, D dump_fn,
41 dump_context::installer installer)
42 throw(persistent_dump_failed)
43 {
44 std::ostringstream output(std::ios_base::out | std::ios_base::binary);
45 dump_to_device<T,D>(source, output, dump_fn, installer);
46 result = output.str();
47 }
48
49 template<typename T, class R>
50 void restore_from_string(const std::string& source, T& result, R restore_fn,
51 restore_context::installer installer)
52 throw(persistent_restore_failed)
53 {
54 std::istringstream input(source, std::ios_base::in | std::ios_base::binary);
55 restore_from_device<T,R>(input, result, restore_fn, installer);
56 }
57
58 ////////////////////////////////////////////////////////////////////////////////
59
60 template<typename T, class D>
61 void dump_to_file(const T& source, const std::string& filename, D dump_fn,
62 dump_context::installer installer)
63 throw(persistent_dump_failed)
64 {
65 std::ofstream output(filename.c_str(), std::ios_base::out | std::ios_base::binary);
66 dump_to_device<T,D>(source, output, dump_fn, installer);
67 }
68
69 template<typename T, class R>
70 void restore_from_file(const std::string& filename, T& result, R restore_fn,
71 restore_context::installer installer)
72 throw(persistent_restore_failed)
73 {
74 std::ifstream input(filename.c_str(), std::ios_base::in | std::ios_base::binary);
75 restore_from_device<T,R>(input, result, restore_fn, installer);
76 }
77
78 ////////////////////////////////////////////////////////////////////////////////
79
80 } // end namespace stlplus
This page took 0.033065 seconds and 4 git commands to generate.