blob: 07a60629d3d94caff781903978282da4f17a230c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2016 CEA LIST.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Created on: 9 juil. 2009
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#ifndef EXPRESSIONFACTORY_H_
#define EXPRESSIONFACTORY_H_
#include <common/BF.h>
#include <collection/BFContainer.h>
#include <collection/Typedef.h>
#include <fml/executable/BaseInstanceForm.h>
#include <fml/executable/InstanceOfData.h>
#include <fml/expression/AvmCode.h>
namespace sep
{
class ExpressionFactory
{
public:
/**
* LOADER - DISPOSER
*/
static void load();
static void dispose();
/**
* CONFIGURE
*/
static bool configure();
/**
* NUMERIC or SIMPLE TYPE TEST & CAST
*/
static bool isBoolean(const BF & value);
static bool toBoolean(const BF & value);
/**
* COMPARISON
* with TRUE & FALSE
*/
static bool isEqualFalse(const BF & value);
static bool isNotEqualFalse(const BF & value);
static bool isEqualTrue(const BF & value);
static bool isNotEqualTrue(const BF & value);
static bool isNumber(const BF & value);
inline static bool isNumeric(const BF & value)
{
return( isNumber(value) );
}
static bool isInt32(const BF & value);
static avm_int32_t toInt32(const BF & value);
static bool isInt64(const BF & value);
static avm_int64_t toInt64(const BF & value);
static bool isInteger(const BF & value);
static avm_integer_t toInteger(const BF & value);
static bool isPosInteger(const BF & value);
static bool isUInteger(const BF & value);
static avm_uinteger_t toUInteger(const BF & value);
static bool isRational(const BF & value);
static avm_integer_t toDenominator(const BF & value);
static avm_integer_t toNumerator(const BF & value);
static bool isFloat(const BF & value);
static avm_float_t toFloat(const BF & value);
static bool isReal(const BF & value);
static avm_real_t toReal(const BF & value);
static bool isCharacter(const BF & value);
static char toCharacter(const BF & value);
static bool isIdentifier(const BF & value);
static std::string toIdentifier(const BF & value);
static bool isUfi(const BF & value);
static std::string toUfi(const BF & value);
static bool isUfid(const BF & value);
static std::string toUfid(const BF & value);
static bool isEnumSymbol(const BF & value);
static std::string strEnumSymbol(const BF & value);
static bool isBuiltinString(const BF & value);
static std::string toBuiltinString(const BF & value);
static bool isBuiltinValue(const BF & value);
static bool isConstValue(const BF & value);
/**
* COLLECT VARIABLE OR CLAUSE
*/
static void collectVariable(const BF & anExpr, BFCollection & listOfVar);
static void collectVariable(const BFCode & aCode, BFCollection & listOfVar);
inline static void collectVariable(const BF & anExpr,
VectorOfBaseInstanceForm & listOfElement)
{
BFVector listOfVar;
collectVariable(anExpr, listOfVar);
BFVector::raw_iterator< InstanceOfData > itVar = listOfVar.begin();
BFVector::raw_iterator< InstanceOfData > endVar = listOfVar.end();
for( ; itVar != endVar ; ++itVar )
{
listOfElement.append( itVar );
}
}
static void collectsFreeVariable(const BF & anExpr,
BFCollection & listOfBoundVar, BFCollection & listOfVar);
static void collectsFreeVariable(const BFCode & aCode,
BFCollection & listOfBoundVar, BFCollection & listOfVar);
static bool containsVariable(const BF & anExpr, InstanceOfData * aVariable);
static bool containsVariable(const BFCode & aCode, InstanceOfData * aVariable);
static bool containsVariable(const BF & anExpr, BFCollection & listOfVar);
static bool containsVariable(const BFCode & aCode, BFCollection & listOfVar);
static void collectsClause(const BF & anExpr, BFCollection & listOfClause);
static void collectsClause(const BFCode & aCode, BFCollection & listOfClause);
static void collectsClause(const BF & anExpr, BFCollection & listOfBoundVar,
BFCollection & listOfBoundClause, BFCollection & listOfFreeClause);
static void collectsClause(const BFCode & aCode, BFCollection & listOfBoundVar,
BFCollection & listOfBoundClause, BFCollection & listOfFreeClause);
static void deduceTrivialAssignmentsFromConjonction(
const BF & anExpr, BFCodeCollection & listOfAssignments);
};
}
#endif /* EXPRESSIONFACTORY_H_ */