paella/Code/include/Utility/TupleFunctions.hpp

70 lines
2.4 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// Paella
// Copyright (C) 2015 - Thomas FORGIONE, Emilie JALRAS, Marion LENFANT, Thierry MALON, Amandine PAILLOUX
// Authors :
// Thomas FORGIONE
// Emilie JALRAS
// Marion LENFANT
// Thierry MALON
// Amandine PAILLOUX
//
// This file is part of the project Paella
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
////////////////////////////////////////////////////////////////////////////////
#ifndef TUPLEFUNCTIONS_HPP
#define TUPLEFUNCTIONS_HPP
#include <sstream>
#include <tuple>
namespace pae
{
namespace detail
{
//////////////////////////////////////////////////////////
/// \ingroup utility
/// \brief Loads a tuple from a stream
/// \param tuple tuple to load from the stream
/// \param stream stream from which the tuple is loaded
///
/// Calls recursively the operator>> from the stream to
/// each element of the tuple
//////////////////////////////////////////////////////////
template<typename... Types>
void loadFromStream(std::tuple<Types...>& tuple, std::stringstream& stream);
//////////////////////////////////////////////////////////
/// \ingroup utility
/// \brief overload of the operator<<
/// \param out stream to print the tuple
/// \param tuple tuple to print on the stream
/// \return a reference to out
//////////////////////////////////////////////////////////
template<typename... Types>
std::ostream& operator<<(std::ostream& out, std::tuple<Types...> const& tuple);
} // namespace detail
} // namespace pae
#include <Utility/TupleFunctions.inl>
#endif // TUPLEFUNCTIONS_HPP