// (C) Copyright 2005 Matthias Troyer 



// Use, modification and distribution is subject to the Boost Software

// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at

// http://www.boost.org/LICENSE_1_0.txt)



//  Authors: Matthias Troyer



#ifndef BOOST_MPI_DETAIL_IGNORE_SKELETON_OARCHIVE_HPP

#define BOOST_MPI_DETAIL_IGNORE_SKELETON_OARCHIVE_HPP



#include <boost/pfto.hpp>



#include <boost/archive/detail/auto_link_archive.hpp>

#include <boost/archive/array/oarchive.hpp>

#include <boost/archive/basic_archive.hpp>

#include <boost/archive/detail/oserializer.hpp>

#include <boost/serialization/collection_size_type.hpp>



namespace boost { namespace mpi { namespace detail {



template<class Archive>

class ignore_skeleton_oarchive 

  : public archive::array::oarchive<Archive>

{

public:

	

    ignore_skeleton_oarchive()

	  : archive::array::oarchive<Archive>(archive::no_header)

	{

	}

		

#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS

public:

#else

    friend class archive::detail::interface_oarchive<Archive>;

    friend class archive::save_access;

protected:

#endif



    // intermediate level to support override of operators

    // for templates in the absence of partial function 

    // template ordering

    template<class T>

    void save_override(T const& t, BOOST_PFTO int)

    {

        archive::save(* this->This(), t);

    }

	

#define BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(T) \

    void save_override(T const & , int)        \

	{}



BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::class_id_optional_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::version_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::class_id_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::class_id_reference_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::object_id_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::object_reference_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::tracking_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(archive::class_name_type)

BOOST_ARCHIVE_IGNORE_IMPLEMENTATION(serialization::collection_size_type)



#undef BOOST_ARCHIVE_IGNORE_IMPLEMENTATION

};





} } } // end namespace boost::mpi::detail



#endif // BOOST_MPI_DETAIL_IGNORE_SKELETON_OARCHIVE_HPP

