// Copyright (c) 2009 INRIA Sophia-Antipolis (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org); you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public License as // published by the Free Software Foundation; either version 3 of the License, // or (at your option) any later version. // // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ // // Author(s) : Sebastien Loriot, Sylvain Pion #ifndef CGAL_TUPLE_H #define CGAL_TUPLE_H // A wrapper around C++0x, TR1 or Boost tuple<>. // Together with the Is_in_tuple<> tool. #include #ifndef CGAL_CFG_NO_CPP0X_TUPLE # include #elif !defined CGAL_CFG_NO_TR1_TUPLE # include #else # include # include #endif namespace CGAL { namespace cpp0x { #ifndef CGAL_CFG_NO_CPP0X_TUPLE using std::tuple; using std::make_tuple; using std::tie; using std::get; using std::tuple_size; using std::tuple_element; #elif !defined CGAL_CFG_NO_TR1_TUPLE using std::tr1::tuple; using std::tr1::make_tuple; using std::tr1::tie; using std::tr1::get; using std::tr1::tuple_size; using std::tr1::tuple_element; #else using boost::tuple; using boost::make_tuple; using boost::tie; using boost::get; //tuple_size template struct tuple_size:public boost::tuples::length {}; //tuple_element template struct tuple_element: public boost::tuples::element{}; #endif } // cpp0x #ifndef CGAL_CFG_NO_CPP0X_VARIADIC_TEMPLATES // Tool to test whether a type V is among the types of a tuple<...> = T. template struct Is_in_tuple; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = false; }; #else // Non-variadic version template struct Is_in_tuple; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; template struct Is_in_tuple > { static const bool value = Is_in_tuple >::value; }; //Conclusions template struct Is_in_tuple > { static const bool value = false; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = true; }; template struct Is_in_tuple > { static const bool value = true; }; #endif } //namespace CGAL #endif // CGAL_TUPLE_H