lumiera_/tests/library/meta/tuple-diagnostics.hpp
Ichthyostega 3a5bbd8fb4 Upgrade: put the new tuple_like concept into use
- integrate the concept definition into tuple-helper.hpp
- use it to replace the `is_Structured` traits check
- do not need `enable_if_TupleProtocol` any more

Integrate test coverage of the concept metafunctions
and the generalised get accessor

''This changeset was made at LAC 2025 in Lyon, France''
2025-06-28 00:42:23 +02:00

86 lines
2.2 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
TUPLE-DIAGNOSTICS - helper for diagnostics of type tuples
Copyright (C)
2009, Hermann Vosseler <Ichthyostega@web.de>
  **Lumiera** 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. See the file COPYING for further details.
* *****************************************************************/
/** @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<tuple_like TUP>
inline string
showType ()
{
using TypeList = typename RebindTupleTypes<TUP>::List;
using DumpPrinter = InstantiateChained<TypeList, Printer, NullP>;
return "TUPLE"
+ DumpPrinter::show();
}
// see the macros DISPLAY and DUMPVAL defined in typelist-diagnostics.hpp
}}} // namespace lib::meta::test
#endif