clean-up: simplify function-closure -- investigate BindToArgument
...because swapping in the new standards-based implementation leads to compile failures on tests to cover out-of-bounds cases. Under the (wrong) assumption, that some mistake must be hidden in the Splice-metafunction, I first provided a complete test coverage; while the actual problem was right below my nose, and quite obvious... The old implementation, being based on a case distinction over the argument count, simply was not able even to notice excess arguments; other the new implementation, based on variadics and `std::apply`, which is fully generic and thus passes excess arguments to `std::bind` when a position beyond the actual argument list is specified to be closed. The old behaviour was to silently ignore such an out-of-bounds spec, and this can be reinstated by explicitly capping the prepared tuple of binders and actual arguments passed to `std::bind` Another question of course is, if being tolerant here is a good idea. And beyond that, function-closure.hpp is still terrifyingly complex, unorganised and use-case driven, to start with....
This commit is contained in:
parent
415e4746a6
commit
738d9e5b67
5 changed files with 492 additions and 78 deletions
|
|
@ -583,7 +583,7 @@ namespace func{
|
|||
|
||||
/**
|
||||
* Bind a specific argument to an arbitrary value.
|
||||
* Especially, this "value" might be another binder.
|
||||
* Notably this "value" might be another binder.
|
||||
*/
|
||||
template<typename SIG, typename X, uint pos>
|
||||
class BindToArgument
|
||||
|
|
@ -600,16 +600,17 @@ namespace func{
|
|||
using PlaceholdersBefore = typename func::PlaceholderTuple<RemainingFront>::List;
|
||||
using PlaceholdersBehind = typename func::PlaceholderTuple<RemainingBack,pos+1>::List;
|
||||
|
||||
using PreparedArgs = typename Append< typename Append< PlaceholdersBefore
|
||||
, ValList >::List
|
||||
, PlaceholdersBehind
|
||||
>::List;
|
||||
using PreparedArgsRaw = typename Append<typename Append<PlaceholdersBefore // arguments before the splice: passed-through
|
||||
,ValList >::List // splice in the value tuple
|
||||
,PlaceholdersBehind // arguments behind the splice: passed-through
|
||||
>::List;
|
||||
using PreparedArgs = Prefix<PreparedArgsRaw, ARG_CNT>;
|
||||
using ReducedArgs = typename Append<RemainingFront, RemainingBack>::List;
|
||||
|
||||
using PreparedArgTypes = typename TySeq<PreparedArgs>::Seq;
|
||||
using RemainingArgs = typename TySeq<ReducedArgs>::Seq;
|
||||
|
||||
using ReducedSig = typename BuildFunType<Ret,RemainingArgs>::Sig;
|
||||
using ReducedSig = typename BuildFunType<Ret,RemainingArgs>::Sig;
|
||||
|
||||
template<class SRC, class TAR, size_t i>
|
||||
using IdxSelector = typename PartiallyInitTuple<SRC, TAR, pos>::template IndexMapper<i>;
|
||||
|
|
@ -625,8 +626,7 @@ namespace func{
|
|||
reduced (SIG& f, X val)
|
||||
{
|
||||
Tuple<PreparedArgTypes> params {BuildPreparedArgs{std::make_tuple (val)}};
|
||||
return func::Apply<ARG_CNT>::template bind<ReducedFunc> (f, params);
|
||||
// return bindArgTuple (f, params); ///////////////////////////////////////////////////////OOO does not compile when pos > length of ArgList
|
||||
return bindArgTuple (f, params);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -201,6 +201,14 @@ namespace meta {
|
|||
using Front = Nil;
|
||||
using Back = Nil; };
|
||||
|
||||
/** extract prefix of given length */
|
||||
template<class LI, uint l>
|
||||
using Prefix = typename Splice<LI, Nil, l>::Front;
|
||||
|
||||
/** extract suffix starting at given pos */
|
||||
template<class LI, uint p>
|
||||
using Suffix = typename Splice<LI, Nil, p>::Back;
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ namespace meta {
|
|||
namespace test {
|
||||
|
||||
using ::test::Test;
|
||||
using lib::test::showType;
|
||||
// using lib::test::showType;
|
||||
using lib::meta::_Fun;
|
||||
using func::applyFirst;
|
||||
using func::applyLast;
|
||||
|
|
@ -192,9 +192,8 @@ namespace test {
|
|||
, ph2
|
||||
);
|
||||
|
||||
int res = 0;
|
||||
res = fun_23 (_2_,_3_).o_; // and invoke the resulting functor ("closure"), providing the remaining arguments
|
||||
CHECK (23 == res);
|
||||
int r1 = fun_23 (_2_,_3_).o_; // and invoke the resulting functor ("closure"), providing the remaining arguments
|
||||
CHECK (23 == r1); // result ≡ num18 + _2_ + _3_ ≙ 18 + 2 + 3
|
||||
|
||||
|
||||
|
||||
|
|
@ -207,10 +206,15 @@ namespace test {
|
|||
, get<1>(arg)
|
||||
, get<2>(arg)
|
||||
);
|
||||
res = 0;
|
||||
res = fun_23 (_2_,_3_).o_; // and invoke the resulting functor....
|
||||
CHECK (23 == res);
|
||||
|
||||
int r2 = fun_23 (_2_,_3_).o_; // and invoke the resulting functor....
|
||||
CHECK (23 == r2);
|
||||
|
||||
// function-closure.hpp defines a shorthand for this operation
|
||||
fun_23 = func::bindArgTuple (f, arg);
|
||||
|
||||
int r3 = fun_23 (_2_,_3_).o_;
|
||||
CHECK (23 == r3);
|
||||
|
||||
|
||||
|
||||
|
|
@ -221,9 +225,9 @@ namespace test {
|
|||
|
||||
fun_23 = PApply<Sig123, ArgTypes>::bindFront (f , args_to_bind);
|
||||
// "bindFront" will close the parameters starting from left....
|
||||
res = 0;
|
||||
res = fun_23 (_2_,_3_).o_; // invoke the resulting functor...
|
||||
CHECK (23 == res);
|
||||
|
||||
int r4 = fun_23 (_2_,_3_).o_; // invoke the resulting functor...
|
||||
CHECK (23 == r4);
|
||||
|
||||
|
||||
|
||||
|
|
@ -232,33 +236,33 @@ namespace test {
|
|||
|
||||
// Version4: as you'd typically do it in real life-------- //
|
||||
|
||||
/*
|
||||
fun_23 = func::applyFirst (f, Num<1>(18)); // use the convenience function API to close over a single value
|
||||
|
||||
res = 0;
|
||||
res = fun_23(_2_,_3_).o_; // invoke the resulting functor...
|
||||
CHECK (23 == res);
|
||||
int r5 = fun_23(_2_,_3_).o_; // invoke the resulting functor...
|
||||
CHECK (23 == r5);
|
||||
|
||||
|
||||
|
||||
// what follows is the real unit test...
|
||||
function<Sig123> func123{f}; // alternatively do it with an std::function object
|
||||
fun_23 = func::applyFirst (func123, Num<1>(19));
|
||||
res = fun_23(_2_,_3_).o_;
|
||||
CHECK (24 == res);
|
||||
int r5 = fun_23(_2_,_3_).o_;
|
||||
CHECK (24 == r5);
|
||||
|
||||
using F12 = function<Num<1>(Num<1>, Num<2>)>;
|
||||
F12 fun_12 = func::applyLast (f, Num<3>(20)); // close the *last* argument of a function
|
||||
res = fun_12(_1_,_2_).o_;
|
||||
CHECK (23 == res);
|
||||
int r6 = fun_12(_1_,_2_).o_;
|
||||
CHECK (23 == r6);
|
||||
|
||||
fun_12 = func::applyLast (func123, Num<3>(21)); // alternatively use a function object
|
||||
res = fun_12(_1_,_2_).o_;
|
||||
CHECK (24 == res);
|
||||
int r7 = fun_12(_1_,_2_).o_;
|
||||
CHECK (24 == r7);
|
||||
|
||||
Sig123* fP = &f; // a function pointer works too
|
||||
fun_12 = func::applyLast (fP, Num<3>(22));
|
||||
res = fun_12(_1_,_2_).o_;
|
||||
CHECK (25 == res);
|
||||
int r8 = fun_12(_1_,_2_).o_;
|
||||
CHECK (25 == r8);
|
||||
// cover more cases....
|
||||
|
||||
CHECK (1 == (func::applyLast (fun11<1> , _1_ ) ( ) ).o_);
|
||||
|
|
@ -272,6 +276,7 @@ namespace test {
|
|||
CHECK ( 7+6+5 == (func::applyFirst( fun13<7,6,5>, _7_ ) (_6_,_5_)).o_);
|
||||
CHECK ( 6+5 == (func::applyFirst( fun12<6,5>, _6_ ) (_5_)).o_);
|
||||
CHECK ( 5 == (func::applyFirst( fun11<5>, _5_ ) ( )).o_);
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
|
@ -279,7 +284,7 @@ namespace test {
|
|||
// covering the general case of partial function closure:
|
||||
typedef Num<5> Sig54321 (Num<5>, Num<4>, Num<3>, Num<2>, Num<1>); // Signature of the 5-argument function
|
||||
typedef Num<5> Sig54 (Num<5>, Num<4>); // ...closing the last 3 arguments should yield this 2-argument function
|
||||
using Args2Close = TyOLD<Num<3>, Num<2>, Num<1>>; // Tuple type to hold the 3 argument values used for the closure
|
||||
using Args2Close = TySeq<Num<3>, Num<2>, Num<1>>; // Tuple type to hold the 3 argument values used for the closure
|
||||
|
||||
// Close the trailing 3 arguments of the 5-argument function...
|
||||
function<Sig54> fun_54 = PApply<Sig54321,Args2Close>::bindBack (fun15<5,4,3,2,1>
|
||||
|
|
@ -293,7 +298,6 @@ namespace test {
|
|||
|
||||
|
||||
|
||||
|
||||
void
|
||||
check_functionalComposition ()
|
||||
{
|
||||
|
|
@ -399,9 +403,9 @@ namespace test {
|
|||
using SigC = _Fun<decltype(chain)>::Sig;
|
||||
using SigP = _Fun<decltype(pappl)>::Sig;
|
||||
|
||||
CHECK (showType<Sig1>() == "double (float&, int&, long)"_expect);
|
||||
CHECK (showType<SigC>() == "long (float&, int&, long)"_expect);
|
||||
CHECK (showType<SigP>() == "double (int&, long)"_expect);
|
||||
// CHECK (showType<Sig1>() == "double (float&, int&, long)"_expect);
|
||||
// CHECK (showType<SigC>() == "long (float&, int&, long)"_expect);
|
||||
// CHECK (showType<SigP>() == "double (int&, long)"_expect);
|
||||
|
||||
CHECK (220 == f1 (ff,ii,33));
|
||||
CHECK (220 == chain(ff,ii,33));
|
||||
|
|
|
|||
|
|
@ -45,14 +45,14 @@ namespace test {
|
|||
|
||||
namespace { // type-lists to test with
|
||||
|
||||
typedef TySeq< Num<1>
|
||||
, Num<2>
|
||||
, Num<3>
|
||||
>::List List1;
|
||||
typedef TySeq< Num<5>
|
||||
, Num<6>
|
||||
, Num<7>
|
||||
>::List List2;
|
||||
using List1 = TySeq< Num<1>
|
||||
, Num<2>
|
||||
, Num<3>
|
||||
>::List;
|
||||
using List2 = TySeq< Num<5>
|
||||
, Num<6>
|
||||
, Num<7>
|
||||
>::List;
|
||||
|
||||
|
||||
// see also the CountDown template in typelist-diagnostics.hpp...
|
||||
|
|
@ -193,42 +193,266 @@ namespace test {
|
|||
}
|
||||
|
||||
|
||||
/** @test splice (or rather paste) a list on top of a base list
|
||||
|
||||
/** @test splice (or rather paste) a list on top of a base list.
|
||||
* @note a zero-splice can be used to extract arbitrary sublists
|
||||
* @remark the intended use case is to manipulate some parameters
|
||||
* in a given function-type argument list
|
||||
* @remark this test is so extensive (really complete coverage),
|
||||
* since in 2025 a malfunction was mistakenly suspected.
|
||||
*/
|
||||
void
|
||||
verify_splice ()
|
||||
{
|
||||
using OLi = TySeq<Num<9>,Num<8>>::List;
|
||||
// will "paste" the list OLi "on top" of another Typelist...
|
||||
{ // various base lists
|
||||
using BaLi1 = TySeq<Num<1>>::List; EXPECT (BaLi1, "-<1>-");
|
||||
using BaLi2 = TySeq<Num<1>,Num<2>>::List; EXPECT (BaLi2, "-<1>-<2>-");
|
||||
using BaLi3 = TySeq<Num<1>,Num<2>,Num<3>>::List; EXPECT (BaLi3, "-<1>-<2>-<3>-");
|
||||
using BaLi5 = TySeq<Num<1>,Num<2>,Num<3>,Num<4>,Num<5>>::List;
|
||||
EXPECT (BaLi5, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
using Overl01 = Splice<Nil, Nil>; EXPECT (Overl01, "-");
|
||||
using Overl02 = Splice<Nil, OLi>; EXPECT (Overl02, "-");
|
||||
using Overl03 = Splice<Nil, OLi, 5>; EXPECT (Overl03, "-");
|
||||
using Overl04 = Splice<List1, OLi>; EXPECT (Overl04, "-<9>-<8>-<3>-");
|
||||
using Overl05 = Splice<List1, OLi, 1>; EXPECT (Overl05, "-<1>-<9>-<8>-");
|
||||
using Overl06 = Splice<List1, OLi, 2>; EXPECT (Overl06, "-<1>-<2>-<9>-");
|
||||
using Overl07 = Splice<List1, OLi, 3>; EXPECT (Overl07, "-<1>-<2>-<3>-");
|
||||
using Overl08 = Splice<List1, OLi, 5>; EXPECT (Overl08, "-<1>-<2>-<3>-");
|
||||
using Overl09 = Splice<List1, List1>; EXPECT (Overl09, "-<1>-<2>-<3>-");
|
||||
using Overl10 = Splice<List1, List1, 1>; EXPECT (Overl10, "-<1>-<1>-<2>-");
|
||||
using Overl11 = Splice<List1, Nil>; EXPECT (Overl11, "-<1>-<2>-<3>-");
|
||||
using Overl12 = Splice<List1, Nil, 1>; EXPECT (Overl12, "-<1>-<2>-<3>-");
|
||||
using Overl13 = Splice<List1, Nil, 5>; EXPECT (Overl13, "-<1>-<2>-<3>-");
|
||||
// will "paste" those overlay lists "on top" the base typelists...
|
||||
using OLi1 = TySeq<Num<9>>::List; EXPECT (OLi1, "-<9>-");
|
||||
using OLi2 = TySeq<Num<9>,Num<8>>::List; EXPECT (OLi2, "-<9>-<8>-");
|
||||
using OLi3 = TySeq<Num<9>,Num<8>,Num<7>>::List; EXPECT (OLi3, "-<9>-<8>-<7>-");
|
||||
|
||||
using OLi2 = TySeq<Num<99>>::List;
|
||||
// can retrieve the remaining part of the original list, left and right of splice
|
||||
using Front1 = Splice<List1, OLi2, 0>::Front; EXPECT (Front1, "-" );
|
||||
using Front2 = Splice<List1, OLi2, 1>::Front; EXPECT (Front2, "-<1>-" );
|
||||
using Front3 = Splice<List1, OLi2, 5>::Front; EXPECT (Front3, "-<1>-<2>-<3>-");
|
||||
using Back1 = Splice<List1, OLi2, 0>::Back; EXPECT (Back1 , "-<2>-<3>-" );
|
||||
using Back2 = Splice<List1, OLi2, 1>::Back; EXPECT (Back2 , "-<3>-" );
|
||||
using Back3 = Splice<List1, OLi2, 5>::Back; EXPECT (Back3 , "-" );
|
||||
|
||||
// Note: with a Null-Overlay, this can be used to extract arbitrary sublists:
|
||||
using Front4 = Splice<List1, Nil, 1>::Front; EXPECT (Front4, "-<1>-" );
|
||||
using Back4 = Splice<List1, Nil, 1>::Back; EXPECT (Back4 , "-<2>-<3>-");
|
||||
///////////////////////////////////////////////////
|
||||
// (1) simple cases : on top of 3-element base list
|
||||
using Spli01 = Splice<BaLi3, OLi1>; EXPECT (Spli01, "-<9>-<2>-<3>-");
|
||||
using Spli02 = Splice<BaLi3, OLi1, 1>; EXPECT (Spli02, "-<1>-<9>-<3>-");
|
||||
using Spli03 = Splice<BaLi3, OLi1, 2>; EXPECT (Spli03, "-<1>-<2>-<9>-");
|
||||
using Spli04 = Splice<BaLi3, OLi1, 3>; EXPECT (Spli04, "-<1>-<2>-<3>-");
|
||||
using Spli05 = Splice<BaLi3, OLi1, 5>; EXPECT (Spli05, "-<1>-<2>-<3>-");
|
||||
|
||||
using Spli06 = Splice<BaLi3, OLi2, 0>; EXPECT (Spli06, "-<9>-<8>-<3>-");
|
||||
using Spli07 = Splice<BaLi3, OLi2, 1>; EXPECT (Spli07, "-<1>-<9>-<8>-");
|
||||
using Spli08 = Splice<BaLi3, OLi2, 2>; EXPECT (Spli08, "-<1>-<2>-<9>-");
|
||||
using Spli09 = Splice<BaLi3, OLi2, 3>; EXPECT (Spli09, "-<1>-<2>-<3>-");
|
||||
using Spli10 = Splice<BaLi3, OLi2, 5>; EXPECT (Spli10, "-<1>-<2>-<3>-");
|
||||
|
||||
using Spli11 = Splice<BaLi3, OLi3, 0>; EXPECT (Spli11, "-<9>-<8>-<7>-");
|
||||
using Spli12 = Splice<BaLi3, OLi3, 1>; EXPECT (Spli12, "-<1>-<9>-<8>-");
|
||||
using Spli13 = Splice<BaLi3, OLi3, 2>; EXPECT (Spli13, "-<1>-<2>-<9>-");
|
||||
using Spli14 = Splice<BaLi3, OLi3, 3>; EXPECT (Spli14, "-<1>-<2>-<3>-");
|
||||
using Spli15 = Splice<BaLi3, OLi3, 5>; EXPECT (Spli15, "-<1>-<2>-<3>-");
|
||||
|
||||
// (1b) corresponding Front / Back cases
|
||||
using Frnt01 = Splice<BaLi3, OLi1> ::Front; EXPECT (Frnt01, "-");
|
||||
using Frnt02 = Splice<BaLi3, OLi1, 1>::Front; EXPECT (Frnt02, "-<1>-");
|
||||
using Frnt03 = Splice<BaLi3, OLi1, 2>::Front; EXPECT (Frnt03, "-<1>-<2>-");
|
||||
using Frnt04 = Splice<BaLi3, OLi1, 3>::Front; EXPECT (Frnt04, "-<1>-<2>-<3>-");
|
||||
using Frnt05 = Splice<BaLi3, OLi1, 5>::Front; EXPECT (Frnt05, "-<1>-<2>-<3>-");
|
||||
|
||||
using Frnt06 = Splice<BaLi3, OLi2, 0>::Front; EXPECT (Frnt06, "-");
|
||||
using Frnt07 = Splice<BaLi3, OLi2, 1>::Front; EXPECT (Frnt07, "-<1>-");
|
||||
using Frnt08 = Splice<BaLi3, OLi2, 2>::Front; EXPECT (Frnt08, "-<1>-<2>-");
|
||||
using Frnt09 = Splice<BaLi3, OLi2, 3>::Front; EXPECT (Frnt09, "-<1>-<2>-<3>-");
|
||||
using Frnt10 = Splice<BaLi3, OLi2, 5>::Front; EXPECT (Frnt10, "-<1>-<2>-<3>-");
|
||||
|
||||
using Frnt11 = Splice<BaLi3, OLi3, 0>::Front; EXPECT (Frnt11, "-");
|
||||
using Frnt12 = Splice<BaLi3, OLi3, 1>::Front; EXPECT (Frnt12, "-<1>-");
|
||||
using Frnt13 = Splice<BaLi3, OLi3, 2>::Front; EXPECT (Frnt13, "-<1>-<2>-");
|
||||
using Frnt14 = Splice<BaLi3, OLi3, 3>::Front; EXPECT (Frnt14, "-<1>-<2>-<3>-");
|
||||
using Frnt15 = Splice<BaLi3, OLi3, 5>::Front; EXPECT (Frnt15, "-<1>-<2>-<3>-");
|
||||
|
||||
using Back01 = Splice<BaLi3, OLi1> ::Back; EXPECT (Back01, "-<2>-<3>-");
|
||||
using Back02 = Splice<BaLi3, OLi1, 1>::Back; EXPECT (Back02, "-<3>-");
|
||||
using Back03 = Splice<BaLi3, OLi1, 2>::Back; EXPECT (Back03, "-");
|
||||
using Back04 = Splice<BaLi3, OLi1, 3>::Back; EXPECT (Back04, "-");
|
||||
using Back05 = Splice<BaLi3, OLi1, 5>::Back; EXPECT (Back05, "-");
|
||||
|
||||
using Back06 = Splice<BaLi3, OLi2, 0>::Back; EXPECT (Back06, "-<3>-");
|
||||
using Back07 = Splice<BaLi3, OLi2, 1>::Back; EXPECT (Back07, "-");
|
||||
using Back08 = Splice<BaLi3, OLi2, 2>::Back; EXPECT (Back08, "-");
|
||||
using Back09 = Splice<BaLi3, OLi2, 3>::Back; EXPECT (Back09, "-");
|
||||
using Back10 = Splice<BaLi3, OLi2, 5>::Back; EXPECT (Back10, "-");
|
||||
|
||||
using Back11 = Splice<BaLi3, OLi3, 0>::Back; EXPECT (Back11, "-");
|
||||
using Back12 = Splice<BaLi3, OLi3, 1>::Back; EXPECT (Back12, "-");
|
||||
using Back13 = Splice<BaLi3, OLi3, 2>::Back; EXPECT (Back13, "-");
|
||||
using Back14 = Splice<BaLi3, OLi3, 3>::Back; EXPECT (Back14, "-");
|
||||
using Back15 = Splice<BaLi3, OLi3, 5>::Back; EXPECT (Back15, "-");
|
||||
|
||||
|
||||
///////////////////////////////////////////////////
|
||||
// (2) simple cases : on top of 5-element base list
|
||||
using Spli16 = Splice<BaLi5, OLi1>; EXPECT (Spli16, "-<9>-<2>-<3>-<4>-<5>-");
|
||||
using Spli17 = Splice<BaLi5, OLi1, 1>; EXPECT (Spli17, "-<1>-<9>-<3>-<4>-<5>-");
|
||||
using Spli18 = Splice<BaLi5, OLi1, 2>; EXPECT (Spli18, "-<1>-<2>-<9>-<4>-<5>-");
|
||||
using Spli19 = Splice<BaLi5, OLi1, 3>; EXPECT (Spli19, "-<1>-<2>-<3>-<9>-<5>-");
|
||||
using Spli20 = Splice<BaLi5, OLi1, 4>; EXPECT (Spli20, "-<1>-<2>-<3>-<4>-<9>-");
|
||||
using Spli21 = Splice<BaLi5, OLi1, 5>; EXPECT (Spli21, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
using Spli22 = Splice<BaLi5, OLi1, 8>; EXPECT (Spli22, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
using Spli23 = Splice<BaLi5, OLi2, 0>; EXPECT (Spli23, "-<9>-<8>-<3>-<4>-<5>-");
|
||||
using Spli24 = Splice<BaLi5, OLi2, 1>; EXPECT (Spli24, "-<1>-<9>-<8>-<4>-<5>-");
|
||||
using Spli25 = Splice<BaLi5, OLi2, 2>; EXPECT (Spli25, "-<1>-<2>-<9>-<8>-<5>-");
|
||||
using Spli26 = Splice<BaLi5, OLi2, 3>; EXPECT (Spli26, "-<1>-<2>-<3>-<9>-<8>-");
|
||||
using Spli27 = Splice<BaLi5, OLi2, 4>; EXPECT (Spli27, "-<1>-<2>-<3>-<4>-<9>-");
|
||||
using Spli28 = Splice<BaLi5, OLi2, 5>; EXPECT (Spli28, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
using Spli29 = Splice<BaLi5, OLi2, 8>; EXPECT (Spli29, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
using Spli30 = Splice<BaLi5, OLi3, 0>; EXPECT (Spli30, "-<9>-<8>-<7>-<4>-<5>-");
|
||||
using Spli31 = Splice<BaLi5, OLi3, 1>; EXPECT (Spli31, "-<1>-<9>-<8>-<7>-<5>-");
|
||||
using Spli32 = Splice<BaLi5, OLi3, 2>; EXPECT (Spli32, "-<1>-<2>-<9>-<8>-<7>-");
|
||||
using Spli33 = Splice<BaLi5, OLi3, 3>; EXPECT (Spli33, "-<1>-<2>-<3>-<9>-<8>-");
|
||||
using Spli34 = Splice<BaLi5, OLi3, 4>; EXPECT (Spli34, "-<1>-<2>-<3>-<4>-<9>-");
|
||||
using Spli35 = Splice<BaLi5, OLi3, 5>; EXPECT (Spli35, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
using Spli36 = Splice<BaLi5, OLi3, 8>; EXPECT (Spli36, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
// (2b) corresponding Front / Back cases
|
||||
using Frnt16 = Splice<BaLi5, OLi1> ::Front; EXPECT (Frnt16, "-");
|
||||
using Frnt17 = Splice<BaLi5, OLi1, 1>::Front; EXPECT (Frnt17, "-<1>-");
|
||||
using Frnt18 = Splice<BaLi5, OLi1, 2>::Front; EXPECT (Frnt18, "-<1>-<2>-");
|
||||
using Frnt19 = Splice<BaLi5, OLi1, 3>::Front; EXPECT (Frnt19, "-<1>-<2>-<3>-");
|
||||
using Frnt20 = Splice<BaLi5, OLi1, 4>::Front; EXPECT (Frnt20, "-<1>-<2>-<3>-<4>-");
|
||||
using Frnt21 = Splice<BaLi5, OLi1, 5>::Front; EXPECT (Frnt21, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
using Frnt22 = Splice<BaLi5, OLi1, 8>::Front; EXPECT (Frnt22, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
using Frnt23 = Splice<BaLi5, OLi2, 0>::Front; EXPECT (Frnt23, "-");
|
||||
using Frnt24 = Splice<BaLi5, OLi2, 1>::Front; EXPECT (Frnt24, "-<1>-");
|
||||
using Frnt25 = Splice<BaLi5, OLi2, 2>::Front; EXPECT (Frnt25, "-<1>-<2>-");
|
||||
using Frnt26 = Splice<BaLi5, OLi2, 3>::Front; EXPECT (Frnt26, "-<1>-<2>-<3>-");
|
||||
using Frnt27 = Splice<BaLi5, OLi2, 4>::Front; EXPECT (Frnt27, "-<1>-<2>-<3>-<4>-");
|
||||
using Frnt28 = Splice<BaLi5, OLi2, 5>::Front; EXPECT (Frnt28, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
using Frnt29 = Splice<BaLi5, OLi2, 8>::Front; EXPECT (Frnt29, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
using Frnt30 = Splice<BaLi5, OLi3, 0>::Front; EXPECT (Frnt30, "-");
|
||||
using Frnt31 = Splice<BaLi5, OLi3, 1>::Front; EXPECT (Frnt31, "-<1>-");
|
||||
using Frnt32 = Splice<BaLi5, OLi3, 2>::Front; EXPECT (Frnt32, "-<1>-<2>-");
|
||||
using Frnt33 = Splice<BaLi5, OLi3, 3>::Front; EXPECT (Frnt33, "-<1>-<2>-<3>-");
|
||||
using Frnt34 = Splice<BaLi5, OLi3, 4>::Front; EXPECT (Frnt34, "-<1>-<2>-<3>-<4>-");
|
||||
using Frnt35 = Splice<BaLi5, OLi3, 5>::Front; EXPECT (Frnt35, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
using Frnt36 = Splice<BaLi5, OLi3, 8>::Front; EXPECT (Frnt36, "-<1>-<2>-<3>-<4>-<5>-");
|
||||
|
||||
using Back16 = Splice<BaLi5, OLi1> ::Back; EXPECT (Back16, "-<2>-<3>-<4>-<5>-");
|
||||
using Back17 = Splice<BaLi5, OLi1, 1>::Back; EXPECT (Back17, "-<3>-<4>-<5>-");
|
||||
using Back18 = Splice<BaLi5, OLi1, 2>::Back; EXPECT (Back18, "-<4>-<5>-");
|
||||
using Back19 = Splice<BaLi5, OLi1, 3>::Back; EXPECT (Back19, "-<5>-");
|
||||
using Back20 = Splice<BaLi5, OLi1, 4>::Back; EXPECT (Back20, "-");
|
||||
using Back21 = Splice<BaLi5, OLi1, 5>::Back; EXPECT (Back21, "-");
|
||||
using Back22 = Splice<BaLi5, OLi1, 8>::Back; EXPECT (Back22, "-");
|
||||
|
||||
using Back23 = Splice<BaLi5, OLi2, 0>::Back; EXPECT (Back23, "-<3>-<4>-<5>-");
|
||||
using Back24 = Splice<BaLi5, OLi2, 1>::Back; EXPECT (Back24, "-<4>-<5>-");
|
||||
using Back25 = Splice<BaLi5, OLi2, 2>::Back; EXPECT (Back25, "-<5>-");
|
||||
using Back26 = Splice<BaLi5, OLi2, 3>::Back; EXPECT (Back26, "-");
|
||||
using Back27 = Splice<BaLi5, OLi2, 4>::Back; EXPECT (Back27, "-");
|
||||
using Back28 = Splice<BaLi5, OLi2, 5>::Back; EXPECT (Back28, "-");
|
||||
using Back29 = Splice<BaLi5, OLi2, 8>::Back; EXPECT (Back29, "-");
|
||||
|
||||
using Back30 = Splice<BaLi5, OLi3, 0>::Back; EXPECT (Back30, "-<4>-<5>-");
|
||||
using Back31 = Splice<BaLi5, OLi3, 1>::Back; EXPECT (Back31, "-<5>-");
|
||||
using Back32 = Splice<BaLi5, OLi3, 2>::Back; EXPECT (Back32, "-");
|
||||
using Back33 = Splice<BaLi5, OLi3, 3>::Back; EXPECT (Back33, "-");
|
||||
using Back34 = Splice<BaLi5, OLi3, 4>::Back; EXPECT (Back34, "-");
|
||||
using Back35 = Splice<BaLi5, OLi3, 5>::Back; EXPECT (Back35, "-");
|
||||
using Back36 = Splice<BaLi5, OLi3, 8>::Back; EXPECT (Back36, "-");
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////
|
||||
// (3) degenerate case : excess overlay over smaller base
|
||||
using Spli37 = Splice<BaLi2, OLi3, 0>; EXPECT (Spli37, "-<9>-<8>-");
|
||||
using Spli38 = Splice<BaLi2, OLi3, 1>; EXPECT (Spli38, "-<1>-<9>-");
|
||||
using Spli39 = Splice<BaLi2, OLi3, 2>; EXPECT (Spli39, "-<1>-<2>-");
|
||||
using Spli40 = Splice<BaLi2, OLi3, 5>; EXPECT (Spli40, "-<1>-<2>-");
|
||||
|
||||
using Spli41 = Splice<BaLi1, OLi3, 0>; EXPECT (Spli41, "-<9>-");
|
||||
using Spli42 = Splice<BaLi1, OLi3, 1>; EXPECT (Spli42, "-<1>-");
|
||||
using Spli43 = Splice<BaLi1, OLi3, 2>; EXPECT (Spli43, "-<1>-");
|
||||
using Spli44 = Splice<BaLi1, OLi3, 5>; EXPECT (Spli44, "-<1>-");
|
||||
|
||||
// (3b) corresponding Front / Back cases
|
||||
using Frnt37 = Splice<BaLi2, OLi3, 0>::Front; EXPECT (Frnt37, "-");
|
||||
using Frnt38 = Splice<BaLi2, OLi3, 1>::Front; EXPECT (Frnt38, "-<1>-");
|
||||
using Frnt39 = Splice<BaLi2, OLi3, 2>::Front; EXPECT (Frnt39, "-<1>-<2>-");
|
||||
using Frnt40 = Splice<BaLi2, OLi3, 5>::Front; EXPECT (Frnt40, "-<1>-<2>-");
|
||||
|
||||
using Frnt41 = Splice<BaLi1, OLi3, 0>::Front; EXPECT (Frnt41, "-");
|
||||
using Frnt42 = Splice<BaLi1, OLi3, 1>::Front; EXPECT (Frnt42, "-<1>-");
|
||||
using Frnt43 = Splice<BaLi1, OLi3, 2>::Front; EXPECT (Frnt43, "-<1>-");
|
||||
using Frnt44 = Splice<BaLi1, OLi3, 5>::Front; EXPECT (Frnt44, "-<1>-");
|
||||
|
||||
using Back37 = Splice<BaLi2, OLi3, 0>::Back; EXPECT (Back37, "-");
|
||||
using Back38 = Splice<BaLi2, OLi3, 1>::Back; EXPECT (Back38, "-");
|
||||
using Back39 = Splice<BaLi2, OLi3, 2>::Back; EXPECT (Back39, "-");
|
||||
using Back40 = Splice<BaLi2, OLi3, 5>::Back; EXPECT (Back40, "-");
|
||||
|
||||
using Back41 = Splice<BaLi1, OLi3, 0>::Back; EXPECT (Back41, "-");
|
||||
using Back42 = Splice<BaLi1, OLi3, 1>::Back; EXPECT (Back42, "-");
|
||||
using Back43 = Splice<BaLi1, OLi3, 2>::Back; EXPECT (Back43, "-");
|
||||
using Back44 = Splice<BaLi1, OLi3, 5>::Back; EXPECT (Back44, "-");
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
// (4) degenerate case : empty base
|
||||
using Spli45 = Splice<Nil, OLi3, 0>; EXPECT (Spli45, "-");
|
||||
using Spli46 = Splice<Nil, OLi3, 1>; EXPECT (Spli46, "-");
|
||||
using Spli47 = Splice<Nil, OLi3, 5>; EXPECT (Spli47, "-");
|
||||
|
||||
using Spli48 = Splice<Nil, OLi1, 0>; EXPECT (Spli48, "-");
|
||||
using Spli49 = Splice<Nil, OLi1, 1>; EXPECT (Spli49, "-");
|
||||
using Spli50 = Splice<Nil, OLi1, 5>; EXPECT (Spli50, "-");
|
||||
|
||||
using Spli51 = Splice<Nil, Nil, 0>; EXPECT (Spli51, "-");
|
||||
using Spli52 = Splice<Nil, Nil, 1>; EXPECT (Spli52, "-");
|
||||
using Spli53 = Splice<Nil, Nil, 5>; EXPECT (Spli53, "-");
|
||||
|
||||
// (4b) corresponding Front / Back cases
|
||||
using Frnt45 = Splice<Nil, OLi3, 0>::Front; EXPECT (Frnt45, "-");
|
||||
using Frnt46 = Splice<Nil, OLi3, 1>::Front; EXPECT (Frnt46, "-");
|
||||
using Frnt47 = Splice<Nil, OLi3, 5>::Front; EXPECT (Frnt47, "-");
|
||||
|
||||
using Frnt48 = Splice<Nil, OLi1, 0>::Front; EXPECT (Frnt48, "-");
|
||||
using Frnt49 = Splice<Nil, OLi1, 1>::Front; EXPECT (Frnt49, "-");
|
||||
using Frnt50 = Splice<Nil, OLi1, 5>::Front; EXPECT (Frnt50, "-");
|
||||
|
||||
using Frnt51 = Splice<Nil, Nil, 0>::Front; EXPECT (Frnt51, "-");
|
||||
using Frnt52 = Splice<Nil, Nil, 1>::Front; EXPECT (Frnt52, "-");
|
||||
using Frnt53 = Splice<Nil, Nil, 5>::Front; EXPECT (Frnt53, "-");
|
||||
|
||||
using Back45 = Splice<Nil, OLi3, 0>::Back; EXPECT (Back45, "-");
|
||||
using Back46 = Splice<Nil, OLi3, 1>::Back; EXPECT (Back46, "-");
|
||||
using Back47 = Splice<Nil, OLi3, 5>::Back; EXPECT (Back47, "-");
|
||||
|
||||
using Back48 = Splice<Nil, OLi1, 0>::Back; EXPECT (Back48, "-");
|
||||
using Back49 = Splice<Nil, OLi1, 1>::Back; EXPECT (Back49, "-");
|
||||
using Back50 = Splice<Nil, OLi1, 5>::Back; EXPECT (Back50, "-");
|
||||
|
||||
using Back51 = Splice<Nil, Nil, 0>::Back; EXPECT (Back51, "-");
|
||||
using Back52 = Splice<Nil, Nil, 1>::Back; EXPECT (Back52, "-");
|
||||
using Back53 = Splice<Nil, Nil, 5>::Back; EXPECT (Back53, "-");
|
||||
|
||||
|
||||
//////////////////////////////////////////
|
||||
// (4) special case : zero-splice is split
|
||||
using Spli54 = Splice<BaLi3, Nil, 0>; EXPECT (Spli54, "-<1>-<2>-<3>-");
|
||||
using Spli55 = Splice<BaLi3, Nil, 1>; EXPECT (Spli55, "-<1>-<2>-<3>-");
|
||||
using Spli56 = Splice<BaLi3, Nil, 2>; EXPECT (Spli56, "-<1>-<2>-<3>-");
|
||||
using Spli57 = Splice<BaLi3, Nil, 3>; EXPECT (Spli57, "-<1>-<2>-<3>-");
|
||||
using Spli58 = Splice<BaLi3, Nil, 4>; EXPECT (Spli58, "-<1>-<2>-<3>-");
|
||||
using Spli59 = Splice<BaLi3, Nil, 5>; EXPECT (Spli59, "-<1>-<2>-<3>-");
|
||||
|
||||
// (4b) Front / Back cases : split parts
|
||||
using Frnt54 = Splice<BaLi3, Nil, 0>::Front; EXPECT (Frnt54, "-");
|
||||
using Frnt55 = Splice<BaLi3, Nil, 1>::Front; EXPECT (Frnt55, "-<1>-");
|
||||
using Frnt56 = Splice<BaLi3, Nil, 2>::Front; EXPECT (Frnt56, "-<1>-<2>-");
|
||||
using Frnt57 = Splice<BaLi3, Nil, 3>::Front; EXPECT (Frnt57, "-<1>-<2>-<3>-");
|
||||
using Frnt58 = Splice<BaLi3, Nil, 4>::Front; EXPECT (Frnt58, "-<1>-<2>-<3>-");
|
||||
using Frnt59 = Splice<BaLi3, Nil, 5>::Front; EXPECT (Frnt59, "-<1>-<2>-<3>-");
|
||||
|
||||
using Back54 = Splice<BaLi3, Nil, 0>::Back; EXPECT (Back54, "-<1>-<2>-<3>-");
|
||||
using Back55 = Splice<BaLi3, Nil, 1>::Back; EXPECT (Back55, "-<2>-<3>-");
|
||||
using Back56 = Splice<BaLi3, Nil, 2>::Back; EXPECT (Back56, "-<3>-");
|
||||
using Back57 = Splice<BaLi3, Nil, 3>::Back; EXPECT (Back57, "-");
|
||||
using Back58 = Splice<BaLi3, Nil, 4>::Back; EXPECT (Back58, "-");
|
||||
using Back59 = Splice<BaLi3, Nil, 5>::Back; EXPECT (Back59, "-");
|
||||
|
||||
// Note: these special usages are provided as shorthand
|
||||
using Prfx55 = Prefix<BaLi3, 1>; EXPECT (Prfx55, "-<1>-");
|
||||
using Sufx55 = Suffix<BaLi3, 1>; EXPECT (Sufx55, "-<2>-<3>-");
|
||||
using Prfx56 = Prefix<BaLi3, 2>; EXPECT (Prfx56, "-<1>-<2>-");
|
||||
using Sufx56 = Suffix<BaLi3, 2>; EXPECT (Sufx56, "-<3>-");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -164428,8 +164428,7 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
da es auf std::get<i> mit frest verdrahtetem Index aufsetzt
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1749082438789" ID="ID_477817163" MODIFIED="1749082442014" TEXT="nun...">
|
||||
|
|
@ -164438,11 +164437,12 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
<node CREATED="1749082466958" ID="ID_1265074650" MODIFIED="1749082473555" TEXT="⟹ Compilation-Failure im Binder"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1749082478231" ID="ID_1161415270" MODIFIED="1749082494638" TEXT="kann man das bestehende Verhalten erhalten?">
|
||||
<node COLOR="#435e98" CREATED="1749082478231" ID="ID_1161415270" MODIFIED="1749137091814" TEXT="kann man das bestehende Verhalten erhalten?">
|
||||
<icon BUILTIN="help"/>
|
||||
<node CREATED="1749082495532" ID="ID_367606531" MODIFIED="1749082502619" TEXT="weiß zwar nicht ob das sinnvoll ist...?"/>
|
||||
<node CREATED="1749082503424" ID="ID_1896561211" MODIFIED="1749082514629" TEXT="aber es gibt einen Test und es ist so dokumentiert"/>
|
||||
<node CREATED="1749082714136" ID="ID_1965208394" MODIFIED="1749082734615" TEXT="also ⟹ wie kommt die Länge des Binder-Tuples in BindToArg zustande?">
|
||||
<node COLOR="#435e98" CREATED="1749082714136" FOLDED="true" ID="ID_1965208394" MODIFIED="1749137084537" TEXT="also ⟹ wie kommt die Länge des Binder-Tuples in BindToArg zustande?">
|
||||
<arrowlink COLOR="#fefbd6" DESTINATION="ID_1677536516" ENDARROW="Default" ENDINCLINATION="-312;-26;" ID="Arrow_ID_1066352629" STARTARROW="None" STARTINCLINATION="593;24;"/>
|
||||
<node CREATED="1749085756772" ID="ID_1774712935" MODIFIED="1749085768340" TEXT="es wird aus drei Teilen zusammengesetzt"/>
|
||||
<node CREATED="1749085769610" ID="ID_1876115458" MODIFIED="1749085780773" TEXT="und Präfix/Suffix beruhen auf der angegebenen pos"/>
|
||||
<node CREATED="1749085786524" ID="ID_1747871175" MODIFIED="1749085803306" TEXT="Zugriff vewendet die Splice-Metafunktion">
|
||||
|
|
@ -164452,8 +164452,9 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
<node CREATED="1749086180059" ID="ID_1000117906" MODIFIED="1749086190840" TEXT="es ist mehr wie ein »slide edit«"/>
|
||||
<node CREATED="1749086192917" ID="ID_51185866" MODIFIED="1749086202659" TEXT="geprüft: es gibt nur diese eine Verwendung"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1749086082424" ID="ID_792762505" MODIFIED="1749086090303" TEXT="Fehler in List-Splice">
|
||||
<node COLOR="#5b280f" CREATED="1749086082424" FOLDED="true" ID="ID_792762505" MODIFIED="1749136865497" TEXT="Fehler in List-Splice">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1749086093678" ID="ID_1935542921" MODIFIED="1749086103057" TEXT="dank umgeschriebenen Test jetzt klar zu sehen">
|
||||
<node CREATED="1749086219612" ID="ID_1085792366" MODIFIED="1749086248922" TEXT="OLi : -<9>-<8>-"/>
|
||||
<node CREATED="1749086269399" ID="ID_878268645" MODIFIED="1749086278084" TEXT="List1: -<1>-<2>-<3>-"/>
|
||||
|
|
@ -164499,8 +164500,7 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
<font size="2">» off by one «</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1749089660750" ID="ID_1758217572" MODIFIED="1749089678824" TEXT="sonderbar: dieser Fehler besteht so schon lange....">
|
||||
<icon BUILTIN="clanbomber"/>
|
||||
|
|
@ -164511,11 +164511,160 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
<icon BUILTIN="button_cancel"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1749090267058" ID="ID_541383828" MODIFIED="1749090428234" TEXT="Fokussierte Untersuchung notwendig!">
|
||||
<node COLOR="#5b280f" CREATED="1749128362887" ID="ID_1714360602" MODIFIED="1749128402891" TEXT="STOP: hier funktioniert alles">
|
||||
<icon BUILTIN="closed"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1749128408112" ID="ID_1682700621" MODIFIED="1749128444261" TEXT="kein Fehler in List-Splice">
|
||||
<linktarget COLOR="#6f7598" DESTINATION="ID_1682700621" ENDARROW="Default" ENDINCLINATION="21;247;" ID="Arrow_ID_854761063" SOURCE="ID_385899449" STARTARROW="None" STARTINCLINATION="-365;29;"/>
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1749090267058" ID="ID_541383828" MODIFIED="1749136898652" TEXT="Fokussierte Untersuchung notwendig!">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node COLOR="#5b280f" CREATED="1749121913400" FOLDED="true" ID="ID_1387809956" MODIFIED="1749136875547" TEXT="erst mal: Splice-Verhalten">
|
||||
<icon BUILTIN="help"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1749121939226" ID="ID_637516691" MODIFIED="1749121966264" TEXT="das ist ein „echt jetzt?“-Test"/>
|
||||
<node COLOR="#435e98" CREATED="1749121967392" ID="ID_1112761959" MODIFIED="1749130939350" TEXT="brauche volle Fallkombination">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
ECHT JETZT!
|
||||
</p>
|
||||
<p>
|
||||
Es geht um <b>Intervall-Relationen</b> — bekanntermaßen eines der (fast) ekelhaftesten Fallunterscheidungen (Lage von Raumgebieten zueinander oder teilweise ähnlichen Topologien zueinander ist noch schrecklicher)
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1749121975569" ID="ID_1446200422" MODIFIED="1749121988950" TEXT="Position jeweils">
|
||||
<node COLOR="#5e7e91" CREATED="1749122041338" ID="ID_1056644148" MODIFIED="1749122091062" TEXT="(links außen unmöglich)">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
da als rekursive Berechnung implementiert und der pos-Parameter auch korrekt als uint definiert
|
||||
</p>
|
||||
</body>
|
||||
</html></richcontent>
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
</node>
|
||||
<node CREATED="1749121990017" ID="ID_1788372706" MODIFIED="1749121999308" TEXT="linker Rand"/>
|
||||
<node CREATED="1749122003143" ID="ID_618160479" MODIFIED="1749122010310" TEXT="Innenbereich"/>
|
||||
<node CREATED="1749122012526" ID="ID_357846463" MODIFIED="1749122016476" TEXT="rechts bündig"/>
|
||||
<node CREATED="1749122017266" ID="ID_104294290" MODIFIED="1749122021056" TEXT="rechts überlappend"/>
|
||||
<node CREATED="1749122021393" ID="ID_162203580" MODIFIED="1749122026669" TEXT="rechts außerhalb"/>
|
||||
</node>
|
||||
<node CREATED="1749122107913" ID="ID_97606834" MODIFIED="1749122110525" TEXT="Overlays">
|
||||
<node CREATED="1749122111511" ID="ID_883140295" MODIFIED="1749122116769" TEXT="1-elementig"/>
|
||||
<node CREATED="1749122117365" ID="ID_689358826" MODIFIED="1749122121795" TEXT="2-elementig"/>
|
||||
<node CREATED="1749122122743" ID="ID_1402014204" MODIFIED="1749122127694" TEXT="3-elementig"/>
|
||||
<node CREATED="1749122138685" ID="ID_486640344" MODIFIED="1749122139873" TEXT="leer"/>
|
||||
</node>
|
||||
<node CREATED="1749122141461" ID="ID_1512239211" MODIFIED="1749122144250" TEXT="Basislisten">
|
||||
<node CREATED="1749122145251" ID="ID_1489241747" MODIFIED="1749122150725" TEXT="3-elementig"/>
|
||||
<node CREATED="1749122151858" ID="ID_1187303971" MODIFIED="1749122155841" TEXT="5-elementig"/>
|
||||
<node CREATED="1749122494571" ID="ID_547342416" MODIFIED="1749122522364" TEXT="2-elementig"/>
|
||||
<node CREATED="1749122523130" ID="ID_566182892" MODIFIED="1749122526460" TEXT="1-elementig"/>
|
||||
<node CREATED="1749122527209" ID="ID_809047392" MODIFIED="1749122529258" TEXT="leer"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1749122263404" ID="ID_421629155" MODIFIED="1749130941827" TEXT="Test komplett neu runterklopfen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#ff00cd" CREATED="1749128173762" ID="ID_368064208" MODIFIED="1749128192153" TEXT="zOMG">
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#a8a8bf" COLOR="#2f6210" CREATED="1749128228587" ID="ID_385899449" MODIFIED="1749128454852" TEXT="leider Nein: alles wie erwartet">
|
||||
<arrowlink COLOR="#6f7598" DESTINATION="ID_1682700621" ENDARROW="Default" ENDINCLINATION="21;247;" ID="Arrow_ID_854761063" STARTARROW="None" STARTINCLINATION="-365;29;"/>
|
||||
<icon BUILTIN="back"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1749130960161" ID="ID_1423104834" MODIFIED="1749136753253" TEXT="dann: fragliche Situation schrittweise aufbauen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1749135516159" ID="ID_771788486" MODIFIED="1749135572733" TEXT="FunctionComposition_test::check_bindToArbitraryParameter"/>
|
||||
<node CREATED="1749135574065" ID="ID_1658667842" MODIFIED="1749135594450" TEXT="hier wird dieser problematische Grenzfall ebenfalls mit abgedeckt"/>
|
||||
<node CREATED="1749135599358" ID="ID_12902561" MODIFIED="1749135607346" TEXT="verwende nochmal die alte Implementierung"/>
|
||||
<node CREATED="1749135608311" ID="ID_539233629" MODIFIED="1749135621803" TEXT="mache einfach die internen Type-defs zugänglich"/>
|
||||
<node BACKGROUND_COLOR="#e3dbae" CREATED="1749135655444" ID="ID_1677536516" MODIFIED="1749136790143" TEXT="Problem ist ganz einfach...">
|
||||
<linktarget COLOR="#fefbd6" DESTINATION="ID_1677536516" ENDARROW="Default" ENDINCLINATION="-312;-26;" ID="Arrow_ID_1066352629" SOURCE="ID_1965208394" STARTARROW="None" STARTINCLINATION="593;24;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#dd01af" CREATED="1749135685273" ID="ID_1646532463" MODIFIED="1749135896001" TEXT="was bin ich für ein Esel">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Warum hab ich das nicht gleich gesehen?????
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Ich hatte alle relevanten Informationen bereits gestern Nacht, aus dem Compile-Fehler
|
||||
</li>
|
||||
<li>
|
||||
hab dann wohl einen Tunellblick gehabt, und dann sofort nach der Splice-Implementierung als »Strohhalm« gegriffen, denn das ist was Systematisches
|
||||
</li>
|
||||
<li>
|
||||
und heute hab ich jetzt ein paar Stunden damit verbracht, einen systematischen Testfall runterzuklopfen (was nun immerhin eine vertrauensbildende Maßname ist, denn die Splice-Metafunktion <i>ist definitiv komplex</i>)
|
||||
</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="smily_bad"/>
|
||||
</node>
|
||||
<node CREATED="1749135899620" ID="ID_717531911" MODIFIED="1749136016376" TEXT="die alte Implementierung hat ganz »elegant« ausgenutzt, daß unser Bind-to-Tuple beschneidet">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
also vermutlich war mir das damals so völlig klar, daß ich es einfach gemacht habe, ohne einen Kommentar zu hinterlassen; es war ja auch eine Spezialanfertigung für diesen einen Fall, und explizit für 1..9 Parameter so ausgeklopft
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node CREATED="1749136018329" ID="ID_286675786" MODIFIED="1749136040691" TEXT="deshalb konnte man zulassen, daß im out-of-bounds-Fall einfach eine zu lange Liste entsteht"/>
|
||||
<node CREATED="1749136045930" ID="ID_1875577568" MODIFIED="1749136073330" TEXT="liegt lediglich daran, daß dann eben schon der Front-Teil die gesamte Original-Liste enthält"/>
|
||||
<node CREATED="1749136081259" ID="ID_520285904" MODIFIED="1749136096661" TEXT="und der Code dann blindlings noch das Value-Tupel dranhängt"/>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1749136099720" ID="ID_505387580" MODIFIED="1749136694912" TEXT="Abhilfe">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1749136114759" ID="ID_681718012" MODIFIED="1749136133620" TEXT="BindToArgument::PreparedArgs nicht nur per Append zusammenhängen"/>
|
||||
<node CREATED="1749136134368" ID="ID_1812769735" MODIFIED="1749136975445" TEXT="sondern sofort auch gleich auf das Präfix der richtigen Länge stutzen">
|
||||
<linktarget COLOR="#dafdce" DESTINATION="ID_1812769735" ENDARROW="Default" ENDINCLINATION="-413;16;" ID="Arrow_ID_161658453" SOURCE="ID_1705757881" STARTARROW="None" STARTINCLINATION="393;-10;"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1749136149348" ID="ID_727667602" MODIFIED="1749136697664" TEXT="kann dafür Splice verwenden">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1749136164904" ID="ID_765120873" MODIFIED="1749136714537" TEXT="mit einem Nil-Overlay">
|
||||
<icon BUILTIN="info"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1749136171879" ID="ID_219649908" MODIFIED="1749136707713" TEXT="definiere dafür eine Abkürzung">
|
||||
<icon BUILTIN="yes"/>
|
||||
<node CREATED="1749136188701" ID="ID_1987132867" MODIFIED="1749136199343" TEXT="Prefix<LI, p>"/>
|
||||
<node CREATED="1749136200140" ID="ID_178861800" MODIFIED="1749136205897" TEXT="Suffix<LI, p>"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1749136902974" ID="ID_1705757881" MODIFIED="1749136983225" TEXT="Fazit: indem man explizit das Binder-Tupel auf Länge der Funktions-Argumentliste kappt">
|
||||
<arrowlink COLOR="#dafdce" DESTINATION="ID_1812769735" ENDARROW="Default" ENDINCLINATION="-413;16;" ID="Arrow_ID_161658453" STARTARROW="None" STARTINCLINATION="393;-10;"/>
|
||||
<icon BUILTIN="back"/>
|
||||
<node BACKGROUND_COLOR="#e3dbae" COLOR="#3a700e" CREATED="1749136997746" HGAP="28" ID="ID_750676907" MODIFIED="1749137070625" STYLE="fork" TEXT="(was die handgeschriebene Apply<ARG_CNT>::bind implzit auch getan hat)" VSHIFT="19">
|
||||
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
|
||||
<font NAME="SansSerif" SIZE="8"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
|
|
@ -164594,6 +164743,35 @@ Since then others have made contributions, see the log for the history.</font></
|
|||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#cd016f" CREATED="1748993653112" ID="ID_1058696109" MODIFIED="1748993677622" TEXT="Stackoverflow in Eclipse">
|
||||
<font NAME="SansSerif" SIZE="10"/>
|
||||
<icon BUILTIN="smiley-angry"/>
|
||||
<node CREATED="1749132089784" ID="ID_939851572" MODIFIED="1749132196714">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
<u>Trigger</u>...
|
||||
</p>
|
||||
<p>
|
||||
jeder vollständige Aufruf von
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" color="#b70606">func::bindFirst(f, val) </font>
|
||||
</p>
|
||||
<p>
|
||||
<font size="1">— oder —</font>
|
||||
</p>
|
||||
<p>
|
||||
<font face="Monospaced" color="#b70606">func::bindLast(f, val) </font>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1748829512571" ID="ID_1542151497" MODIFIED="1749007468620" TEXT="GeneratorCombinations_test"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue