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

scalar primitives


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

scalar primitives

stand-alone C++ -like variables
cttl::lambda< int >::scalar Variable;
cttl::lambda< std::vector< int > >::scalar Vector;
cttl::lambda< size_t >::stack Stack;
                        

macro const_scalar_type(T)

where T is either int, or type, convertible to integer, such as enumerated type. Stand-alone C++ -like constants
enum { zero, one, two };
const_scalar_type( zero ) ZERO;
const_scalar_type( one )  ONE;
const_scalar_type( two )  TWO;
const_scalar_type( 3 )    THREE;
const_scalar_type( -5 )   MINUS_FIVE;
                        

overloaded scalar helper functions

in-line C++ -like variables
// Same as x = myvector.size()
scalar( &x ) = alias::size( scalar( &myvector ) )
                        

helper macro const_scalar(T)

where T is either an integer constant, or a type, convertible to integer constant, such as enumerated constant. In-line C++ -like constants
#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 >::stack Stack;    // instantiate std::stack< int >
    (
        Stack = const_scalar( 2 )^const_scalar( 3 ),
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 2 ) ),
        CTTL_LAMBDA_ASSERT( *Stack == 3 ),
        Stack--,
        CTTL_LAMBDA_ASSERT( +Stack == size_t( 1 ) ),
        CTTL_LAMBDA_ASSERT( *Stack == 2 )
    ).evaluate();

    return 0;
}

alias::push_back, alias::size

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

using namespace cttl;

int main(int argc, char* argv[])
{
    // create scalar lambda containing an integer:
    lambda< int >::scalar var;

    // create reference scalar for vector:
    std::vector< int > vect;
    lambda< std::vector< int > >::scalar_reference refvect( &vect );

    (
        alias::push_back( &refvect, 7 ) // vect.push_back( 7 )
        ,
        var = alias::size( refvect )    // var = vect.size()
    ).evaluate();

    assert( vect.back() == 7 );

    return 0;
}

C++ interface of scalar primitive

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

using namespace cttl;

int main(int argc, char* argv[])
{
    // C++ interface of scalar primitive
    lambda< int >::scalar Variable( 4 ); // instantiate integer scalar
    assert( Variable.top() == 4 );       // read access to top element
    Variable.push( 3 );                  // push new value
    assert( Variable.top() == 3 );       // verify result
    Variable.top() = 2;                  // write access to top element
    assert( Variable.top() == 2 );       // verify result
    Variable.pop();                      // does nothing unless Variable is a stack
    assert( Variable.size() == 1 );      // non-stack scalar has constant size

    return 0;
}

reference scalar

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

using namespace cttl;

int main(int argc, char* argv[])
{
    int var = 0;

    // refvar stores reference to var:
    lambda< int >::scalar_reference refvar( &var );

    // svar makes copy of var:
    lambda< int >::scalar svar( var );

    (
        refvar = 6,
        svar = 5
    ).evaluate();

    assert( var == 6 );
    assert( svar.top() == 5 );

    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