DYT/Tool/matlab/include/covrt.h
2024-11-22 23:19:31 +08:00

652 lines
31 KiB
C

/*
* PUBLISHED header for covrt, the runtime library for Code Coverage
*
* Copyright 1984-2021 The MathWorks, Inc.
*
*/
#ifndef covrt_h
#define covrt_h
#if defined(_MSC_VER)
# pragma once
#endif
#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ > 3))
# pragma once
#endif
/*
* Only define EXTERN_C if it hasn't been defined already. This allows
* individual modules to have more control over managing their exports.
*/
#ifndef EXTERN_C
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern
#endif
#endif
#ifndef LIBCOVRT_API
#define LIBCOVRT_API
#endif
#include <setjmp.h>
#include <stdio.h>
#include "matrix.h"
/*
* MATLAB INTERNAL USE ONLY :: Instance specific runtime data.
*/
typedef struct covrtInstanceData covrtInstanceData;
/*
* MATLAB INTERNAL USE ONLY :: Instance type
*/
typedef struct covrtInstance
{
covrtInstanceData* data;
} covrtInstance;
/* one instance per mex */
extern covrtInstance gCoverageLoggingInstance;
typedef struct CovrtStateflowData CovrtStateflowData;
typedef struct CovrtStateflowInstance
{
CovrtStateflowData* data;
double instanceHandle;
bool isCoverageOn;
bool isAccelCreated;
} CovrtStateflowInstance;
typedef int CovrtBlockId;
#define COVRT_INVALID_BLOCK_ID -1
/*
* MATLAB INTERNAL USE ONLY :: Enable/Disable Coverage Logging during mex execution
*/
EXTERN_C LIBCOVRT_API void covrtEnableCoverageLogging(bool enable);
/*
* MATLAB INTERNAL USE ONLY :: Enabled/Disable use of cv.mex
*/
EXTERN_C LIBCOVRT_API void covrtUseCV(bool useCV);
/*
* MATLAB INTERNAL USE ONLY :: reset flag
*/
EXTERN_C LIBCOVRT_API void covrtResetUpdateFlag();
/*
* MATLAB INTERNAL USE ONLY :: Allocate instance data
*/
EXTERN_C LIBCOVRT_API void covrtAllocateInstanceData(covrtInstance* instance);
/*
* MATLAB INTERNAL USE ONLY :: Free instance data
*/
EXTERN_C LIBCOVRT_API void covrtFreeInstanceData(covrtInstance* instance);
/*
* MATLAB INTERNAL USE ONLY :: Free instance data
*/
EXTERN_C LIBCOVRT_API mxArray* covrtSerializeInstanceData(covrtInstance* instance);
/*
* MATLAB INTERNAL USE ONLY :: Coverage engine script initalization callback
*/
EXTERN_C LIBCOVRT_API void covrtScriptStart(covrtInstance* instance,
unsigned int cvId);
/*
* MATLAB INTERNAL USE ONLY :: Initialize Script
*/
EXTERN_C LIBCOVRT_API void covrtScriptInit(covrtInstance* instance,
const char* path,
unsigned int cvId,
unsigned int fcnCnt,
unsigned int basicBlockCnt,
unsigned int ifCnt,
unsigned int testobjectiveCnt,
unsigned int saturationCnt,
unsigned int switchCnt,
unsigned int forCnt,
unsigned int whileCnt,
unsigned int condCnt,
unsigned int mcdcCnt);
/*
* MATLAB INTERNAL USE ONLY :: Initialize Function
*/
EXTERN_C LIBCOVRT_API void covrtFcnInit(covrtInstance* instance,
unsigned int cvId,
unsigned int fcnIdx,
const char *name,
int charStart,
int charExprEnd,
int charEnd);
/*
* MATLAB INTERNAL USE ONLY :: Initialize Basic Block
*/
EXTERN_C LIBCOVRT_API void covrtBasicBlockInit(covrtInstance* instance,
unsigned int cvId,
unsigned int fcnIdx,
int charStart,
int charExprEnd,
int charEnd);
/*
* MATLAB INTERNAL USE ONLY :: Initialize If
*/
EXTERN_C LIBCOVRT_API void covrtIfInit(covrtInstance* instance,
unsigned int cvId,
unsigned int ifIdx,
int charStart,
int charExprEnd,
int charElseStart,
int charEnd);
/*
* MATLAB INTERNAL USE ONLY :: Initialize Mcdc
*/
EXTERN_C LIBCOVRT_API void covrtMcdcInit(covrtInstance* instance,
unsigned int cvId,
unsigned int mcdcIdx,
int charStart,
int charEnd,
int condCnt,
int firstCondIdx,
const int* condStart,
const int* condEnd,
int postFixLength,
const int* postFixExprs);
/*
* MATLAB INTERNAL USE ONLY :: Initialize Switch
*/
EXTERN_C LIBCOVRT_API void covrtSwitchInit(covrtInstance* instance,
unsigned int cvId,
unsigned int switchIdx,
int charStart,
int charExprEnd,
int charEnd,
unsigned int caseCnt,
const int *caseStart,
const int *caseExprEnd);
/*
* MATLAB INTERNAL USE ONLY :: Initialize For
*/
EXTERN_C LIBCOVRT_API void covrtForInit(covrtInstance* instance,
unsigned int cvId,
unsigned int forIdx,
int charStart,
int charExprEnd,
int charEnd);
/*
* MATLAB INTERNAL USE ONLY :: Initialize While
*/
EXTERN_C LIBCOVRT_API void covrtWhileInit(covrtInstance* instance,
unsigned int cvId,
unsigned int whileIdx,
int charStart,
int charExprEnd,
int charEnd);
/*
* MATLAB INTERNAL USE ONLY :: Initialize MCDC
*/
EXTERN_C LIBCOVRT_API void covrtMCDCInit(covrtInstance* instance,
unsigned int cvId,
unsigned int mcdcIdx,
int charStart,
int charEnd,
unsigned int condCnt,
unsigned int firstCondIdx,
const int *condStart,
const int *condEnd,
unsigned int pfxLength,
const int *pfixExpr);
/*
* MATLAB INTERNAL USE ONLY :: Log Function
*/
EXTERN_C LIBCOVRT_API void covrtLogFcn(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId);
/*
* MATLAB INTERNAL USE ONLY :: Log Basic Block
*/
EXTERN_C LIBCOVRT_API void covrtLogBasicBlock(covrtInstance* instance,
uint32_T covId,
uint32_T basicBlockId);
/*
* MATLAB INTERNAL USE ONLY :: Log If
*/
EXTERN_C LIBCOVRT_API int32_T covrtLogIf(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId,
int32_T ifId,
int32_T condition);
/*
* MATLAB INTERNAL USE ONLY :: Log Cond
*/
EXTERN_C LIBCOVRT_API int32_T covrtLogCond(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId,
int32_T condId,
int32_T condition);
/*
* MATLAB INTERNAL USE ONLY :: Log If
*/
EXTERN_C LIBCOVRT_API void covrtLogFor(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId,
int32_T forId,
int32_T entryOrExit);
/*
* MATLAB INTERNAL USE ONLY :: Log While
*/
EXTERN_C LIBCOVRT_API int32_T covrtLogWhile(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId,
int32_T whileId,
int32_T condition);
/*
* MATLAB INTERNAL USE ONLY :: Log Switch
*/
EXTERN_C LIBCOVRT_API void covrtLogSwitch(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId,
int32_T switchId,
int32_T caseId);
/*
* MATLAB INTERNAL USE ONLY :: Log If
*/
EXTERN_C LIBCOVRT_API int32_T covrtLogMcdc(covrtInstance* instance,
uint32_T covId,
uint32_T fcnId,
int32_T mcdcId,
int32_T condition);
/*
* MATLAB INTERNAL USE ONLY :: Log decision in block
*/
EXTERN_C LIBCOVRT_API int32_T covrtLogBlockDec(covrtInstance* instance,
uint32_T covId,
int32_T decId,
int32_T eleIdx,
int32_T decVal);
/*
* MATLAB INTERNAL USE ONLY :: Simulink block coverage
*/
EXTERN_C LIBCOVRT_API void covrtSimulinkSessionInit(void* sessionInterface);
EXTERN_C LIBCOVRT_API void covrtSimulinkSessionCleanup();
EXTERN_C LIBCOVRT_API void covrtSimulinkSetTopModelInterface(void* cvTopModelInterface);
EXTERN_C LIBCOVRT_API void covrtSimulinkRegisterBlock(double blockHandle);
EXTERN_C LIBCOVRT_API bool covrtIsBlockRegistered(double blockHandle);
EXTERN_C LIBCOVRT_API void covrtMarkSkipInitCovRecording(const char* model);
EXTERN_C LIBCOVRT_API void covrtMarkModelInitialized(const char* model);
EXTERN_C LIBCOVRT_API bool covrtIsModelInitialized(const char* model);
EXTERN_C LIBCOVRT_API void covrtMarkModelStarted(const char* model);
EXTERN_C LIBCOVRT_API bool covrtIsModelStarted(const char* model);
EXTERN_C LIBCOVRT_API void covrtMarkModelTerminated(const char* model);
EXTERN_C LIBCOVRT_API bool covrtIsModelTerminated(const char* model);
EXTERN_C LIBCOVRT_API void covrtSimulinkBlockCovInit(const char* model, int blockSysIdx, int blockIdx, const char* blockSID, bool updateAtStart);
EXTERN_C LIBCOVRT_API void covrtSimulinkBlockCovRecord(const char* model, int blockSysIdx, int blockIdx);
EXTERN_C LIBCOVRT_API void covrtModelInit(const char* modelName);
EXTERN_C LIBCOVRT_API void covrtModelStart(const char* modelName);
EXTERN_C LIBCOVRT_API void covrtModelFastRestart(const char* modelName);
EXTERN_C LIBCOVRT_API void covrtModelTerm(const char* modelName);
EXTERN_C LIBCOVRT_API void covrtModelTermAll();
/*
* MATLAB INTERNAL USE ONLY :: Stateflow coverage instance
*/
EXTERN_C LIBCOVRT_API
CovrtStateflowInstance* covrtAllocateStateflowInstance(
CovrtStateflowInstance* instance,
const char* chartPath);
EXTERN_C LIBCOVRT_API
CovrtStateflowInstance* covrtDeleteStateflowInstance(CovrtStateflowInstance* instance);
EXTERN_C LIBCOVRT_API
void covrtCreateStateflowInstanceData(CovrtStateflowInstance* instance,
unsigned int stateCount,
unsigned int eventCount,
unsigned int transCount,
unsigned int dataCount);
EXTERN_C LIBCOVRT_API
void covrtSetInstanceCvIds(
double instanceHandle,
unsigned int cvChartId,
double* cvStateIds,
size_t stateCnt,
double* cvTransIds,
size_t transCnt);
EXTERN_C LIBCOVRT_API void covrtSetEmlScriptCvIds(double instanceHandle,
double* numToCvIdMap,
size_t size);
EXTERN_C LIBCOVRT_API
void covrtDeleteStateflowInstanceData(CovrtStateflowInstance* instance);
EXTERN_C LIBCOVRT_API void covrtRelationalopInitFcn(
CovrtStateflowInstance* instance,
unsigned int transitionNumber,
unsigned int relopCnt,
const int* txtStartIdx,
const int* txtEndIdx,
const int* relationalEps,
const int* relationalOp);
EXTERN_C LIBCOVRT_API void covrtSaturationInitFcn(
CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int transitionNumber,
unsigned int satCnt,
const unsigned int* txtStartIdx,
const unsigned int* txtEndIdx);
EXTERN_C LIBCOVRT_API void covrtTestobjectiveInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int testobjectiveCnt,
const unsigned int* txtStartIdx,
const unsigned int* txtEndIdx);
EXTERN_C LIBCOVRT_API void covrtTransInitFcn(CovrtStateflowInstance* instance,
unsigned int transitionNumber,
int predicateCnt,
const unsigned int* txtStartIdx,
const unsigned int* txtEndIdx,
unsigned int postFixPredicateTreeCount,
const int* postFixPredicateTree);
EXTERN_C LIBCOVRT_API void covrtStateInitFcn(CovrtStateflowInstance* instance,
unsigned int stateNumber,
unsigned int numChild,
bool hasDuringSwitch,
bool hasExitSwitch,
bool hasHistSwitch,
unsigned int onDecCnt,
const unsigned int* decStartInd,
const unsigned int* decEndInd);
EXTERN_C LIBCOVRT_API void covrtChartInitFcn(CovrtStateflowInstance* instance,
unsigned int numChild,
bool hasDuringSwitch,
bool hasExitSwitch,
bool hasHistSwitch);
EXTERN_C LIBCOVRT_API void covrtAssignmentInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int numAssignments,
const int* assignmentKeys,
const unsigned int* assignTxtStartIdx,
const unsigned int* assignTxtEndIdx,
unsigned int numTotalConditions,
const int* conditionKeys,
const unsigned int* condTxtStartIdx,
const unsigned int* condTxtEndIdx,
unsigned int postFixPredicateTreeConcatCount,
const int* postFixPredicateTreeConcat,
const unsigned int* condTextIdxOffsets,
const unsigned int* pptIdxOffsets);
EXTERN_C LIBCOVRT_API unsigned int covrtTestobjectiveUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
int retValue);
EXTERN_C LIBCOVRT_API bool covrtAssignmentUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API unsigned int covrtRelationalopUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
double lhsVal,
double rhsVal,
int relationalopEps,
unsigned int op,
int retValue);
EXTERN_C LIBCOVRT_API bool covrtSaturationUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int satIdx,
unsigned int isNeg,
int val);
EXTERN_C LIBCOVRT_API void covrtSaturationUpdateAccumFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int satIdx,
unsigned int accumMode);
EXTERN_C LIBCOVRT_API bool covrtDecUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API bool covrtTransitionDecUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
bool retValue);
EXTERN_C LIBCOVRT_API unsigned int covrtBasicBlockUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex);
EXTERN_C LIBCOVRT_API bool covrtCondUpdateFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
bool retValue);
EXTERN_C LIBCOVRT_API unsigned int covrtSigUpdateFcn(CovrtStateflowInstance* instance,
unsigned int dataNumber,
double equivValue);
/*
* MATLAB INTERNAL USE ONLY :: EML coverage instance
*/
EXTERN_C LIBCOVRT_API unsigned int covrtEmlInitFcn(CovrtStateflowInstance* instance,
const char* path,
unsigned int objectType,
unsigned int objectNumber,
unsigned int fcnCnt,
unsigned int basicBlockCnt,
unsigned int ifCnt,
unsigned int testobjectiveCnt,
unsigned int saturationCnt,
unsigned int switchCnt,
unsigned int forCnt,
unsigned int whileCnt,
unsigned int condCnt,
unsigned int mcdcCnt);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlFcnInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int fcnIdx,
const char *name,
int charStart,
int charExprEnd,
int charEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlTestobjectiveInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objIdx,
const char *name,
int charStart,
int charExprEnd,
int charEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlSaturationInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objIdx,
int charStart,
int charExprEnd,
int charEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlIfInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int ifIdx,
int charStart,
int charExprEnd,
int charElseStart,
int charEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlSwitchInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int switchIdx,
int charStart,
int charExprEnd,
int charEnd,
unsigned int caseCnt,
const int *caseStart,
const int *caseExprEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlForInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int forIdx,
int charStart,
int charExprEnd,
int charEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlWhileInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int whileIdx,
int charStart,
int charExprEnd,
int charEnd);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlMCDCInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int mcdcIdx,
int charStart,
int charEnd,
unsigned int condCnt,
unsigned int firstCondIdx,
const int *condStart,
const int *condEnd,
unsigned int pfxLength,
const int *pfixExpr,
bool isPositiveOnly);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlRelationalInitFcn(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objIdx,
int charStart,
int charEnd,
int relationalEps,
unsigned int relationalOp);
/*
* MATLAB INTERNAL USE ONLY :: EML coverage eval functions
*/
EXTERN_C LIBCOVRT_API unsigned int covrtEmlFcnEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlTestobjectiveEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API bool covrtEmlIfEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlForEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlWhileEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API unsigned int covrtEmlSwitchEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API bool covrtEmlCondEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
EXTERN_C LIBCOVRT_API bool covrtEmlMcdcEval(CovrtStateflowInstance* instance,
unsigned int objectType,
unsigned int objectNumber,
unsigned int objectIndex,
unsigned int retValue);
#endif /* covrt_h */