////////////////////////////////////////////////////////////////////////////
//                                                                        //
//       Copyright (C) 2015 ANSYS Inc.  All Rights Reserved               //
//                                                                        //
// This file contains proprietary software licensed from ANSYS Inc.       //
// This header must remain in any source code despite modifications or    //
// enhancements by any party.                                             //
//                                                                        //
////////////////////////////////////////////////////////////////////////////

// The following ifdef block is the standard way of creating macros which make exporting 
// from a DLL simpler. All files within this DLL are compiled with the RESULTS_API_EXPORTS
// symbol defined on the command line. this symbol should not be defined on any project
// that uses this DLL. This way any other project whose source files include this file see 
// RESULTS_API_API functions as being imported from a DLL, whereas this DLL sees symbols
// defined with this macro as being exported.
#ifdef RESULTS_API_EXPORTS
#define RESULTS_API_API extern "C" __declspec(dllexport)
#else
#define RESULTS_API_API extern "C" __declspec(dllimport)
#endif

RESULTS_API_API bool set_Startup();
RESULTS_API_API bool set_ResultsFilename(char *filename);
RESULTS_API_API bool set_BaseFilename(int *iScan, char *filename, char *directory);
RESULTS_API_API bool get_NumElements(int *numElements);
RESULTS_API_API bool get_NumNodes(int *numNodes);
RESULTS_API_API bool get_NumUnstructuredElements(int *numElements);
RESULTS_API_API bool get_NumUnstructuredNodes(int *uNodes);
RESULTS_API_API bool get_NumStructuredElements(int *numElements);
RESULTS_API_API bool get_NumStructuredNodes(int *piNodes, int *pjNodes, int *pkNodes);
RESULTS_API_API bool get_NumStructuredParts(int *numParts);
RESULTS_API_API bool get_NumUnstructuredParts(int *numParts);
RESULTS_API_API bool get_NumVariables(int *numVarTypes, int *numVars);
RESULTS_API_API bool get_VariableInfo(int *pnVariableIdArray, char **pcVariableName, int *pnUnVariableIdArray, int *pnVariableType);
RESULTS_API_API bool get_IntNodeValues(int *nVariableId, int *nInstance, int *pnArray);
RESULTS_API_API bool get_FloatNodeValues(int *nVariableId, int *nInstance, float *pnArray);
RESULTS_API_API bool get_IntElemValues(int *nVariableId, int *nInstance, int *pnArray);
RESULTS_API_API bool get_LayerIntElemValues(int *nVariableId, int *nInstance, int *pnArray);
RESULTS_API_API bool get_FloatElemValues(int *nVariableId, int *nInstance, float *pnArray);
RESULTS_API_API bool get_MaterialFractions(int *nMat, float *pnArray);
RESULTS_API_API bool get_RigidBodyData(int *iWBelemID, float *pRigidBodyData);
RESULTS_API_API bool get_JointData(int *iWBelemID, int *ATDResultType, float *pJointData);
RESULTS_API_API bool get_NodeDisplacements(float *pNodeDisplacements);
RESULTS_API_API bool get_ElementMaterial(int *pnArray);
RESULTS_API_API bool get_ElementErosion(int *pnArray);
RESULTS_API_API bool get_ElementStatus(int *pnArray);
RESULTS_API_API bool get_NumMaterialInElement(int *pnArray);
RESULTS_API_API bool get_NodeErosion(int *pnArray);

RESULTS_API_API bool get_ElementType(int *pnArray);
RESULTS_API_API bool get_WBnumElementTypes(int *numTypes);
RESULTS_API_API bool get_WBElementType(int *nTyp, int *elType);
RESULTS_API_API bool get_WBElement(int *nel, int *nTyp, int *pnArray);
RESULTS_API_API bool get_WBElementNumNodes(int *nel, int *nnodes);
RESULTS_API_API bool resultsCleanUp(int *iErr);

RESULTS_API_API bool get_NodeCoordinates(float *pnNodeCoordinates);
RESULTS_API_API bool get_UnstructuredElementConnectivity(int *pnUnsElementConn);
RESULTS_API_API bool get_PartInfo(int *partNum, int *numElemInPart, int *numNodeInPart, char *pcPartName);
RESULTS_API_API bool get_ElementPartConnectivity(int *partNum, int *pnElementPartConn);
RESULTS_API_API bool get_NodePartConnectivity(int *partNum, int *pnNodePartConn);
RESULTS_API_API bool get_NumMaterials(int *numMaterials);
RESULTS_API_API bool get_MaterialName(int *nMaterial, char *pcMaterialName);
RESULTS_API_API bool get_SetData(int *pnCycle, float *pfTime);
RESULTS_API_API bool get_NumSteps(int *numSets);
RESULTS_API_API bool set_newStep(int *nStep);
RESULTS_API_API bool getUnitSystem(int *length, int *mass, int *time);
RESULTS_API_API bool getModelSymmetry(int *ntcode, int *isym2d);

RESULTS_API_API bool getAutodynElementNumber(int *iWBelemID, int *iADelem);
RESULTS_API_API bool getAutodynNodeNumber(int *iWBNodeID, int *iADnode);

RESULTS_API_API bool hasParallelTaskInfo();
RESULTS_API_API bool getParallelTaskInfoSize(int *nSize);
RESULTS_API_API bool getParallelTaskInformation(int *nInfo);
RESULTS_API_API bool getADMaterialforEulerMatFracID(int *iMFID, int *iMat);
RESULTS_API_API bool getEulerMatFracIDforADMaterial(int *iMat, int *iMFID);
RESULTS_API_API bool getEulerMatFracBodyName(int *iMat, char *pcMaterialBodyName);
RESULTS_API_API bool getMaterialPoissonRatio(int *iMat, float *fPRatio);
RESULTS_API_API bool getPyramidTetPairId(int *id1, int *id2);
RESULTS_API_API bool getInputResultSwitches(int *iPrtSwtch, int *iMatSwtch);
RESULTS_API_API bool getResultsFileVersion(int *iVer);
RESULTS_API_API bool get_isResultAvailable(int *nVariableId, int *nInstance, int *nType, int *isLayer);
RESULTS_API_API bool setDataExtractionMode(int *iMode);
