node insertions
|
#define CTTL_TRACE_EVERYTHING
#include "cttl/cttl.h"
#include "lambda/lambda.h"
#include "utils/itos.h"
using namespace cttl;
int main(int argc, char* argv[])
{
input<> inp;
lambda< std::string >::scalar_reference sinp( &inp.text() );
lambda< node<> >::scalar snode( new_node( inp ) );
lambda< node<> >::scalar snode2( new_node( inp ) );
(
CTTL_LAMBDA_ASSERT( size_t( 0 ) == alias::offset( snode ) ),
snode -= scalar( std::string( "1" ) ),
// positions of nodes at insertion point remain unchanged:
CTTL_LAMBDA_ASSERT( sinp == scalar( std::string( "1" ) ) ),
CTTL_LAMBDA_ASSERT( size_t( 0 ) == alias::offset( snode ) ),
CTTL_LAMBDA_ASSERT( size_t( 0 ) == alias::offset( snode2 ) ),
snode += scalar( std::string( "2" ) ),
// positions of all nodes adjusted:
CTTL_LAMBDA_ASSERT( sinp == scalar( std::string( "21" ) ) ),
CTTL_LAMBDA_ASSERT( size_t( 1 ) == alias::offset( snode ) ),
CTTL_LAMBDA_ASSERT( size_t( 1 ) == alias::offset( snode2 ) ),
snode -= scalar( std::string( "3" ) ),
CTTL_LAMBDA_ASSERT( sinp == scalar( std::string( "231" ) ) ),
CTTL_LAMBDA_ASSERT( size_t( 1 ) == alias::offset( snode ) ),
CTTL_LAMBDA_ASSERT( size_t( 1 ) == alias::offset( snode2 ) ),
snode += scalar( std::string( "4" ) ),
CTTL_LAMBDA_ASSERT( sinp == scalar( std::string( "2431" ) ) ),
CTTL_LAMBDA_ASSERT( size_t( 2 ) == alias::offset( snode ) ),
CTTL_LAMBDA_ASSERT( size_t( 2 ) == alias::offset( snode2 ) ),
(sinp^itos) = alias::offset( snode2 ), // translate node offset
CTTL_LAMBDA_ASSERT( sinp == scalar( std::string( "2" ) ) ),
snode = size_t( 0 ), // set node offset
snode2 = size_t( 1 ),
CTTL_LAMBDA_ASSERT( snode <= snode2 ), // comapare node offsets
// edge may be used anywhere in place of std::string:
snode += scalar( const_edge<>( snode.top(), snode2.top() ) ),
CTTL_LAMBDA_ASSERT( sinp == scalar( std::string( "22" ) ) )
).evaluate();
assert( inp.text() == "22" );
return 0;
}
|