void do_serialize(Archive& ar, Int& val, mpl::false_ const&, mpl::false_ const&, mpl::false_ const&) { // Load. // Non-trivial. // Non binary. bool s; ar & s; std::size_t limb_count; std::size_t byte_count; ar & byte_count; limb_count = byte_count / sizeof(limb_type) + (byte_count % sizeof(limb_type) ? 1 : 0); val.resize(limb_count, limb_count); limb_type* pl = val.limbs(); for(std::size_t i = 0; i < limb_count; ++i) { pl[i] = 0; for(std::size_t j = 0; (j < sizeof(limb_type)) && byte_count; ++j) { unsigned char byte; ar & byte; pl[i] |= static_cast<limb_type>(byte) << (j * CHAR_BIT); --byte_count; } } if(s != val.sign()) val.negate(); val.normalize(); }
void do_serialize(Archive& ar, Int& val, mpl::false_ const&, mpl::false_ const&, mpl::true_ const&) { // Load. // Non-trivial. // Binary. bool s; std::size_t c; ar & s; ar & c; val.resize(c, c); ar.load_binary(val.limbs(), c * sizeof(limb_type)); if(s != val.sign()) val.negate(); val.normalize(); }