clean-up: complement and modernise basic type-lists
- provide complete conversion paths old-style ⟷ new-style - switch the basic tests to the new variadic sequences - modernise the code; replace typedefs by `using` - change some struct-style ''meta-functions'' into constexpr or compile-time constants
This commit is contained in:
parent
f8517b7011
commit
c8187bdf88
12 changed files with 293 additions and 98 deletions
|
|
@ -496,7 +496,7 @@ namespace func{
|
|||
|
||||
using BoundFunc = function<Ret()>;
|
||||
|
||||
enum { ARG_CNT = count<typename Args::List>::value };
|
||||
enum { ARG_CNT = count<typename Args::List>() };
|
||||
|
||||
|
||||
/** storing a ref to the parameter tuple */
|
||||
|
|
@ -577,8 +577,8 @@ namespace func{
|
|||
using ValList = typename VAL::List;
|
||||
using ValTypes = typename TyOLD<ValList>::Seq;
|
||||
|
||||
enum { ARG_CNT = count<ArgsList>::value
|
||||
, VAL_CNT = count<ValList> ::value
|
||||
enum { ARG_CNT = count<ArgsList>()
|
||||
, VAL_CNT = count<ValList>()
|
||||
, ROFFSET = (VAL_CNT < ARG_CNT)? ARG_CNT-VAL_CNT : 0
|
||||
};
|
||||
|
||||
|
|
@ -681,7 +681,7 @@ namespace func{
|
|||
using ArgsList = typename Args::List;
|
||||
using ValList = typename TyOLD<X>::List;
|
||||
|
||||
enum { ARG_CNT = count<ArgsList>::value };
|
||||
enum { ARG_CNT = count<ArgsList>() };
|
||||
|
||||
using RemainingFront = typename Splice<ArgsList, ValList, pos>::Front;
|
||||
using RemainingBack = typename Splice<ArgsList, ValList, pos>::Back;
|
||||
|
|
@ -910,7 +910,7 @@ namespace func{
|
|||
typename _PapE<SIG>::FunType::Functor
|
||||
bindLast (SIG& f, TERM&& arg)
|
||||
{
|
||||
enum { LAST_POS = -1 + count<typename _Fun<SIG>::Args::List>::value };
|
||||
enum { LAST_POS = -1 + count<typename _Fun<SIG>::Args>() };
|
||||
return BindToArgument<SIG,TERM,LAST_POS>::reduced (f, std::forward<TERM> (arg));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -193,7 +193,7 @@ namespace meta {
|
|||
struct ElementExtractor<lib::diff::Rec, std::tuple<TYPES...>>
|
||||
{
|
||||
template<size_t i>
|
||||
using TargetType = typename Pick<TyOLD<TYPES...>, i>::Type;
|
||||
using TargetType = typename Pick<TySeq<TYPES...>, i>::Type;
|
||||
|
||||
|
||||
template<size_t i>
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
**
|
||||
** The "meta functions" defined here are templates; to access the "result" of
|
||||
** such a meta function, we instantiate the template and then access one of the
|
||||
** embedded constant definitions (usually the enum constant named \c value)
|
||||
** embedded constant definitions (usually the compile-time constant named `value`)
|
||||
**
|
||||
** @see generator.hpp
|
||||
** @see TypelistUtil_test
|
||||
|
|
@ -39,6 +39,9 @@
|
|||
|
||||
|
||||
#include "lib/meta/typelist.hpp"
|
||||
#include "lib/meta/util.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
namespace lib {
|
||||
namespace meta {
|
||||
|
|
@ -46,20 +49,20 @@ namespace meta {
|
|||
|
||||
/**
|
||||
* Metafunction counting the number of Types in the collection
|
||||
* @return an embedded constant \c value holding the result
|
||||
* @return an std::integral_constant type, which can be used
|
||||
* as constexpr value.
|
||||
* @note typeseq-util.hpp defines a specialisation for type-seq
|
||||
*/
|
||||
template<class TYPES>
|
||||
template<class... TYPES>
|
||||
struct count;
|
||||
template<>
|
||||
struct count<Nil>
|
||||
{
|
||||
enum{ value = 0 };
|
||||
};
|
||||
: SizConst<0>
|
||||
{ };
|
||||
template<class TY, class TYPES>
|
||||
struct count<Node<TY,TYPES>>
|
||||
{
|
||||
enum{ value = 1 + count<TYPES>::value };
|
||||
};
|
||||
: SizConst<1 + count<TYPES>()>
|
||||
{ };
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -69,16 +72,12 @@ namespace meta {
|
|||
struct maxSize;
|
||||
template<>
|
||||
struct maxSize<Nil>
|
||||
{
|
||||
static constexpr int value = 0;
|
||||
};
|
||||
: SizConst<0>
|
||||
{ };
|
||||
template<class TY, class TYPES>
|
||||
struct maxSize<Node<TY,TYPES>>
|
||||
{
|
||||
static constexpr size_t thisval = sizeof(TY);
|
||||
static constexpr size_t nextval = maxSize<TYPES>::value;
|
||||
static constexpr size_t value = nextval > thisval? nextval:thisval;
|
||||
};
|
||||
: SizConst<std::max (sizeof(TY), maxSize<TYPES>::value)>
|
||||
{ };
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -88,16 +87,12 @@ namespace meta {
|
|||
struct maxAlign;
|
||||
template<>
|
||||
struct maxAlign<Nil>
|
||||
{
|
||||
static constexpr int value = 0;
|
||||
};
|
||||
: SizConst<0>
|
||||
{ };
|
||||
template<class TY, class TYPES>
|
||||
struct maxAlign<Node<TY,TYPES>>
|
||||
{
|
||||
static constexpr size_t thisval = alignof(TY);
|
||||
static constexpr size_t nextval = maxAlign<TYPES>::value;
|
||||
static constexpr size_t value = nextval > thisval? nextval:thisval;
|
||||
};
|
||||
: SizConst<std::max (alignof(TY), maxAlign<TYPES>::value)>
|
||||
{ };
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -105,30 +100,20 @@ namespace meta {
|
|||
* in a given typelist. Only exact match is detected.
|
||||
*/
|
||||
template<typename TY, typename TYPES>
|
||||
struct IsInList
|
||||
{
|
||||
enum{ value = false };
|
||||
};
|
||||
struct isInList
|
||||
: std::false_type
|
||||
{ };
|
||||
|
||||
template<typename TY, typename TYPES>
|
||||
struct IsInList<TY, Node<TY,TYPES>>
|
||||
{
|
||||
enum{ value = true };
|
||||
};
|
||||
struct isInList<TY, Node<TY,TYPES>>
|
||||
: std::true_type
|
||||
{ };
|
||||
|
||||
template<typename TY, typename XX, typename TYPES>
|
||||
struct IsInList<TY, Node<XX,TYPES>>
|
||||
{
|
||||
enum{ value = IsInList<TY,TYPES>::value };
|
||||
};
|
||||
struct isInList<TY, Node<XX,TYPES>>
|
||||
: std::bool_constant<isInList<TY,TYPES>::value>
|
||||
{ };
|
||||
|
||||
/** convenience shortcut: query function */
|
||||
template<typename TY, typename TYPES>
|
||||
constexpr bool
|
||||
isInList()
|
||||
{
|
||||
return IsInList<TY,TYPES>::value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -146,7 +131,7 @@ namespace meta {
|
|||
template<typename TY, typename TYPES>
|
||||
struct ConstAll<Node<TY,TYPES>>
|
||||
{
|
||||
using List = Node<const TY, typename ConstAll<TYPES>::List>;
|
||||
using List = Node<std::add_const_t<TY>, typename ConstAll<TYPES>::List>;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -79,6 +79,23 @@ namespace meta {
|
|||
return 1 + indexOfType<X,TYPES...>();
|
||||
}
|
||||
|
||||
/** series of definitions to level across variadics,
|
||||
* type-sequences and type-lists
|
||||
* @see typelist-util.hpp
|
||||
*/
|
||||
template<class... TYPES>
|
||||
struct count
|
||||
: SizConst<sizeof...(TYPES)>
|
||||
{ };
|
||||
template<class... TYPES>
|
||||
struct count<TySeq<TYPES...>>
|
||||
: SizConst<sizeof...(TYPES)>
|
||||
{ };
|
||||
template<class... TYPES>
|
||||
struct count<TyOLD<TYPES...>>
|
||||
: SizConst<sizeof...(TYPES)>
|
||||
{ };
|
||||
|
||||
|
||||
/**
|
||||
* Helper: prepend a type to an existing type sequence,
|
||||
|
|
@ -128,6 +145,7 @@ namespace meta {
|
|||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #987 temporary WORKAROUND -- to be obsoleted
|
||||
/**
|
||||
* Additional specialisation of the basic type sequence type,
|
||||
* allowing to re-create a (flat) type sequence from a typelist.
|
||||
|
|
@ -157,6 +175,12 @@ namespace meta {
|
|||
using List = typename TyOLD<T, TYPES...>::List;
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Additional specialisation of the basic type sequence type,
|
||||
* allowing to re-create a (flat) type sequence from a typelist.
|
||||
*/
|
||||
template<class H, class T>
|
||||
struct TySeq< Node<H,T> >
|
||||
{
|
||||
|
|
@ -171,9 +195,9 @@ namespace meta {
|
|||
using List = Nil;
|
||||
using Seq = TySeq<>;
|
||||
};
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #987 temporary WORKAROUND -- to be obsoleted
|
||||
|
||||
|
||||
/**
|
||||
* temporary workaround: strip trailing Nil entries from a
|
||||
* type sequence, to make it compatible with new-style variadic
|
||||
|
|
|
|||
|
|
@ -52,6 +52,10 @@ namespace lib {
|
|||
|
||||
namespace meta {
|
||||
|
||||
template<size_t siz>
|
||||
using SizConst = std::integral_constant<size_t, siz>;
|
||||
|
||||
|
||||
/* === conditional definition selector === */
|
||||
|
||||
template <bool B, class T = void>
|
||||
|
|
|
|||
|
|
@ -306,11 +306,11 @@ namespace meta {
|
|||
return size_t(std::tuple_size<TTX>::value);
|
||||
else
|
||||
if constexpr (lib::meta::is_Typelist<TTX>::value)
|
||||
return lib::meta::count<typename TTX::List>::value;
|
||||
return lib::meta::count<typename TTX::List>();
|
||||
else
|
||||
{ // Fallback: rebind template arguments into a type sequence
|
||||
using Seq = typename RebindVariadic<TySeq, TTX>::Type;
|
||||
return size_t(count<typename Seq::List>::value);
|
||||
return size_t(count<Seq>());
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -216,8 +216,8 @@ namespace lib {
|
|||
{
|
||||
|
||||
public:
|
||||
enum { SIZ = meta::maxSize<typename TYPES::List>::value
|
||||
, ALIGN = meta::maxAlign<typename TYPES::List>::value
|
||||
enum { SIZ = meta::maxSize<typename TYPES::List>()
|
||||
, ALIGN = meta::maxAlign<typename TYPES::List>()
|
||||
};
|
||||
|
||||
template<typename RET>
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ namespace mobject {
|
|||
{ VTABLE = sizeof(size_t)
|
||||
, SPEC_SIZ = VTABLE
|
||||
+ mp::maxSize<
|
||||
mp::TyOLD< PID, lumiera_uid, uint>::List>::value
|
||||
mp::TyOLD< PID, lumiera_uid, uint>::List>()
|
||||
};
|
||||
typedef lib::OpaqueHolder<TargetSpec, SPEC_SIZ> SpecBuff;
|
||||
|
||||
|
|
|
|||
|
|
@ -335,19 +335,18 @@ return: 0
|
|||
END
|
||||
|
||||
|
||||
TEST "TypeList_test" TypeList_test <<END
|
||||
out: - 1 -- 2 -- 3 -- 5 -- 8 -- 13 -- The End -
|
||||
out: ..Size of = 1
|
||||
TEST "Loki Type-List" TypeList_test <<END
|
||||
out-lit: - 21 -- 13 -- 8 -- 5 -- 3 -- 2 -- 1 -- The End -
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
||||
TEST "simple typelist utils" TypeListUtil_test <<END
|
||||
TEST "Simple Type-List utilities" TypeListUtil_test <<END
|
||||
return: 0
|
||||
END
|
||||
|
||||
|
||||
TEST "TypeListGenerator_test" TypeListGenerator_test <<END
|
||||
TEST "Type driven class generation" TypeListGenerator_test <<END
|
||||
out: ctor DoIt<Block<13> >
|
||||
out: ctor DoIt<Block< 8> >
|
||||
out: ctor DoIt<Block< 5> >
|
||||
|
|
@ -368,7 +367,7 @@ return: 0
|
|||
END
|
||||
|
||||
|
||||
TEST "typelist manipulation" TypeListManip_test <<END
|
||||
TEST "Typelist manipulation" TypeListManip_test <<END
|
||||
out-lit: List1 :-<1>-<2>-<3>-
|
||||
out-lit: List2 :-<5>-<6>-<7>-
|
||||
out-lit: Added2 :-<3>-<4>-<5>-
|
||||
|
|
|
|||
|
|
@ -21,8 +21,8 @@
|
|||
|
||||
#include <iostream>
|
||||
|
||||
using std::string;
|
||||
using std::cout;
|
||||
using std::endl;
|
||||
|
||||
|
||||
namespace lib {
|
||||
|
|
@ -34,19 +34,21 @@ namespace test {
|
|||
{
|
||||
Block() { cout << "- "<<I<<" -"; }
|
||||
};
|
||||
struct Zero
|
||||
struct Ending
|
||||
{
|
||||
Zero() { cout << "- The End -"; }
|
||||
Ending(){ cout << "- The End -" <<endl; }
|
||||
};
|
||||
|
||||
|
||||
typedef TyOLD< Block<1>
|
||||
, Block<2>
|
||||
, Block<3>
|
||||
, Block<5>
|
||||
, Block<8>
|
||||
, Block<13>
|
||||
>::List TheList;
|
||||
using SequenceOfTypes = TySeq< Block<21>
|
||||
, Block<13>
|
||||
, Block<8>
|
||||
, Block<5>
|
||||
, Block<3>
|
||||
, Block<2>
|
||||
, Block<1>
|
||||
>;
|
||||
using ListOfTypes = typename SequenceOfTypes::List;
|
||||
|
||||
|
||||
template<class X, class P>
|
||||
|
|
@ -60,7 +62,8 @@ namespace test {
|
|||
{ }
|
||||
;
|
||||
|
||||
typedef Chain<TheList,Zero> AssembledClass;
|
||||
using AssembledClass = Chain<ListOfTypes, Ending>;
|
||||
|
||||
|
||||
/*********************************************************************//**
|
||||
* @test try out Loki-style typelist metaprogramming.
|
||||
|
|
@ -73,10 +76,9 @@ namespace test {
|
|||
void
|
||||
run (Arg)
|
||||
{
|
||||
AssembledClass wow_me_haz_numbers;
|
||||
AssembledClass me_haz_numbers;
|
||||
|
||||
cout << "\n..Size of = "
|
||||
<< sizeof(wow_me_haz_numbers) <<"\n";
|
||||
CHECK (1 == sizeof(me_haz_numbers));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -27,13 +27,13 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
typedef TyOLD< int
|
||||
, uint
|
||||
, int64_t
|
||||
, uint64_t
|
||||
>::List TheList;
|
||||
using TheList = TySeq< int
|
||||
, uint
|
||||
, int64_t
|
||||
, uint64_t
|
||||
>::List;
|
||||
|
||||
typedef TyOLD< >::List EmptyList;
|
||||
using EmptyList = TySeq< >::List;
|
||||
|
||||
|
||||
|
||||
|
|
@ -52,20 +52,22 @@ namespace test {
|
|||
void
|
||||
run (Arg)
|
||||
{
|
||||
CHECK (4 == count<TheList>::value);
|
||||
CHECK (0 == count<EmptyList>::value);
|
||||
CHECK (4 == count<TheList>() );
|
||||
CHECK (0 == count<EmptyList>());
|
||||
|
||||
CHECK (sizeof(int64_t) == maxSize<TheList>::value);
|
||||
CHECK (0 == maxSize<EmptyList>::value);
|
||||
CHECK (sizeof(int64_t) == maxSize<TheList>() );
|
||||
CHECK (0 == maxSize<EmptyList>() );
|
||||
CHECK (alignof(int64_t) == maxAlign<TheList>() );
|
||||
CHECK (0 == maxAlign<EmptyList>());
|
||||
|
||||
CHECK ( bool(IsInList<int , TheList>::value));
|
||||
CHECK ( bool(IsInList<uint , TheList>::value));
|
||||
CHECK ( bool(IsInList<int64_t , TheList>::value));
|
||||
CHECK ( bool(IsInList<uint64_t, TheList>::value));
|
||||
CHECK ( bool(isInList<int , TheList>()));
|
||||
CHECK ( bool(isInList<uint , TheList>()));
|
||||
CHECK ( bool(isInList<int64_t , TheList>()));
|
||||
CHECK ( bool(isInList<uint64_t, TheList>()));
|
||||
|
||||
CHECK (!bool(IsInList<double , TheList>::value));
|
||||
CHECK (!bool(IsInList<int , EmptyList>::value));
|
||||
CHECK (!bool(IsInList<int , int>::value)); // Note: not-a-typelist yields false too
|
||||
CHECK (!bool(isInList<double , TheList>()));
|
||||
CHECK (!bool(isInList<int , EmptyList>()));
|
||||
CHECK (!bool(isInList<int , int>())); // Note: not-a-typelist yields false too
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -164231,6 +164231,185 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1748826894390" ID="ID_1736451439" MODIFIED="1748826903420" TEXT="Zonen für Umstellung identifizieren">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node COLOR="#435e98" CREATED="1748827924638" ID="ID_1710277250" MODIFIED="1748869708456" TEXT="Manipulations-Funktionen">
|
||||
<node CREATED="1748827943942" ID="ID_1841252518" MODIFIED="1748828044902" TEXT="Tuple-Builder, Split, Prepend und Pick unterstützen bereits beide Varianten"/>
|
||||
<node CREATED="1748828081030" ID="ID_780708642" MODIFIED="1748828109653" TEXT="damit können alle typeseq-util bereits für beide Varianten verwendet werden">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1748828247849" ID="ID_476644412" MODIFIED="1748869713383" TEXT="Verbindung mit Typelisten">
|
||||
<node COLOR="#435e98" CREATED="1748828313009" ID="ID_1470463237" MODIFIED="1748869832016" TEXT="Rückweg Typelist ⟶ Typsequenz">
|
||||
<arrowlink DESTINATION="ID_281104576" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_351374746" STARTARROW="None" STARTINCLINATION="458;41;"/>
|
||||
<node CREATED="1748828416378" ID="ID_1994646495" MODIFIED="1748869656471" TEXT="es gibt eine Spezialisierung von TyOLD">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
in typeseq-util (etwas versteckt zwischen den Spezialisierungen von Prepend, was wiederum Vorraussetzung ist, so einen Rückweg konstruieren zu können)
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1748828427985" ID="ID_819357004" MODIFIED="1748869657923" TEXT="auch eine für TySeq hinzufügen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1748828579825" ID="ID_873142911" MODIFIED="1748869733060" TEXT="typelist-manip ist völlig eigenständig">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
d.h arbeitet ausschließlich auf Typlisten und bezieht sich nirgends auf Typ-Sequenzen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1748828920169" ID="ID_511778446" MODIFIED="1748869770714" TEXT="generator.hpp arbeitet ebenfalls nur auf Typlisten">
|
||||
<arrowlink DESTINATION="ID_803058969" ENDARROW="Default" ENDINCLINATION="852;0;" ID="Arrow_ID_1971292758" STARTARROW="None" STARTINCLINATION="302;17;"/>
|
||||
<node CREATED="1748828953483" ID="ID_1328523415" MODIFIED="1748828958980" TEXT="das kommt mir nun zugute"/>
|
||||
<node CREATED="1748828933676" ID="ID_1716238563" MODIFIED="1748828952655" TEXT="man könnte dann convenience-Front-End definieren"/>
|
||||
</node>
|
||||
<node CREATED="1748828754106" ID="ID_138237629" MODIFIED="1748869733060" TEXT="typelist-diagnostic ebenso">
|
||||
<node CREATED="1748828767089" ID="ID_1047311703" MODIFIED="1748828818895" TEXT="meta::is_Typelist ist geschickt definiert">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
es stellt nämllich nur auf einen nested  X::List ab
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1748828781783" ID="ID_691444823" MODIFIED="1748828794388" TEXT="sollte also für alle Varianten gleichermaßen greifen"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1748829095135" ID="ID_1295682918" MODIFIED="1748829098145" TEXT="Funktionen">
|
||||
<node CREATED="1748829099022" ID="ID_766756688" MODIFIED="1748829101916" TEXT="Signatur-Utils">
|
||||
<node CREATED="1748829959670" ID="ID_1188075291" MODIFIED="1748829968228" TEXT="sind bereits mit beiden kompatibel"/>
|
||||
</node>
|
||||
<node CREATED="1748829102455" ID="ID_1254282139" MODIFIED="1748829106392" TEXT="Closure">
|
||||
<node CREATED="1748829838133" ID="ID_1933174501" MODIFIED="1748829845923" TEXT="hat nur wenige Verwendungen">
|
||||
<node CREATED="1748829860803" ID="ID_517247632" MODIFIED="1748829863739" TEXT="Commands"/>
|
||||
<node CREATED="1748829872320" ID="ID_568804131" MODIFIED="1748829875428" TEXT="Random-Draw"/>
|
||||
<node CREATED="1748829881837" ID="ID_1354679657" MODIFIED="1748829885400" TEXT="tuple-closure"/>
|
||||
<node CREATED="1748829890844" ID="ID_1803577911" MODIFIED="1748829894782" TEXT="view-spec-dsl"/>
|
||||
</node>
|
||||
<node CREATED="1748829733384" ID="ID_83679265" MODIFIED="1748829744922" TEXT="sollte sich bereits ohne weiteres schwenken lassen"/>
|
||||
<node CREATED="1748829745682" ID="ID_61352432" MODIFIED="1748829759664" TEXT="erzeugt nur Tuple, oder macht Split / Prepend"/>
|
||||
<node CREATED="1748829779637" ID="ID_1158113558" MODIFIED="1748829835939" TEXT="man könnte dann im Nachgang die Apply-Definition eliminieren">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
...aber nur wenn's einfach geht; eigentlich ist das außerhalb vom Scope und könnte auch später mal gemacht werden (ist nur ein Implementierungsdetail), sofern die bestehende Impl mit den neuen Typlisten arbeitet
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1748829133428" ID="ID_266502224" MODIFIED="1748829134942" TEXT="Tuple">
|
||||
<node CREATED="1748829135672" ID="ID_1078202790" MODIFIED="1748829142923" TEXT="tuple-record-init">
|
||||
<node CREATED="1748869115796" ID="ID_508891239" MODIFIED="1748869125930" TEXT="sehr wichtig für GenNode via UI-Bus"/>
|
||||
<node CREATED="1748869126637" ID="ID_1892597632" MODIFIED="1748869141216" TEXT="verwendet Type-Sequenze lediglich zum Re-binding eines Tuple-Typs"/>
|
||||
<node COLOR="#338800" CREATED="1748869141825" ID="ID_893825351" MODIFIED="1748869166877" TEXT="kann man einfach auf die neue Variante schwenken">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1748829164245" ID="ID_1618911636" MODIFIED="1748829167991" TEXT="variadic-helper">
|
||||
<node CREATED="1748830128123" ID="ID_450144323" MODIFIED="1748830132130" TEXT="(nur am Rande)"/>
|
||||
<node CREATED="1748830132883" ID="ID_1589913777" MODIFIED="1748830138854" TEXT="IndexIter unterstützt beide"/>
|
||||
<node CREATED="1748830139501" ID="ID_622177889" MODIFIED="1748830160252" TEXT="ElmTypes ist nur für neue (variadisch) definiert"/>
|
||||
</node>
|
||||
<node CREATED="1748829176262" ID="ID_1246318914" MODIFIED="1748829178958" TEXT="Variant"/>
|
||||
<node CREATED="1748829201135" ID="ID_1330371655" MODIFIED="1748829203111" TEXT="Visitor"/>
|
||||
<node CREATED="1748829220424" ID="ID_795696886" MODIFIED="1748829224836" TEXT="Session-Command">
|
||||
<node CREATED="1748829229664" ID="ID_214343950" MODIFIED="1748829240967" TEXT="AcceptArg und AcceptBind umstellen"/>
|
||||
<node CREATED="1748829241698" ID="ID_1502522588" MODIFIED="1748829249189" TEXT="dann sollte big-Bang möglich sein"/>
|
||||
</node>
|
||||
<node CREATED="1748829278917" ID="ID_250508253" MODIFIED="1748829282736" TEXT="Session & Builder">
|
||||
<node CREATED="1748829283559" ID="ID_373354659" MODIFIED="1748829291711" TEXT="hängt vermutlich an Variant bzw. Visitor"/>
|
||||
</node>
|
||||
<node CREATED="1748829316732" ID="ID_733906672" MODIFIED="1748829324434" TEXT="Timecode-formate"/>
|
||||
<node CREATED="1748829331775" ID="ID_1553022384" MODIFIED="1748829333067" TEXT="Tests">
|
||||
<node CREATED="1748829335663" ID="ID_953757498" MODIFIED="1748829343651" TEXT="jeweils bei Bezug mit umstellen"/>
|
||||
<node CREATED="1748829344620" ID="ID_1034418764" MODIFIED="1748883769361" TEXT="im Einzelnen">
|
||||
<icon BUILTIN="list"/>
|
||||
<node CREATED="1748829369449" MODIFIED="1748829369449" TEXT="FormatSupport_test"/>
|
||||
<node CREATED="1748829384655" MODIFIED="1748829384655" TEXT="TimeControl_test"/>
|
||||
<node CREATED="1748829402514" MODIFIED="1748829402514" TEXT="VisitingTool_test"/>
|
||||
<node CREATED="1748829412897" MODIFIED="1748829412897" TEXT="CommandCloneBuilder_test"/>
|
||||
<node CREATED="1748829420654" MODIFIED="1748829420654" TEXT="CommandEquality_test"/>
|
||||
<node CREATED="1748829427640" MODIFIED="1748829427640" TEXT="CommandMutation_test"/>
|
||||
<node CREATED="1748829435006" MODIFIED="1748829435006" TEXT="CommandRegistry_test"/>
|
||||
<node CREATED="1748829442778" MODIFIED="1748829442778" TEXT="HandlingPatternBasics_test"/>
|
||||
<node CREATED="1748829453011" MODIFIED="1748829453011" TEXT="BuilderTool_test"/>
|
||||
<node CREATED="1748829468217" MODIFIED="1748829468217" TEXT="SessionServiceAccess_test"/>
|
||||
<node CREATED="1748829480048" MODIFIED="1748829480048" TEXT="FunctionClosure_test"/>
|
||||
<node CREATED="1748829502213" MODIFIED="1748829502213" TEXT="FunctionComposition_test"/>
|
||||
<node CREATED="1748829512571" MODIFIED="1748829512571" TEXT="GeneratorCombinations_test"/>
|
||||
<node COLOR="#435e98" CREATED="1748829523737" ID="ID_803058969" MODIFIED="1748883754992" TEXT="TypeListGenerator_test">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_803058969" ENDARROW="Default" ENDINCLINATION="852;0;" ID="Arrow_ID_1971292758" SOURCE="ID_511778446" STARTARROW="None" STARTINCLINATION="302;17;"/>
|
||||
</node>
|
||||
<node CREATED="1748829534601" MODIFIED="1748829534601" TEXT="MetaUtils_test"/>
|
||||
<node CREATED="1748829542074" MODIFIED="1748829542074" TEXT="TupleHelper_test"/>
|
||||
<node CREATED="1748829551216" MODIFIED="1748829551216" TEXT="TupleRecordInit_test"/>
|
||||
<node CREATED="1748829559066" MODIFIED="1748829559066" TEXT="TypeListManip_test"/>
|
||||
<node CREATED="1748829567920" MODIFIED="1748829567920" TEXT="TypeList_test"/>
|
||||
<node COLOR="#435e98" CREATED="1748829576396" ID="ID_281104576" MODIFIED="1748883754992" TEXT="TypeListUtil_test">
|
||||
<linktarget COLOR="#a9b4c1" DESTINATION="ID_281104576" ENDARROW="Default" ENDINCLINATION="589;-82;" ID="Arrow_ID_351374746" SOURCE="ID_1470463237" STARTARROW="None" STARTINCLINATION="458;41;"/>
|
||||
</node>
|
||||
<node CREATED="1748829585985" MODIFIED="1748829585985" TEXT="TypeSeqManipl_test"/>
|
||||
<node CREATED="1748829607017" MODIFIED="1748829607017" TEXT="Variant_test"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1748871733811" ID="ID_1327114043" MODIFIED="1748871745451" TEXT="schrittweise umarbeiten...">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1748871746934" ID="ID_1013283697" MODIFIED="1748883821476" TEXT="mit einfachen Typ-Listen anfangen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1748871760093" ID="ID_234969081" MODIFIED="1748883829134" TEXT="alle Konvertierungspfade aufgedoppelt">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1748871777734" ID="ID_543292197" MODIFIED="1748883832925" TEXT="die zugehörigen Tests auf die neuen Typ-Sequenzen umstellen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1748871811471" ID="ID_1037157310" MODIFIED="1748883848889" TEXT="bei der Gelegenheit auch modernisieren">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1748871820220" ID="ID_446849123" MODIFIED="1748883860119" TEXT="typedefs durch using ersetzen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1748871829578" ID="ID_308061484" MODIFIED="1748883860119" TEXT="Meta-Wertfunktionen in constexpr überführen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
</node>
|
||||
<node CREATED="1748871856256" ID="ID_304666403" MODIFIED="1748871864810" TEXT="Tests vervollständigen"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1748873216115" ID="ID_1189899594" MODIFIED="1748879258348" TEXT="Big anti-Bang: NullType ⟼ Nil">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1748873298068" ID="ID_132055056" MODIFIED="1748873322310" TEXT="182 usages...">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1748873306616" ID="ID_906235553" MODIFIED="1748873326356" TEXT="jede Menge Code-Formatierung kaputt">
|
||||
<font NAME="SansSerif" SIZE="7"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1748873250610" ID="ID_7395466" MODIFIED="1748873280467" TEXT="Big-Bang: TySeq ⟼ Types">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
|
|||
Loading…
Reference in a new issue