/***************************************************************************
 * sv_vpi_user.h
 *
 * Accellera SystemVerilog VPI extensions.
 *
 * This file contains the constant definitions, structure definitions, and
 * routine declarations used by the Verilog PLI procedural interface VPI
 * access routines.
 *
 **************************************************************************/

#ifndef SV_VPI_USER_H
#define SV_VPI_USER_H

#include <vpi_user.h>

#ifdef __cplusplus
extern "C" {
#endif

/****************************** OBJECT TYPES ******************************/
#define vpiPackage
#define vpiInterface
#define vpiProgram
#define vpiInterfaceArray
#define vpiProgramArray
#define vpiTypespec
#define vpiModport
#define vpiInterfaceTfDecl
#define vpiRefObj
#define vpiVarBitVar         vpiRegBit
#define vpiLongIntVar
#define vpiShortIntVar
#define vpiIntVar
#define vpiShortRealVar
#define vpiByteVar
#define vpiClassVar
#define vpiStringVar
#define vpiEnumVar
#define vpiStructVar
#define vpiUnionVar
#define vpiBitVar
#define vpiLogicVar          vpiRegVar
#define vpiArrayVar          vpiRegArray
#define vpiLongIntTypespec
#define vpiShortRealTypespec
#define vpiByteTypespec
#define vpiShortIntTypespec
#define vpiIntTypespec
#define vpiClassTypespec
#define vpiStringTypespec
#define vpiVarBitTypespec
#define vpiEnumTypespec
#define vpiEnumConst
#define vpiIntegerTypespec
#define vpiTimeTypespec
#define vpiRealTypespec
#define vpiStructTypespec
#define vpiUnionTypespec
#define vpiBitTypespec
#define vpiLogicTypespec
#define vpiArrayTypespec
#define vpiVoidTypespec
#define vpiMemberTypespec
#define vpiClockingBlock
#define vpiClockingIODecl
#define vpiClassDefn
#define vpiConstraint
#define vpiConstraintOrdering
#define vpiConstraintDist
#define vpiDistItem
#define vpiAliasStmt
#define vpiThread
#define vpiMethodFuncCall
#define vpiMethodTaskCall
#define vpiAssertProperty
#define vpiAssumeProperty
#define vpiCoverProperty
#define vpiDisableCondition
#define vpiClockingEvent
#define vpiPropertyDecl
#define vpiPropertySpec
#define vpiPropertyExpr
#define vpiMulticlockSequenceExpr
#define vpiClockedSeq
#define vpiPropertyInst
#define vpiSequenceDecl
#define vpiSequenceSpec
#define vpiActualArgExpr
#define vpiSequenceInst
#define vpiImmediateAssert
#define vpiReturn
#define vpiAnyPattern
#define vpiTaggedPattern
#define vpiStructPattern
#define vpiDoWhile
#define vpiOrderedWait
#define vpiWaitFork
#define vpiDisableFork
#define vpiExpectStmt
#define vpiForeachStmt
#define vpiFinal


/******************************** METHODS *********************************/
/************* methods used to traverse 1 to 1 relationships **************/
#define vpiInterfaceConn
#define vpiTypedefAlias
#define vpiBaseTypespec
#define vpiElemTypespec
#define vpiDefInputSkew
#define vpiDefOutputSkew
#define vpiSkew
#define vpiBaseClass
#define vpiActualDefn
#define vpiLhs
#define vpiRhs
#define vpiOrigin
#define vpiPrefix
#define vpiWith
#define vpiSuccessStmt
#define vpiFailStmt
#define vpiProperty



/************ methods used to traverse 1 to many relationships ************/
#define vpiTypedef
#define vpiDefaultClocking
#define vpiInstance
#define vpiImport
#define vpiDerivedClasses
#define vpiMethods
#define vpiSolveBefore
#define vpiSolveAfter
#define vpiWeight
#define vpiWaitingProcesses
#define vpiMessages
#define vpiMembers
#define vpiLoopVars



/************************ generic object properties ***********************/
#define vpiTop
#define vpiUnit
#define vpiAccessType
#define vpiForkJoin
#define vpiExtern
#define vpiDPIExtern
#define vpiDPIImport
#define vpiArrayType
#define vpiDynamicArray
#define vpiQueueArray
#define vpiStaticArray
#define vpiIsRandomized
#define vpiRandType
#define vpiVpiRand
#define vpiRandC
#define vpiNotRand
#define vpiConstantVar
#define vpiMember
#define vpiVisibility
#define vpiPublic
#define vpiProtected
#define vpiPrivate
#define vpiPacked
#define vpiTagged
#define vpiRef
#define vpiDefaultSkew
#define vpiVirtual
#define vpiUserDefined
#define vpiIsConstraintEnabled
#define vpiClassType
#define vpiMailbox
#define vpiSemaphore
#define vpiAssociativeArray
#define vpiIndexTypespec
#define vpiMethod
#define vpiValid
#define vpiActive
#define vpiIsClockInferred
#define vpiUniqueQualifier
#define vpiPriorityQualifier
#define vpiTaggedQualifier
#define vpiNullConst
#define vpiOneStepConst
#define VpiAlwaysType
#define vpiAlwaysComb
#define vpiAlwaysFF
#define vpiAlwaysLatch

v

/******************************** Operators *******************************/
#define vpiEqualDist                         /* constraint equal distribution operator */
#define vpiDivDist                           /* constraint divided distribution operator */

#define vpiImplyOp                           /* -> implication operator */
#define vpiNonOverlapImplyOp                 /* |=> non-overlapped implication */
#define vpiOverlapImplyOp                    /* |-> overlapped implication operator */
#define vpiUnaryCycleDelayOp                 /* binary cycle delay (##) operator */
#define vpiCycleDelayOp                      /* binary cycle delay (##) operator */
#define vpiIntersectOp                       /* intersection operator */
#define vpiFirstMatchOp                      /* first_match operator */
#define vpiThroughoutOp                      /* throught operator */
#define vpiWithinOp                          /* within operator */
#define vpiRepeatOp                          /* [*=] non-consecutive repetition */
#define vpiConsecutiveRepeatOp               /* [*] consecutive repetition */
#define vpiGotoRepeatOp                      /* [*->] goto repetition */

#define vpiPostIncOp                         /* ++ post-increment */
#define vpiPreIncOp                          /* ++ pre-increment */
#define vpiPostDecOp                         /* -- post-decrement */
#define vpiPreDecOp                          /* -- pre-decrement */

#define vpiMatchOp                           /* match() operator */
#define vpiCastOp                            /* type`() operator */
#define vpiIffOp                             /* iff operator */
#define vpiWildEqOp                          /* =?= operator */
#define vpiWildNeqOp                         /* !?= operator */


/************************** STRUCTURE DEFINITIONS *************************/

/*****************************  structure *****************************/

/**************************** CALLBACK REASONS ****************************/
#define cbStartOfThread                      /* callback on thread creation */
#define cbEndOfThread                        /* callback on thread termination */
#define cbEnterThread                        /* callback on re-entering thread */
#define cbStartOfFrame                       /* callback on frame creation */
#define cbEndOfFrame                         /* callback on frame exit */
#define cbTypeChange                         /* callback on variable type/size change */

/************************* FUNCTION DECLARATIONS **************************/

#ifdef __cplusplus
}
#endif

#endif
