Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

stl container access


SourceForge.net Logo     CTTL on    
    SourceForge    
    Download    
    Latest    
    Documentation    
    Index    
    Library    
    News    
    CVS    
    Repository    
   Other    
   Links    

STL container access

#define CTTL_TRACE_RULES // automatically turns lambda tracing on

#include "cttl/cttl.h"
#include "lambda/lambda.h"

using namespace cttl;

int main(int argc, char* argv[])
{
    lambda< int >::scalar var( 3 );
    lambda< std::vector< int > >::scalar vect;
    
    (
        alias::push_back( &vect, 7 )
        ,
        var = alias::size( vect )
    ).evaluate();

    assert( var.top() == 1 );
    assert( vect.top()[ 0 ] == 7 );

    std::stack< std::string > str_stack;
    input<> inp( "hello, stack!" );
    edge<> universe = new_edge( inp );
    (
        scalar( &str_stack ) = scalar( std::string( "one" ) )
        ,
        scalar( &str_stack ) = scalar( &universe )
    ).evaluate();

    assert( str_stack.size() == 2 );

    return 0;
}

inode_writer data access

//#define CTTL_TRACE_RULES // turn lambda tracing on

#include "cttl/cttl.h"
#include "lambda/lambda.h"
#include "utils/inode.h"

using namespace cttl;

int main(int argc, char* argv[])
{
    std::vector< int > vec( 1, 0 ); // one elem with zero value
    lambda< inode_writer<> >::scalar iwriter = inode_writer<>( vec );
    // vec:{ 0| }
    (
        // set position at end of container, insert composite values
        iwriter << ( const_scalar( 1 )^const_scalar( 2 )^const_scalar( 3 ) )
        ,  // vec:{ 0,|1, 2, 3 }
        // writing does not modify inode position
        CTTL_LAMBDA_ASSERT( alias::offset( iwriter ) == alias::size( scalar( &vec ) ) - 3 )
        ,
        // replace values at current position
        iwriter <<= ( const_scalar( 4 )^const_scalar( 5 )^const_scalar( 6 ) )
        ,  // vec:{ 0,|4, 5, 6 }
        // insert two elements at the end:
        iwriter << scalar( 2 )
        ,  // vec:{ 0, 4, 5, 6,|0, 0 }
        // read data field value:
        CTTL_LAMBDA_ASSERT( iwriter[ 0 ] == 0 )
        ,
        CTTL_LAMBDA_ASSERT( iwriter[ 1 ] == 0 )
        ,
        // set data field value:
        iwriter[ 1 ] = 7
        ,  // vec:{ 0, 4, 5, 6,|0, 7 }
        // explicitly set new inode position:
        iwriter = iwriter[ 0 ]
        ,  // vec:{ |0, 4, 5, 6, 0, 7 }
        // verify inode position is zero:
        CTTL_LAMBDA_ASSERT( !iwriter )
        ,
        // verify inode position at the beginning:
        CTTL_LAMBDA_ASSERT( iwriter == alias::begin( iwriter ) )
        ,
        // STL iterator access to first data field, like iwriter[ 0 ] = value:
        *iwriter = alias::size( scalar( &vec ) )
        ,  // vec:{ |6, 4, 5, 6, 0, 7 }
        // prefix and postfix offset increment:
        (++iwriter)++
        ,  // vec:{ 6, 4,|5, 6, 0, 7 }
        CTTL_LAMBDA_ASSERT( alias::offset( iwriter ) == size_t( 2 ) )
        ,
        // set inode position at the end:
        iwriter = alias::size( scalar( &vec ) )
        ,  // vec:{ 6, 4, 5, 6, 0, 7| }
        CTTL_LAMBDA_ASSERT( alias::offset( iwriter ) == alias::size( scalar( &vec ) ) )
        ,
        // compare offsets
        CTTL_LAMBDA_ASSERT( iwriter == alias::size( scalar( &vec ) ) )
        ,
        // verify inode position is not zero:
        CTTL_LAMBDA_ASSERT( !!iwriter )
        ,
        // verify inode position is at the end:
        CTTL_LAMBDA_ASSERT( iwriter == alias::end( iwriter ) )

    ).evaluate();

    std::copy(
        vec.begin(),
        vec.end(),
        std::ostream_iterator< int >( std::cout, " " )
        );

    return 0;
}
/*
Program output:
6 4 5 6 0 7
*/



Copyright © 1997-2006 Igor Kholodov mailto:cttl@users.sourceforge.net.

Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.


Generated on Thu Nov 2 17:48:53 2006 for CTTL Lambda Expression by  doxygen 1.3.9.1