LUMIERA.clone/tests/library/meta/tuple-diagnostics.hpp
Ichthyostega f6d04d4d02 refactoring(#988): switch correspoinging tests to std::tuple
...with this changeset, our own tuple type should be
basically disconnected and not used anymore
2016-01-19 23:53:20 +01:00

96 lines
2.6 KiB
C++

/*
TUPLE-DIAGNOSTICS - helper for diagnostics of type tuples
Copyright (C) Lumiera.org
2009, Hermann Vosseler <Ichthyostega@web.de>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
* *****************************************************/
/** @file tuple-diagnostics.hpp
** an extension to typelist-diagnostics.hpp, allowing to dump the \em contents of a Tuple datatype.
** With the help of our [generic string converter](\ref util::toString), and the BuildTupleAccessor
** defined within tuple-helper.hpp, we're able to show the type and contents of any data record
** based on std::tuple. For unit-testing, special formatting is provided for the Num<int>
** test types, which makes typelist and tuples of these types a good candidate for tests.
**
** @see TupleHelper_test
** @see FunctionClosure_test
** @see TypelistManip_test
**
*/
#ifndef META_TUPLE_DIAGNOSTICS_H
#define META_TUPLE_DIAGNOSTICS_H
#include "meta/typelist-diagnostics.hpp"
#include "lib/meta/tuple-helper.hpp"
#include "lib/format-string.hpp"
#include "lib/format-obj.hpp"
#include <string>
using std::string;
namespace util {
template<int i>
struct StringConv<lib::meta::Num<i>>
{
static std::string
invoke (lib::meta::Num<i> num) noexcept
{
static util::_Fmt constElm("(%i)");
static util::_Fmt changedElm("{%i}");
return string( (num.o_==i? constElm:changedElm) % int(num.o_));
}
};
}
namespace lib {
namespace meta {
namespace test {
/* ===== printing Tuple types and contents ===== */
template<typename TUP>
inline enable_if<is_Tuple<TUP>,
string >
showType ()
{
using TypeList = typename Types<TUP>::List;
using DumpPrinter = InstantiateChained<TypeList, Printer, NullP>;
return "TUPLE"
+ DumpPrinter::print();
}
// see the macros DISPLAY and DUMPVAL defined in typelist-diagnostics.hpp
}}} // namespace lib::meta::test
#endif