+++ /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
-#include "persistent_int.hpp"\r
-\r
-namespace stlplus\r
-{\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
- // format: data msB first, packed into bytes with lowest index at the byte's lsb\r
-\r
- // Note: the interface does not provide access to the internal storage and yet\r
- // to be efficient the std::bitset must be packed as bytes. Thus I have to do it the\r
- // hard way.\r
-\r
- template<size_t N>\r
- void dump_bitset(dump_context& context, const std::bitset<N>& data)\r
- throw(persistent_dump_failed)\r
- {\r
- size_t bits = data.size();\r
- size_t bytes = (bits+7)/8;\r
- for (size_t B = bytes; B--; )\r
- {\r
- unsigned char ch = 0;\r
- for (size_t b = 0; b < 8; b++)\r
- {\r
- size_t bit = B*8+b;\r
- if (bit < bits && data.test(bit))\r
- ch |= (0x01 << b);\r
- }\r
- dump_unsigned_char(context,ch);\r
- }\r
- }\r
-\r
- template<size_t N>\r
- void restore_bitset(restore_context& context, std::bitset<N>& data)\r
- throw(persistent_restore_failed)\r
- {\r
- size_t bits = data.size();\r
- size_t bytes = (bits+7)/8;\r
- for (size_t B = bytes; B--; )\r
- {\r
- unsigned char ch = 0;\r
- restore_unsigned_char(context,ch);\r
- for (size_t b = 0; b < 8; b++)\r
- {\r
- size_t bit = B*8+b;\r
- if (bit >= bits) break;\r
- data.set(bit, ch & (0x01 << b) ? true : false);\r
- }\r
- }\r
- }\r
-\r
- ////////////////////////////////////////////////////////////////////////////////\r
-\r
-} // end namespace stlplus\r