Subversion Repositories DevTools

Rev

Rev 2218 | Blame | Compare with Previous | Last modification | View Log | RSS feed

//## begin module%1.7%.codegen_version preserve=yes
//   Read the documentation to learn more about C++ code generator
//   versioning.
//## end module%1.7%.codegen_version

//## begin module%4209C5FB02C3.cm preserve=no
//## end module%4209C5FB02C3.cm

//## begin module%4209C5FB02C3.cp preserve=no
//      C O P Y R I G H T   N O T I C E
//      This material is confidential to ERG and may not be disclosed in whole
//      or in part to any third party nor used in any manner whatsoever other
//      than for the purposes expressly consented to by ERG in writing.
//
//      This material is also copyright and may not be reproduced, stored in a
//      retrieval system or transmitted in any form or by any means in whole or
//      in part without the express written consent of ERG.
//## end module%4209C5FB02C3.cp

//## Module: DefinedVariableTable%4209C5FB02C3; Pseudo Package body
//## Subsystem: MASS::Dev::Tools::TxnTestManager::src%41F5A79001E4
//## Source file: Z:\MASS_Dev\Tools\TxnTestManager\src\DefinedVariableTable.cpp

//## begin module%4209C5FB02C3.additionalIncludes preserve=no
//## end module%4209C5FB02C3.additionalIncludes

//## begin module%4209C5FB02C3.includes preserve=yes
#pragma warn -com
#include <LoggingMacros.h>
#pragma warn +com
//## end module%4209C5FB02C3.includes

// TestScenario
#include "TestScenario.h"
// TransactionSpecification
#include "TransactionSpecification.h"
// EvaluationContext
#include "EvaluationContext.h"
// DefinedVariable
#include "DefinedVariable.h"
// DefinedVariableTable
#include "DefinedVariableTable.h"
//## begin module%4209C5FB02C3.additionalDeclarations preserve=yes
//## end module%4209C5FB02C3.additionalDeclarations


// Class DefinedVariableTable 

DefinedVariableTable::DefinedVariableTable()
  //## begin DefinedVariableTable::DefinedVariableTable%4209C5FB02C3_const.initialization preserve=yes
  //## end DefinedVariableTable::DefinedVariableTable%4209C5FB02C3_const.initialization
{
  //## begin DefinedVariableTable::DefinedVariableTable%4209C5FB02C3_const.body preserve=yes
  //## end DefinedVariableTable::DefinedVariableTable%4209C5FB02C3_const.body
}


DefinedVariableTable::~DefinedVariableTable()
{
  //## begin DefinedVariableTable::~DefinedVariableTable%4209C5FB02C3_dest.body preserve=yes

        clear();  

  //## end DefinedVariableTable::~DefinedVariableTable%4209C5FB02C3_dest.body
}



//## Other Operations (implementation)
//## Operation: clear%4209C916032F
void DefinedVariableTable::clear ()
{
  //## begin DefinedVariableTable::clear%4209C916032F.body preserve=yes

        for ( std::map< std::string, DefinedVariable * >::iterator
                        where = m_variable.begin();
                  where != m_variable.end();
                  ++where )
        {
                delete where->second;
                where->second = 0;
        }

  //## end DefinedVariableTable::clear%4209C916032F.body
}

//## Operation: defineVariable%425B4483019F
DefinedVariable& DefinedVariableTable::defineVariable (const std::string &variableName)
{
  //## begin DefinedVariableTable::defineVariable%425B4483019F.body preserve=yes

        std::map< std::string, DefinedVariable * >::const_iterator
                instance = m_variable.find( variableName );

        if ( instance != m_variable.end() )
        {
                return ( *instance->second );
        }
        else
        {
                DefinedVariable * object = 0;

                try
                {
                        object = new DefinedVariable( variableName );

                        if ( m_variable.insert(
                                        std::map< std::string, DefinedVariable * >::value_type(
                                                variableName,
                                                object ) ).second )
                        {
                                return ( *object );
                        }
                        else
                        {
                                MTHROW( std::runtime_error, \
                                        "Cannot add variable \"" \
                                        << variableName \
                                        << "\" to defined variable table." );
                        }
                }
                catch ( ... )
                {
                        delete object;
                        object = 0;

                        throw;
                }
        }

  //## end DefinedVariableTable::defineVariable%425B4483019F.body
}

//## Operation: defineVariable%425B461402A1
DefinedVariable& DefinedVariableTable::defineVariable (const std::string &variableName, TestScenario &testScenario)
{
  //## begin DefinedVariableTable::defineVariable%425B461402A1.body preserve=yes

        const int testScenarioNumber = testScenario.getScenarioNumber();
        std::map< int, TestScenario * >::const_iterator
                instance = m_scenario.find( testScenarioNumber );

        if ( instance != m_scenario.end() )
        {
                return ( testScenario.defineVariable( variableName ) );
        }
        else
        {
                if ( m_scenario.insert(
                                std::map< int, TestScenario * >::value_type(
                                        testScenarioNumber,
                                        &testScenario ) ).second )
                {
                        return ( testScenario.defineVariable( variableName ) );
                }
                else
                {
                        MTHROW( std::runtime_error, \
                                "Cannot add test scenario \"" \
                                << testScenarioNumber \
                                << "\" to defined variable table." );
                }
        }

  //## end DefinedVariableTable::defineVariable%425B461402A1.body
}

//## Operation: getVariable%4209C7770264
DefinedVariable& DefinedVariableTable::getVariable (const std::string &variableName, EvaluationContext& context)
{
  //## begin DefinedVariableTable::getVariable%4209C7770264.body preserve=yes

        std::map< int, TestScenario * >::const_iterator
                scenario = m_scenario.find(
                        context.getTransaction().getScenario().getScenarioNumber() );

        if ( scenario != m_scenario.end() &&
                 scenario->second->isVariable( variableName ) )
        {
                return ( scenario->second->getVariable( variableName ) );
        }

        std::map< std::string, DefinedVariable * >::const_iterator
                instance = m_variable.find( variableName );

        if ( instance != m_variable.end() )
        {
                return ( *instance->second );
        }
        
        MTHROW( std::runtime_error, \
                "Variable \"" \
                << variableName \
                << "\" is not defined." );

  //## end DefinedVariableTable::getVariable%4209C7770264.body
}

//## Operation: isVariable%420ACFBB01CE
const bool DefinedVariableTable::isVariable (const std::string &symbol, EvaluationContext& context) const
{
  //## begin DefinedVariableTable::isVariable%420ACFBB01CE.body preserve=yes

        std::map< int, TestScenario * >::const_iterator
                instance = m_scenario.find(
                        context.getTransaction().getScenario().getScenarioNumber() );

        if ( instance != m_scenario.end() &&
                 instance->second->isVariable( symbol ) )
        {
                return ( true );
        }

        return ( m_variable.find( symbol ) != m_variable.end() );

  //## end DefinedVariableTable::isVariable%420ACFBB01CE.body
}

// Additional Declarations
  //## begin DefinedVariableTable%4209C5FB02C3.declarations preserve=yes
  //## end DefinedVariableTable%4209C5FB02C3.declarations

//## begin module%4209C5FB02C3.epilog preserve=yes
//## end module%4209C5FB02C3.epilog