blob: 5ffe39f93de034b7ae5e079adb5ce89900e9a351 [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: 2 avr. 2012
*
* Contributors:
* Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
* - Initial API and implementation
******************************************************************************/
#ifndef AVMLANG_H_
#define AVMLANG_H_
#include <string>
#include <util/avm_numeric.h>
#include <common/BF.h>
namespace sep
{
////////////////////////////////////////////////////////////////////////////////
// GENERIC XLIA SYNTAX
////////////////////////////////////////////////////////////////////////////////
class XLIA_SYNTAX
{
public:
////////////////////////////////////////////////////////////////////////////
// LOADER / DISPOSER API
////////////////////////////////////////////////////////////////////////////
static void load();
static void dispose();
public:
static BF ID_ALL;
};
////////////////////////////////////////////////////////////////////////////////
// EXPRESSION IMPLEMENTATION KIND
////////////////////////////////////////////////////////////////////////////////
class EXPRESSION
{
public:
enum IMPLEMENTATION_KIND
{
NATIVE_IMPL,
GINAC_IMPL,
CVC4_IMPL,
UNDEFINED_IMPL
};
};
////////////////////////////////////////////////////////////////////////////////
// VARIABLE DATA
////////////////////////////////////////////////////////////////////////////////
class IPointerDataNature
{
public:
enum POINTER_DATA_NATURE
{
POINTER_STANDARD_NATURE,
POINTER_UFI_OFFSET_NATURE,
POINTER_UFI_MIXED_NATURE,
POINTER_UFI_RUNTIME_NATURE,
POINTER_ENUM_SYMBOL_NATURE,
POINTER_FIELD_ARRAY_INDEX_NATURE,
POINTER_FIELD_ARRAY_OFFSET_NATURE,
POINTER_FIELD_CLASS_ATTRIBUTE_NATURE,
POINTER_FIELD_CHOICE_ATTRIBUTE_NATURE,
POINTER_FIELD_UNION_ATTRIBUTE_NATURE,
POINTER_UNDEFINED_NATURE
};
/**
* DESTRUCTOR
*/
virtual ~IPointerDataNature()
{
//!! NOTHING
}
/**
* STATIC
*/
static std::string strPointerDataNature(POINTER_DATA_NATURE aNature);
static std::string strPointer(const POINTER_DATA_NATURE aNature);
/**
* API
*/
virtual POINTER_DATA_NATURE getPointerNature() const = 0;
inline bool hasArrayIndexPointer() const
{
return( (getPointerNature() == POINTER_FIELD_ARRAY_INDEX_NATURE) ||
(getPointerNature() == POINTER_UFI_MIXED_NATURE) );
}
inline bool isFieldArrayIndexPointer() const
{
return( getPointerNature() == POINTER_FIELD_ARRAY_INDEX_NATURE );
}
inline bool isFieldArrayOffsetPointer() const
{
return( getPointerNature() == POINTER_FIELD_ARRAY_OFFSET_NATURE );
}
inline bool isFieldClassAttributePointer() const
{
return( getPointerNature() == POINTER_FIELD_CLASS_ATTRIBUTE_NATURE );
}
inline bool isFieldChoiceAttributePointer() const
{
return( getPointerNature() == POINTER_FIELD_CHOICE_ATTRIBUTE_NATURE );
}
inline bool isFieldUnionAttributePointer() const
{
return( getPointerNature() == POINTER_FIELD_UNION_ATTRIBUTE_NATURE );
}
inline bool isEnumSymbolPointer() const
{
return( getPointerNature() == POINTER_ENUM_SYMBOL_NATURE );
}
inline bool isUfiOffsetPointer() const
{
return( getPointerNature() == POINTER_UFI_OFFSET_NATURE );
}
inline bool isUfiMixedPointer() const
{
return( getPointerNature() == POINTER_UFI_MIXED_NATURE );
}
inline bool isUfiRuntimePointer() const
{
return( getPointerNature() == POINTER_UFI_RUNTIME_NATURE );
}
inline bool isStandardPointer() const
{
return( getPointerNature() == POINTER_STANDARD_NATURE );
}
};
} /* namespace sep */
#endif /* AVMLANG_H_ */