/**********************************************************
 *                                                        *
 *                   Magnet                               *
 *                                                        *
 * Author : Ubi China - Marc Trabucato                    *
 *                                                        *
 **********************************************************/
 
#if !defined( _MGTMO_H_ )
#define _MGTMO_H_
 
/*************************************************************************************************/
#include "cpa_expt.h"
 
#include "MGT\MGTStruc.h"
 
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
 
/*************************************************************************************************/
#define MGT_M_BYTESFORBITS( lNumberOfBits )		( (lNumberOfBits>>3) + ( (lNumberOfBits&0x7) ? 1 : 0 ) )
#define	MGT_C_xIndexError						((ACP_tdxIndex)-1)
 
#define MGT_M_pvMalloc(Var,cast,Size)			Var = (cast) TMP_M_p_Malloc(Size)
#define MGT_M_Free(Var)							TMP_M_Free(Var)
 
/*************************************************************************************************/
ACP_tdxIndex                  MGT_fn_xCreateModifiedObject                        ( GEO_tdstGeometricObject *p_stObject );
ACP_tdxIndex                  MGT_fn_xFindModifiedObject                          ( GEO_tdstGeometricObject *p_stObject );
 
void                          MGT_fn_vAddMagnetModificationToModifiedObject       ( MGT_tdxHandleToMagnetModification h_MagnetModif );
void                          MGT_fn_vClearAlreadyInfluencedPointsOfModifiedObject( MGT_tdxHandleToModifiedObject h_ModifiedObject );
void                          MGT_fn_vDeleteMagnetModificationToModifiedObject    ( MGT_tdxHandleToMagnetModification h_MagnetModif );
void                          MGT_fn_vDeleteModifiedObject                        ( ACP_tdxIndex x_ModifiedObject );
void						  MGT_fn_hDeleteIfExistsMagnetModification			  ( ACP_tdxIndex x_ModifiedObject, ACP_tdxIndex x_Magnet );
void                          MGT_fn_vDeleteModifiedObjectIfNeeded                ( ACP_tdxIndex x_ModifiedObject );
 
/*************************************************************************************************/
extern HIE_tdxHandleToSuperObject      MGT_g_aDEF_hActivatedMagnets[MGT_MAX_NUMBEROF_MAGNETS];  /* handle of activated magnets */
extern ACP_tdxIndex                    MGT_g_xMaxIndexOfActivatedMagnet;
extern MGT_tdxHandleToModifiedObject   MGT_g_aDEF_hModifiedObjects[MGT_MAX_NUMBEROF_MODIFIEDOBJECTS];
extern ACP_tdxIndex                    MGT_g_xMaxIndexOfModifiedObject;
 
/*************************************************************************************************/
 
#ifdef __cplusplus
};
#endif /* __cplusplus */
 
/*************************************************************************************************/
 
#endif /* _MGTMO_H_ */
 
