Ejemplo n.º 1
0
 static Archive& save(Archive& ar, const std::variant<Types...> &v) {
     const std::size_t idx = v.index();
     __YAS_CONSTEXPR_IF ( F & yas::json ) {
         ar.write("[", 1);
         ar & YAS_OBJECT(nullptr, idx);
         ar.write(",", 1);
         std_variant_switch<F>(ar, idx, __YAS_CCAST(std::variant<Types...> &, v));
         ar.write("]", 1);
     } else {
Ejemplo n.º 2
0
bool compacted_storage_size_test(std::ostream &log, const char *archive_type, const char *test_name) {
    typename archive_traits::oarchive oa;
    archive_traits::ocreate(oa, archive_type);

    constexpr auto ok = (archive_traits::oarchive_type::flags() & yas::binary)
        && (archive_traits::oarchive_type::flags() & yas::compacted)
    ;

    if ( ok ) {
        std::uint32_t in1 = std::numeric_limits<std::uint32_t>::max();
        std::uint16_t in2 = 1;
        std::uint16_t out1{};
        std::uint16_t out2{};

        auto o0 = YAS_OBJECT(
            nullptr
            ,in1
            ,in2
        );
        oa & o0;

        {
            typename archive_traits::iarchive ia;
            archive_traits::icreate(ia, oa, archive_type);

            auto i0 = YAS_OBJECT_NVP(
                nullptr
                ,("in1", out1)
                ,("in2", out2)
            );
            bool catchedException = false;
            try {
                ia & i0;
            } catch (const ::yas::io_exception& e) {
                catchedException = true;
            }

            if ( !catchedException ) {
                YAS_TEST_REPORT(log, archive_type, test_name);
                return false;
            }
        }
    }

    return true;
}
Ejemplo n.º 3
0
bool yas_object_test(const char* archive_type, const char* io_type) {
	{
		int i0 = 3, i1 = 0;
		auto o0 = YAS_OBJECT("object0", i0);
		auto o1 = YAS_OBJECT("object1", i1);

		typename archive_traits::oarchive oa;
		archive_traits::ocreate(oa, archive_type, io_type);
		oa & o0;

		typename archive_traits::iarchive ia;
		archive_traits::icreate(ia, oa, archive_type, io_type);
		ia & o1;

		if ( i0 != i1 ) {
			std::cout << "YAS_OBJECT deserialization error! [1]" << std::endl;
			return false;
		}
	}
	{
		const int i0 = 4;
		int i1 = 0;
		auto o0 = YAS_OBJECT("object0", i0);
		auto o1 = YAS_OBJECT("object1", i1);

		typename archive_traits::oarchive oa;
		archive_traits::ocreate(oa, archive_type, io_type);
		oa & o0;

		typename archive_traits::iarchive ia;
		archive_traits::icreate(ia, oa, archive_type, io_type);
		ia & o1;

		if ( i0 != i1 ) {
			std::cout << "YAS_OBJECT deserialization error! [2]" << std::endl;
			return false;
		}
	}
	{
		int i0 = 3, i1 = 0;

		typename archive_traits::oarchive oa;
		archive_traits::ocreate(oa, archive_type, io_type);
		oa & YAS_OBJECT("object0", i0);

		typename archive_traits::iarchive ia;
		archive_traits::icreate(ia, oa, archive_type, io_type);
		ia & YAS_OBJECT("object1", i1);

		if ( i0 != i1 ) {
			std::cout << "YAS_OBJECT deserialization error! [3]" << std::endl;
			return false;
		}
	}
	{
		_yas_object_test_::type0 t0(3), t1(0);

		typename archive_traits::oarchive oa;
		archive_traits::ocreate(oa, archive_type, io_type);
		oa & t0;

		typename archive_traits::iarchive ia;
		archive_traits::icreate(ia, oa, archive_type, io_type);
		ia & t1;

		if ( t0.v != t1.v ) {
			std::cout << "YAS_OBJECT deserialization error! [4]" << std::endl;
			return false;
		}
	}

	return true;
}
Ejemplo n.º 4
0
	void serialize(Archive &ar) {
		ar & YAS_OBJECT("type0", v);
	}