blob: d73ba8329c0241fd1cc0232cc7fddcaf6bb5761a [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: 15 sept. 2011
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#ifndef BUILDER_COMPILER_SYMBOLPREDICATE_H_
#define BUILDER_COMPILER_SYMBOLPREDICATE_H_
#include <fml/executable/BaseCompiledForm.h>
#include <fml/symbol/Symbol.h>
namespace sep
{
class SymbolPredicate
{
public:
/**
* CONSTRUCTOR / DESTRUCTOR
*/
SymbolPredicate()
{
//!! NOTHING
}
virtual ~SymbolPredicate()
{
//!! NOTHING
}
/**
* OPERATOR API
*/
virtual bool operator() (const BaseCompiledForm * aSymbol) const = 0;
virtual bool operator() (const Symbol & aSymbol) const = 0;
};
class SymbolPredicateByQualifiedNameID : public SymbolPredicate
{
public:
/**
* ATTRIBUTE
*/
std::string mQualifiedNameID;
/**
* CONSTRUCTOR / DESTRUCTOR
*
*/
SymbolPredicateByQualifiedNameID(const std::string & aQualifiedNameID)
: SymbolPredicate( ),
mQualifiedNameID( aQualifiedNameID )
{
//!! NOTHING
}
virtual ~SymbolPredicateByQualifiedNameID()
{
//!! NOTHING
}
/**
* OPERATOR
*/
inline virtual bool operator() (const BaseCompiledForm * aSymbol) const
{
return( aSymbol->fqnEndsWith(mQualifiedNameID) );
}
inline virtual bool operator() (const Symbol & aSymbol) const
{
return( aSymbol.fqnEndsWith(mQualifiedNameID) );
}
};
class SymbolPredicateByNameID : public SymbolPredicateByQualifiedNameID
{
public:
/**
* CONSTRUCTOR
*/
SymbolPredicateByNameID(const std::string & id)
: SymbolPredicateByQualifiedNameID( id )
{
//!! NOTHING
}
/**
* OPERATOR
*/
inline virtual bool operator() (const BaseCompiledForm * aSymbol) const
{
return( aSymbol->getNameID() == mQualifiedNameID );
}
inline virtual bool operator() (const Symbol & aSymbol) const
{
return( aSymbol.getNameID() == mQualifiedNameID );
}
};
class SymbolPredicateByCompiledFQNameID :
public SymbolPredicateByQualifiedNameID
{
public:
/**
* CONSTRUCTOR
*/
SymbolPredicateByCompiledFQNameID(
const std::string & aFullyQualifiedNameID)
: SymbolPredicateByQualifiedNameID( aFullyQualifiedNameID )
{
//!! NOTHING
}
/**
* OPERATOR
*/
inline virtual bool operator() (const BaseCompiledForm * aSymbol) const
{
return( aSymbol->getAstFullyQualifiedNameID() == mQualifiedNameID );
}
inline virtual bool operator() (const Symbol & aSymbol) const
{
return( aSymbol.getAstFullyQualifiedNameID() == mQualifiedNameID );
}
};
class SymbolPredicateByCompiledElement : public SymbolPredicate
{
protected:
/**
* ATTRIBUTE
*/
const ObjectElement * mElement;
public:
SymbolPredicateByCompiledElement(const ObjectElement * anElement)
: SymbolPredicate( ),
mElement(anElement)
{
//!! NOTHING
}
virtual ~SymbolPredicateByCompiledElement()
{
//!! NOTHING
}
/**
* OPERATOR
*/
inline virtual bool operator() (const BaseCompiledForm * aSymbol) const
{
return( aSymbol->isAstElement( mElement ) );
}
inline virtual bool operator() (const Symbol & aSymbol) const
{
return( aSymbol.isAstElement( mElement ) );
}
};
} /* namespace sep */
#endif /* BUILDER_COMPILER_SYMBOLPREDICATE_H_ */