+++ /dev/null
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-// Author: Andy Rushton\r
-// Copyright: (c) Southampton University 1999-2004\r
-// (c) Andy Rushton 2004-2009\r
-// License: BSD License, see ../docs/license.html\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-// can be excluded to break the dependency on the portability library\r
-#ifndef NO_STLPLUS_INF\r
-\r
-#include "persistent_int.hpp"\r
-#include "persistent_string.hpp"\r
-#include "persistent_inf.hpp"\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-void stlplus::dump_inf(stlplus::dump_context& context, const stlplus::inf& data)\r
- throw(stlplus::persistent_dump_failed)\r
-{\r
- // don't support dumping of old versions\r
- if (context.version() < 2)\r
- throw stlplus::persistent_dump_failed(std::string("stlplus::inf::dump: wrong version"));\r
- // just dump the string\r
- stlplus::dump_string(context,data.get_bytes());\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////////////\r
-\r
-void stlplus::restore_inf(stlplus::restore_context& context, stlplus::inf& data)\r
- throw(stlplus::persistent_restore_failed)\r
-{\r
- if (context.version() < 1)\r
- throw stlplus::persistent_restore_failed(std::string("stlplus::inf::restore: wrong version"));\r
- if (context.version() == 1)\r
- {\r
- // old-style restore relies on the word size being the same - 32-bits - on all platforms\r
- // this can be restored on such machines but is not portable to 64-bit machines\r
- std::string value;\r
- unsigned bits = 0;\r
- stlplus::restore_unsigned(context,bits);\r
- unsigned words = (bits+7)/32;\r
- // inf was dumped msB first\r
- for (unsigned i = words; i--; )\r
- {\r
- // restore a word\r
- unsigned word = 0;\r
- stlplus::restore_unsigned(context,word);\r
- // now extract the bytes\r
- unsigned char* byte_ptr = (unsigned char*)(&word);\r
- for (unsigned b = 4; b--; )\r
- value.insert(value.begin(),byte_ptr[context.little_endian() ? b : 3 - b]);\r
- }\r
- data.set_bytes(value);\r
- }\r
- else\r
- {\r
- // new-style dump just uses the string persistence\r
- std::string value;\r
- stlplus::restore_string(context,value);\r
- data.set_bytes(value);\r
- }\r
-}\r
-////////////////////////////////////////////////////////////////////////////////\r
-#endif\r