📄 oioic.h
字号:
/**
*
* 文 件 名:oioic.h
*
* 描 述:OIOIC 的 .h 文件。
*
* 创 建 者:赵平智 <pervise.zhao@gmail.com>
*
* 创建日期:20050310
*
* 版 本:1.0.0
*
* 版权(C)2005 赵平智。保留所有权利。
*
* 备 注:
*
*
* * 维护历史 *
*
* <日期> <修改者>
* <修改内容...>
*
**/
#ifndef __OIOIC_H__
#define __OIOIC_H__
/*
*
* 名称:INLINE_VOFUNCTION
* 描述:内联VO函数的开关。0 - 不内联,1 - 内联,其它 - 保留不用。
* 备注:定义为1时,能否真正内联VO函数还取决于下面的“_INLINE_”宏定义是否有效。
*/
#define INLINE_VOFUNCTION 0
/*
*
* 名称:_INLINE_
* 描述:宏定义内联指示符,因为编译器的内联指示符不统一。
* 备注:一定要定义为有效的内联指示符,否则即使编译通过,内联也是无效的,编译
* 器会自动把用其修饰的函数转为非内联编译。
*/
#define _INLINE_ __inline
/*
*
* 描述:OS、HO、SO的mask。
* 备注:目前OID是用64个比特位表示的(见下面OBJID数据类型定义)。其
* 中,高16位是OS标识域,中32位是HO标识域,低16位是SO标识域。
*/
#define MSKOS 0xFFFF000000000000
#define MSKHO 0x0000FFFFFFFF0000
#define MSKSO 0x000000000000FFFF
/*
*
* 各OS的OID。
*/
#define OID_OICOS 0x0001000000000000 /* Oicos的OID。*/
#define OID_UNIX 0x0002000000000000 /* Unix的OID。*/
#define OID_LINUX 0x0003000000000000 /* Linux的OID。*/
#define OID_WINDOWS 0x0004000000000000 /* Windows的OID。*/
/*
*
* 名称:OID_OS
* 描述:OS的OID。
*/
#define OID_OS OID_WINDOWS
/*
*
* 一级数据类型定义
*/
typedef char SI8;
typedef unsigned char UI8;
typedef short SI16;
typedef unsigned short UI16;
typedef int SI32;
typedef unsigned int UI32;
#if OID_OS == OID_OICOS
#elif OID_OS == OID_UNIX
#elif OID_OS == OID_LINUX
typedef long long SI64;
typedef unsigned long long UI64;
#elif OID_OS == OID_WINDOWS
typedef __int64 SI64;
typedef unsigned __int64 UI64;
#else
#endif
typedef float SR32;
/* typedef unsigned float UR32; */
typedef double SR64;
/* typedef unsigned double UR64; */
typedef void VOID;
/*
*
* 二级数据类型定义
*/
typedef UI8 BYTE; /* 位元组类型。*/
typedef UI16 ACTION; /* 行为类型。*/
typedef UI32 BYTKTY; /* by BYTe,c(K)apaciTY and q(K)uantiTY's type,以Byte为单位的容量和数量类型。*/
typedef UI32 BITKTY; /* by BIT,c(K)apaciTY and q(K)uantiTY's type,以Bit为单位的容量和数量类型。*/
typedef UI16 MLDSN; /* MSN类型。*/
typedef UI64 OBJID; /* OID类型。*/
typedef UI32 REFCNT; /* object's REFerence CouNT type,对象的引用计数类型。*/
typedef UI32 MODES; /* 模式集类型。*/
typedef UI16 NUMCS; /* the NUMber of CS type,CS的数量类型。*/
typedef UI16 NUMND; /* the NUMber of ND type,ND的数量类型。*/
typedef UI16 NUMIB; /* the NUMber of IB type,IB的数量类型。*/
typedef UI16 NUMBN; /* the NUMber of BN type,BN的数量类型。*/
typedef SI8 BOOL; /* 布尔类型,规定此类型数据只能有两个值:TRUE 或 FALSE (见下面 TRUE 和 FALSE 的定义)。*/
typedef SI32 IRESULT; /* 对象接口执行结果的数据类型,必须是有符号类型。*/
typedef SI32 FRESULT; /* 函数执行结果的数据类型,必须是有符号类型。*/
/*
*
* Byte位数
*/
#define BYTBITS 8
/*
*
* 描述:MSN
* 备注:要求MSN从1开始顺序编号,定义模板如下,
* #define MSN_XXX1 (MSN_ + 0) /-* xxx1的MSN。HO *-/
* #define MSN_XXX2 (MSN_ + 1) /-* xxx2的MSN。AO *-/
* #define MSN_XXX3 (MSN_ + 2) /-* xxx3的MSN。.. *-/
* #define MSN_XXX4 (MSN_ + 3) /-* xxx4的MSN。GO *-/
* #define MSN_XXX5 (MSN_ + 4) /-* xxx5的MSN。.. *-/
* ... ... ... ... ... ...
* #define MSN_XXXn (MSN_ + n-1) /-* xxxn的MSN。... *-/
*/
#define MSN_OIOIC 1 /* OIOIC的MSN。*/
#define MSN_ (MSN_OIOIC + 1) /* 其它MSN的起点。*/
/*
*
* 描述:通用模式定义。
* 备注:可定义 sizeof(MODES)*BYTBITS 个通用模式。即如下,
*
* #define MOD_ 1
* #define MOD_XXX0 ( MOD_ << 0 ) /-* BIT0。1:xxx;0:xxx。*-/
* #define MOD_XXX1 ( MOD_ << 1 ) /-* BIT1。1:xxx;0:xxx。*-/
* #define MOD_XXX2 ( MOD_ << 2 ) /-* BIT2。1:xxx;0:xxx。*-/
* ... ... ... ... ... ...
* #define MOD_XXXn ( MOD_ << (sizeof(MODES)*BYTBITS-1) ) /-* BITn。 1:xxx; 0:xxx。*-/
*/
#define MOD_ 1
#define MOD_SHARED ( MOD_ << 0 ) /* BIT0。0:共享;1:非共享。*/
#define MOD_BLOCKI ( MOD_ << 1 ) /* BIT1。0:阻断输入;1:非阻断输入。只适用于Input和IOput接口。*/
#define MOD_BLOCKO ( MOD_ << 2 ) /* BIT2。0:阻断输出;1:非阻断输出。只适用于Output和IOput接口。*/
/*
*
* 描述:对象接口执行结果定义。
* 备注:=== 定义模板 ===
*
* ... ... ... ... ... ...
* ... ... ... ... ... ...
* #define IR_N_PVT_YYY_ (IR_N_PVT_XXX_ - x) /-* X2的私有N结果起点。*-/
* #define IR_N_XXX (IR_N_PVT_XXX_ - x + 1)
* ... ... ... ... ... ...
* #define IR_N_XXX (IR_N_PVT_XXX_ -1)
* #define IR_N_XXX (IR_N_PVT_XXX_ -0)
* /-** X1对象模的私有N结果:^ **-/
*
* #define IR_N_PVT_XXX_ (IR_N_PVT_ - x) /-* X1的私有N结果起点。*-/
* #define IR_N_XXX (IR_N_PVT_ - x + 1)
* ... ... ... ... ... ...
* #define IR_N_XXX (IR_N_PVT_ -1)
* #define IR_N_XXX (IR_N_PVT_ -0)
* /-**
* ** 非一个对象模专用的N结果:^
* **-/
*
* ... ... ... ... ... ...
* ... ... ... ... ... ...
* #define IR_O_PVTN_YYY_ (IR_O_PVTN_XXX_ - x) /-* X2的私有负O结果起点。*-/
* #define IR_O_XXX (IR_O_PVTN_XXX_ - x + 1)
* ... ... ... ... ... ...
* #define IR_O_XXX (IR_O_PVTN_XXX_ -1)
* #define IR_O_XXX (IR_O_PVTN_XXX_ -0)
* /-** X1对象模的私有负O结果:^ **-/
*
* #define IR_O_PVTN_XXX_ (IR_O_PVTN_ - x) /-* X1的私有负O结果起点。*-/
* #define IR_O_XXX (IR_O_PVTN_ - x + 1)
* ... ... ... ... ... ...
* #define IR_O_XXX (IR_O_PVTN_ -1)
* #define IR_O_XXX (IR_O_PVTN_ -0)
* /-**
* ** 非一个对象模专用的负O结果:^
* **
* ** 非一个对象模专用的正O结果:
* **-/
* #define IR_O_XXX (IR_O_PVTP_ + 0)
* #define IR_O_XXX (IR_O_PVTP_ + 1)
* ... ... ... ... ... ...
* #define IR_O_XXX (IR_O_PVTP_ + x - 1)
* #define IR_O_PVTP_XXX_ (IR_O_PVTP_ + x) /-* X1的私有正O结果起点。*-/
*
* /-** X1对象模的私有正O结果:**-/
* #define IR_O_XXX (IR_O_PVTP_XXX_ + 0)
* #define IR_O_XXX (IR_O_PVTP_XXX_ + 1)
* ... ... ... ... ... ...
* #define IR_O_XXX (IR_O_PVTP_XXX_ + x - 1)
* #define IR_O_PVTP_YYY_ (IR_O_PVTP_XXX_ + x) /-* X2的私有正O结果起点。*-/
* ... ... ... ... ... ...
* ... ... ... ... ... ...
*
* /-**
* ** 非一个对象模专用的P结果:
* **-/
* #define IR_P_XXX (IR_P_PVT_ + 0)
* #define IR_P_XXX (IR_P_PVT_ + 1)
* ... ... ... ... ... ...
* #define IR_P_XXX (IR_P_PVT_ + x - 1)
* #define IR_P_PVT_XXX_ (IR_P_PVT_ + x) /-* X1的私有P结果起点。*-/
*
* /-** X1对象模的私有P结果:**-/
* #define IR_P_XXX (IR_P_PVT_XXX_ + 0)
* #define IR_P_XXX (IR_P_PVT_XXX_ + 1)
* ... ... ... ... ... ...
* #define IR_P_XXX (IR_P_PVT_XXX_ + x - 1)
* #define IR_P_PVT_YYY_ (IR_P_PVT_XXX_ + x) /-* X2的私有P结果起点。*-/
* ... ... ... ... ... ...
* ... ... ... ... ... ...
*
*/
#define IR_N_PVT_ (IR_N_PRIVATE_ - 50) /* <外部私有N结果的起点> */
#define IR_N_UNSHARED (FR_N_PRIVATE_ - 1) /* Open, 对象是非共享的。*/
#define IR_N_FULL (FR_N_PRIVATE_ - 0) /* Open,对象引用已满,不能再打开。*/
/* >#define IR_N_PRIVATE_ (IR_N - x) /-* <内部私有N结果的起点>*-/ */
#define IR_N_PRIVATE_ (IR_N - 10) /* <内部私有N结果的起点> */
#define IR_N_INVALIDARG (IR_N -1) /* 无效参数 */
#define IR_N __FR_ON__ /* N结果(否定性结果)的起点。*/
#define __IR_ON__ (IR_O_PVTN_ - 1000) /* O结果域的N界。*/
#define IR_O_PVTN_ (IR_O - 10) /* <外部私有负O结果起点> */
#define IR_O_NOPEN (IR_O - 2) /* Close,对象还没有被打开。*/
#define IR_O_VAINLY (IR_O - 1) /* 空操作 */
#define IR_O 0 /* O结果(中立性结果)域的中点。*/
#define IR_O_OBSOIX (IR_O + 1) /* OBS顺序非接力访问模式专用执行结果。*/
#define IR_O_SBOOIX (IR_O + 2) /* SBO顺序非接力访问模式专用执行结果。*/
#define IR_O__SBOOIX (IR_O + 3) /* SBO顺序接力访问模式专用执行结果。*/
#define IR_O_PVTP_ (IR_O + 10) /* <外部私有正O结果起点> */
#define __IR_OP__ (IR_O_PVTP_ + 1000) /* O结果域的P界。*/
#define IR_P __FR_OP__ /* P结果(肯定性结果)的起点。*/
#define IR_P_PRIVATE_ (IR_P + 10) /* <内部私有P结果的起点> */
/* >#define IR_P_PRIVATE_ (IR_P + x) /-* <内部私有P结果的起点> *-/ */
#define IR_P_RCZERO (IR_P_PRIVATE_ + 0) /* Close,对象引用计数变为0。*/
#define IR_P_PVT_ (IR_P_PRIVATE_ + 50) /* <外部私有P结果的起点> */
/*
*
* 描述:对象接口执行结果否定性/中立性/肯定性检测定义。
* 备注:NIR --- Negative IRESULT;
* OIR --- O IRESULT;
* PIR --- Positive IRESULT。
*/
#define NIR(Result) ( (IRESULT)(Result) <= __IR_ON__ )
#define OIR(Result) ( ((IRESULT)(Result) > __IR_ON__) && ((IRESULT)(Result) < __IR_OP__) )
#define PIR(Result) ( (IRESULT)(Result) >= __IR_OP__ )
/*
*
* 描述:对象交互行为分类定义。
* 备注:1. 从是否须要输入Byte流和有没有输出Byte流的角度,可将行为分为四种:
* AC0 - 不需输入Byte流也没有输出Byte流;
* AC1 - 不需要输入Byte流但有输出Byte流;
* AC2 - 需要输入Byte流但没有输出Byte流;
* AC3 - 即需要输入Byte流也有输出Byte流。
*
* 2. 有时,对象间交互需要输入Byte数据流或交互后有Byte数据流输出,或者即需要
* 输入Byte数据流又有Byte数据流输出。输入的数据流的类型必须是已知的,但输
* 出的数据流类型可以是未知的。
*
* 3. TSI和TSO
* TSI - the Type of Stream Inputed,输入的数据流类型。
* TSO - the Type of Stream Outputed,输出的数据流类型。
*/
#define AC0 0
#define AC1 (1 << (sizeof(ACTION)*BYTBITS - 2))
#define AC2 (2 << (sizeof(ACTION)*BYTBITS - 2))
#define AC3 (3 << (sizeof(ACTION)*BYTBITS - 2))
/* 判断交互行为种类的mask */
#define MSKAC (3 << (sizeof(ACTION)*BYTBITS - 2))
/*
*
* 描述:对象交互行为定义。
* 备注:=== 定义模板 ===
*
* /-** 非一个对象模专用的交互行为:**-/
* #define XXX_YYY (ACx | (ACT_PVT_ + 0))
* #define XXX_YYY (ACx | (ACT_PVT_ + 1))
* ... ... ... ... ... ...
* #define XXX_YYY (ACx | (ACT_PVT_ + x - 1))
* #define ACT_PVT_XXX_ (ACT_PVT_ + x) /-* X1的私有交互行为起点。*-/
*
* /-** X1对象模的私有交互行为:**-/
* #define XXX_YYY (ACx | (ACT_PVT_XXX_ + 0))
* #define XXX_YYY (ACx | (ACT_PVT_XXX_ + 1))
* ... ... ... ... ... ...
* #define XXX_YYY (ACx | (ACT_PVT_XXX_ + x - 1))
* #define ACT_PVT_YYY_ (ACT_PVT_XXX_ + x) /-* X2的私有交互行为起点。*-/
* ... ... ... ... ... ...
*/
#define ACT_ 0
#define ASK_SHARED (AC0 | (ACT_ + 0)) /* 问对象共享么。*/
#define SET_SHARED (AC0 | (ACT_ + 1)) /* 设置对象共享。*/
#define SET_UNSHARED (AC0 | (ACT_ + 2)) /* 设置对象非共享。*/
#define SET_BLOCKI (AC0 | (ACT_ + 3)) /* 设置对象阻断输入。*/
#define SET_UNBLOCKI (AC0 | (ACT_ + 4)) /* 设置对象非阻断输入。*/
#define SET_BLOCKO (AC0 | (ACT_ + 5)) /* 设置对象阻断输出。*/
#define SET_UNBLOCKO (AC0 | (ACT_ + 6)) /* 设置对象非阻断输出。*/
#define GET_IQCTY (AC1 | (ACT_ + 7)) /* 获取IQ容量。*/
#define SET_IQCTY (AC2 | (ACT_ + 8)) /* 设置IQ容量。*/
#define GET_OQCTY (AC1 | (ACT_ + 9)) /* 获取OQ容量。*/
#define SET_OQCTY (AC2 | (ACT_ + 10)) /* 设置OQ容量。*/
#define CMD_RESET (AC0 | (ACT_ + 11)) /* 重置。*/
#define ACT_PVT_ (ACT_ + 50) /* <外部私有交互行为的起点> */
/*
*
* 描述:函数执行结果定义,建议功能复杂或多返回值的函数使用。
* 备注:=== 定义模板 ===
*
* ... ... ... ... ... ...
* ... ... ... ... ... ...
* #define FR_N_PVT_YYY_ (FR_N_PVT_XXX_ - x) /-* X2的私有N结果起点。*-/
* #define FR_N_XXX (FR_N_PVT_XXX_ - x + 1)
* ... ... ... ... ... ...
* #define FR_N_XXX (FR_N_PVT_XXX_ -1)
* #define FR_N_XXX (FR_N_PVT_XXX_ -0)
* /-** X1函数的私有N结果:^ **-/
*
* #define FR_N_PVT_XXX_ (FR_N_PVT_ - x) /-* X1的私有N结果起点。*-/
* #define FR_N_XXX (FR_N_PVT_ - x + 1)
* ... ... ... ... ... ...
* #define FR_N_XXX (FR_N_PVT_ -1)
* #define FR_N_XXX (FR_N_PVT_ -0)
* /-**
* ** 非一个函数专用的N结果:^
* **-/
*
* ... ... ... ... ... ...
* ... ... ... ... ... ...
* #define FR_O_PVTN_YYY_ (FR_O_PVTN_XXX_ - x) /-* X2的私有负O结果起点。*-/
* #define FR_O_XXX (FR_O_PVTN_XXX_ - x + 1)
* ... ... ... ... ... ...
* #define FR_O_XXX (FR_O_PVTN_XXX_ -1)
* #define FR_O_XXX (FR_O_PVTN_XXX_ -0)
* /-** X1函数的私有负O结果:^ **-/
*
* #define FR_O_PVTN_XXX_ (FR_O_PVTN_ - x) /-* X1的私有负O结果起点。*-/
* #define FR_O_XXX (FR_O_PVTN_ - x + 1)
* ... ... ... ... ... ...
* #define FR_O_XXX (FR_O_PVTN_ -1)
* #define FR_O_XXX (FR_O_PVTN_ -0)
* /-**
* ** 非一个函数专用的负O结果:^
* **
* ** 非一个函数专用的正O结果:
* **-/
* #define FR_O_XXX (FR_O_PVTP_ + 0)
* #define FR_O_XXX (FR_O_PVTP_ + 1)
* ... ... ... ... ... ...
* #define FR_O_XXX (FR_O_PVTP_ + x - 1)
* #define FR_O_PVTP_XXX_ (FR_O_PVTP_ + x) /-* X1的私有正O结果起点。*-/
*
* /-** X1函数的私有正O结果:**-/
* #define FR_O_XXX (FR_O_PVTP_XXX_ + 0)
* #define FR_O_XXX (FR_O_PVTP_XXX_ + 1)
* ... ... ... ... ... ...
* #define FR_O_XXX (FR_O_PVTP_XXX_ + x - 1)
* #define FR_O_PVTP_YYY_ (FR_O_PVTP_XXX_ + x) /-* X2的私有正O结果起点。*-/
* ... ... ... ... ... ...
* ... ... ... ... ... ...
*
* /-**
* ** 非一个函数专用的P结果:
* **-/
* #define FR_P_XXX (FR_P_PVT_ + 0)
* #define FR_P_XXX (FR_P_PVT_ + 1)
* ... ... ... ... ... ...
* #define FR_P_XXX (FR_P_PVT_ + x - 1)
* #define FR_P_PVT_XXX_ (FR_P_PVT_ + x) /-* X1的私有P结果起点。*-/
*
* /-** X1函数的私有P结果:**-/
* #define FR_P_XXX (FR_P_PVT_XXX_ + 0)
* #define FR_P_XXX (FR_P_PVT_XXX_ + 1)
* ... ... ... ... ... ...
* #define FR_P_XXX (FR_P_PVT_XXX_ + x - 1)
* #define FR_P_PVT_YYY_ (FR_P_PVT_XXX_ + x) /-* X2的私有P结果起点。*-/
* ... ... ... ... ... ...
* ... ... ... ... ... ...
*
*/
#define FR_N_PVT_ (FR_N_PRIVATE_ - 50) /* <外部私有N结果的起点> */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -