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

std::stack access


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

lambda access to std::stack

#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[])
{
    std::stack< size_t > stack_s;
    lambda< std::stack< size_t > >::scalar_reference stack_sr( &stack_s );

    (
        // empty
        CTTL_LAMBDA_ASSERT( alias::empty( stack_sr ) ),
        // push
        alias::push( &stack_sr, size_t( 5 ) ),
        // top, read
        CTTL_LAMBDA_ASSERT( alias::top( stack_sr ) == size_t( 5 ) ),
        CTTL_LAMBDA_ASSERT( !alias::empty( stack_sr ) ),
        // top, write

        alias::top( &stack_sr ) = scalar( 6 ),
        CTTL_LAMBDA_ASSERT( alias::top( stack_sr ) == size_t( 6 ) )

    ).evaluate();

    return 0;
}

            

lambda stack primitive

#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 Variable; // instantiate integer scalar
    lambda< int >::stack Stack;    // instantiate std::stack< int >
    assert( Stack.size() = = 0 );        // no elements exist so far
    Stack.push( 3 );    // push new element
    //<top>3<bottom>
    assert( Stack.top() == 3 );          // verify result
    Stack.top() = 2;                     // write access to top element 
    //<top>2<bottom>
    assert( Stack.top() == 2 );          // verify result

    // overloaded stack operators              
    (
        Stack = 4,                       // Stack.push( 4 )
        //<top>4,2<bottom>
        Variable = *Stack,               // Variable = Stack.top()
        *Stack = 5,                      // Stack.top() = 5
        //<top>5,2<bottom>
        Variable = Stack--,              // Variable = Stack.size (), Stack.pop()
        //<top>2<bottom>
        CTTL_LAMBDA_ASSERT( Variable == 2 ), // stack size before pop
        Variable = +Stack                // Variable = Stack.size()
        //<top>2<bottom>
        ).evaluate();

    assert( Variable.top() == 1 );
    assert( Stack.size() == 1 );
    assert( Stack.top() == 2 );

    return 0;
}

std::stack inside scalar primitive

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

using namespace cttl;

int main(int argc, char* argv[])
{
    // instantiate integer scalar:
    lambda< int >::scalar Variable;
    // instantiate std::stack< int >:
    lambda< std::stack< int > >::scalar Scalar;

    (
        alias::push( &Scalar, 4 ),
        //<top>4<bottom>
        Variable = alias::top( Scalar ),
        alias::top( &Scalar ) = 5,
        //<top>5<bottom>
        Variable = alias::top( Scalar ),
        alias::pop( &Scalar ),
        //<top><bottom>
        CTTL_LAMBDA_ASSERT( Variable == 5 ),
        Variable = alias::size( Scalar )
        ).evaluate();

    assert( Variable.top() == 0 );

    return 0;
}

stack prefix and postfix decrement operators

#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 Variable;// instantiate integer scalar
    lambda< int >::stack Stack;    // instantiate std::stack< int >
    (
        Stack = const_scalar( 2 )^3^4^5,
        //<top>5,4,3,2<bottom>
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 4 ) ),
        CTTL_LAMBDA_ASSERT( *Stack == 5 ),
        Variable = *Stack--,
        //<top>4,3,2<bottom>
        CTTL_LAMBDA_ASSERT( Variable == 5 ),
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 3 ) ),
        CTTL_LAMBDA_ASSERT( *Stack == 4 ),
        Variable = *--Stack,
        //<top>3,2<bottom>
        CTTL_LAMBDA_ASSERT( Variable == 3 ),
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 2 ) ),
        CTTL_LAMBDA_ASSERT( *Stack == 3 ),
        *--Stack = 7, // pop, then assign new value to top element
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 1 ) ),
        CTTL_LAMBDA_ASSERT( *Stack == 7 ),
        //<top>7<bottom>
        // first, the top of stack gets assigned new
        // value of 6, then it is thrown away by postfix decrement:
        *Stack-- = 6,
        //<top><bottom>
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 0 ) )
    ).evaluate();

    return 0;
}



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:54 2006 for CTTL Lambda Expression by  doxygen 1.3.9.1