#include #include #include #include #include #include #include #include #include using namespace std; using namespace boost; using namespace boost::interface; typedef endian disk_uint32_t; static const size_t array_size = 1 << 20; typedef array array_type; array_type array1; array_type array2; typedef array disk_array; int main() { for (int i=0; i!=array1.size(); ++i) array1[i] = uint32_t(i); { ofstream output("array.dat", ios::binary); for (array_type::iterator iter = array1.begin(); iter != array1.end(); ++iter) { disk_uint32_t tmp = *iter; output.write(reinterpret_cast(&tmp), sizeof(tmp)); } } for (int trial=0; trial != 1000; ++trial) { { ifstream input("array.dat", ios::binary); input.read(reinterpret_cast(&array2), sizeof(array2)); disk_array& src = reinterpret_cast(array2); interface::copy(src.begin(), src.end(), array2.begin()); } assert(memcmp(&array1, &array2, sizeof(array_type)) == 0); } return EXIT_SUCCESS; } // main