BBS.ChinaUnix.net
首页 | 新闻 | Linux | AIX | 博客 | 论坛 | 存储 | 网络 | 人才 | 知识库 | 资料 | 读书 | 手册 | 精华 | 下载 | 空间     
  会员: 密码: 免费注册 | 忘记密码 | 会员登录 | 搜索 | 帮助 


[C] OIOIC携C语言统一了软件世界,OIOIC object model 1.0.0 for C programming language.
首页 » 论坛 » C/C++ »  
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页]
  本主题由 converse 于 2008-5-15 09:25 关闭 
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
1楼 发表于 2008-5-14 23:48 
  OIOIC 的作者赵平智发布 OIOIC 1.0.0 版本了:http://code.google.com/p/oioic/

  OIOIC 是赵平智个人天才地专为 C 语言设计的全新而优秀的软件对象模型。“OIOIC 是非常优秀的”,赵平智说,“以至于我禁不住‘狂言’几句:完美填补 C 语言面向对象技术空白,完美解决软件界多重继承难题,完美对象化对象多线程访问控制,统一软件世界组件规范,统一软件世界代码树结构,统一软件世界面向对象编程思想,统一软件世界高级程序设计语言 ------ OIOIC 使 C 语言成为首选。”

  为了能高效率地使用 OIOIC,赵平智又天才地个人亲手为 OIOIC 打造了一个构造器 ------ oicc(OICC)。“oicc 是一个非常智能的工具”,赵平智介绍道,“它能帮你完成许多繁重的工作,包括:创建节点,检查继承链的合法性,编写需要的并清除不需要的 CRT 函数等。很值得一提的是,oicc 本身就是用 OIOIC 设计的,并且 oicc 自己成功地构造了自己。”

[ 本帖最后由 ohisee 于 2008-5-20 09:29 编辑 ]



您对本贴的看法:鲜花[0] 臭蛋[0]
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
2楼 发表于 2008-5-14 23:53 
三张示意图。

[ 本帖最后由 ohisee 于 2008-5-14 23:57 编辑 ]




ComplexIC.jpg (187.45 KB) 2008-5-14 23:53
  OIOIC 完美地支持任意复杂的继承链,彻底解决了软件界多重继承难题。

Oicos.jpg (328.11 KB) 2008-5-14 23:53
  完全基于 OIOIC 的操作系统示意图

BooterOSn.jpg (107.31 KB) 2008-5-14 23:53
  完全基于 OIOIC 的计算机软件系统示意图


您对本贴的看法:鲜花[0] 臭蛋[0]
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
gawk
精灵王



UID:394228
注册:2006-3-29
最后登录: 2008-07-24
帖子:343
精华:0

可用积分:651 (稍有积蓄)
信誉积分:100
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
3楼 发表于 2008-5-15 00:02 
我是去买酱油的,路过



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

虽千万人吾往矣……
修炼xdr中……
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
飞灰橙   帅哥
法师



UID:73482
注册:2003-7-21
最后登录: 2008-07-25
帖子:6752
精华:8

可用积分:2427 (小富即安)
信誉积分:125
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
4楼 发表于 2008-5-15 00:08 
LZ你还没被口水淹死啊??!!!



您对本贴的看法:鲜花[0] 臭蛋[0]

__________________________________

强烈要求日本将琉球群岛归还中国!!!
还我琉球省!!!


构造完美代码
追究精致境界
反对随意修补
鄙视破坏和谐
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
5楼 发表于 2008-5-15 00:09 
/**
 *
 * 文 件 名: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          0xFFFF000000000000LL
#define   MSKHO          0x0000FFFFFFFF0000LL
#define   MSKSO          0x000000000000FFFFLL


/*
 *
 * 各OS的OID。
 */

#define        OID_OICOS            0x0001000000000000LL     /* Oicos的OID。*/
#define        OID_UNIX             0x0002000000000000LL     /* Unix的OID。*/
#define        OID_LINUX            0x0003000000000000LL     /* Linux的OID。*/
#define        OID_WINDOWS          0x0004000000000000LL     /* Windows的OID。*/


/*
 *
 * 名称:OID_OS
 * 描述:OS的OID。
 */

#define        OID_OS            OID_LINUX


/*
*
* 一级数据类型定义
*/

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结果的起点> */



您对本贴的看法:鲜花[0] 臭蛋[0]
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
6楼 发表于 2008-5-15 00:12 

/*
 *
 * 描述:OIOIC对象模型结构体。
 * 备注:“OIOIC”是5个通用接口(Open,Input,Output,Interact,Close)的第一个字符的合写。
 */

typedef struct TAG_OBJECT
{   
   /* RefCnt,对象引用计数(Reference Count)。*/
   REFCNT     RefCnt;

   /* MSN,模的SN。*/  
   MLDSN      MSN;
   
   /* OID,对象的ID。*/  
   OBJID      OID;
   
   /* 为了... 需要下面两个成员:
   * po_AND:指向AND。
   * NND:the Number of ND of IC,IC的ND数量,也就是AND的元素数量。*/

   struct TAG_OBJECT*   po_AND;
   NUMND      NND;
   
   /* 为能高效率访问IBN,需要下面两个成员:
   * ppo_AIB:指向AIB数组。
   * NIB:the Number of IB,IB数量,即AIB的元素数量。*/

   struct TAG_OBJECT**  ppo_AIB;
   NUMIB      NIB;
   
   /* 为了能访问BN的EM和高效率地清除来访记录,需要下面两个成员:
   * ppo_ABN:指向ABN数组。
   * NBN:the Number of BN,BN数量,即ABN的元素数量。*/

   struct TAG_OBJECT**  ppo_ABN;
   NUMBN      NBN;
   
   /* 不可重入(Not Reentrant)访问规则, 即同一MR的同一CR对每个BN只能访问一次。
   * 为遵守不可重入访问规则,需要下面两个成员:
   * pvr_ACS:指向ACS。
   * NCS:the Number of CS,CS的数量,即ACS的元素数量。*/

   VR*        pvr_ACS;
   NUMCS      NCS;   
   
   /** 对象接口:Open,Input,Output,IOput,Interact0~3,Close。**/
   
   /* 名称:Open
   *  描述:打开。
   *  参数:pCaller --- [IN] 来访者。*/

   IRESULT  (*Open) (struct TAG_OBJECT* This, const VR* pCaller);
   /* 名称:Input
   *  描述:输入。
   *  参数:IStrm --- [IN] 输入流;
   *        Qty --- [IN] 输入的Byte数量;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*Input) (struct TAG_OBJECT* This, BYTE* IStrm, BYTKTY Qty, const VR* pCaller);
   /* 名称:Output
   *  描述:输出。
   *  参数:OStrm --- [OUT] 输出流的流向;
   *        Cty --- [IN] OStrm所指存储空间的容量;
   *        pQty --- [OUT] 指向实际输出的Byte数量;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*Output) (struct TAG_OBJECT* This, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
   /* 名称:IOput
   *  描述:输入输出。
   *  参数:IStrm --- [IN] 输入流;
   *        Qty --- [IN] 输入的Byte数量;
   *        OStrm --- [OUT] 输出流的流向;
   *        Cty --- [IN] OStrm所指存储空间的容量;
   *        pQty --- [OUT] 指向实际输出的Byte数量;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*IOput) (struct TAG_OBJECT* This, BYTE* IStrm, BYTKTY Qty, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
   /* 名称:Interact0
   *  描述:交互,接收AC0类型的行为。
   *  参数:Act --- [IN] 交互行为;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*Interact0) (struct TAG_OBJECT* This, ACTION Act, const VR* pCaller);
   /* 名称:Interact1
   *  描述:交互,接收AC1类型的行为。
   *  参数:Act --- [IN] 交互行为;
   *        OStrm --- [OUT] 输出流的流向;
   *        Cty --- [IN] OStrm所指存储空间的容量;
   *        pQty --- [OUT] 指向实际输出的Byte数量;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*Interact1) (struct TAG_OBJECT* This, ACTION Act, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
   /* 名称:Interact2
   *  描述:交互,接收AC2类型的行为。
   *  参数:Act --- [IN] 交互行为;
   *        IStrm --- [IN] 输入流;
   *        Qty --- [IN] 输入的Byte数量;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*Interact2) (struct TAG_OBJECT* This, ACTION  Act, BYTE* IStrm, BYTKTY Qty, const VR* pCaller);
   /* 名称:Interact3
   *  描述:交互,接收AC3类型的行为。
   *  参数:Act --- [IN] 交互行为;
   *        IStrm --- [IN] 输入流;
   *        Qty --- [IN] 输入的Byte数量;
   *        OStrm --- [OUT] 输出流的流向;
   *        Cty --- [IN] OStrm所指存储空间的容量;
   *        pQty --- [OUT] 指向实际输出的Byte数量;
   *        pCaller --- [IN] 来访者。*/

   IRESULT  (*Interact3) (struct TAG_OBJECT* This, ACTION Act, BYTE* IStrm, BYTKTY Qty, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller);
   /* 名称:Close
   *  描述:关闭。
   *  参数:pCaller --- [IN] 来访者。*/

   IRESULT  (*Close) (struct TAG_OBJECT* This, const VR* pCaller);
   
   /* pEM,指向对象的EM(扩展成员)。*/
   EM*   pEM;   
}OBJECT;

/*=====================+ OIOIC的EM +=====================*/

typedef struct TAG_EM_OIOIC
{
    QUEUE       IQ;    /* 输入队列。*/  
    QUEUE       OQ;  /* 输出队列。*/  
    MODES      mds;    /* 模式集。*/
}EM_OIOIC;



您对本贴的看法:鲜花[0] 臭蛋[0]
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
7楼 发表于 2008-5-15 00:14 
/*=============+  宏封装单个Byte入列和出列  +============*/

/* 单个Byte入列有两种模式:
*  1. PLACE --- 放入模式,向有空闲空间的队列放入一个Byte;
*  2. PUSH --- 推入模式,向已满(没有空闲空间)的队列推入一个Byte,把第一个Byte挤出扔掉。*/


/*
 *
 * 名称:ENQ_PLACE_BYTE
 * 描述:宏,向有空闲空间的队列放入一个Byte。
 * 参数:pQ --- [IN] QUEUE类型指针,指向队列,这个队列必须是有空闲空间的;
 *       byte --- [IN] 入列的Byte。
 * 备注:只有在队列有空闲空间时才能使用。如下,
 *
 *         if(pQ->Qty < pQ->Cty)
 *         {
 *              ENQ_PLACE_BYTE(pQ, byte);
 *         }else
 *         {
 *             pQ->Lost++;
 *
 *             /-* ... *-/
 *         }
 */

#define  ENQ_PLACE_BYTE(pQ, byte) \
    do{ \
        if((pQ)->Rear == (pQ)->Dtrm + (pQ)->Cty - 1) \
            (pQ)->Rear = (pQ)->Dtrm; \
        else \
            (pQ)->Rear++; \
        *((pQ)->Rear) = (byte); \
        (pQ)->Qty++; \
        if((pQ)->Dtrm-1 == (pQ)->Front) \
            (pQ)->Front = (pQ)->Dtrm; \
    }while(0)

/*
 *
 * 名称:ENQ_PUSH_BYTE
 * 描述:宏,向已满(没有空闲空间)的队列推入一个Byte,把第一个Byte挤出扔掉。
 * 参数:pQ --- [IN] QUEUE类型指针,指向队列;
 *       byte --- [IN] 入列的Byte。
 * 备注:只有在队列已满时才能使用。如下,
 *
 *           if(pQ->Qty < pQ->Cty)
 *         {
 *            ENQ_PLACE_BYTE(pQ, byte);
 *         }else
 *         {
 *             ENQ_PUSH_BYTE(pQ, byte);
 *             pQ->Lost++;
 *
 *            /-* ... *-/
 *         }
 */

#define  ENQ_PUSH_BYTE(pQ, byte) \
    do{ \
        (pQ)->Rear = (pQ)->Front; \
        *((pQ)->Rear) = (byte); \
        if( (pQ)->Front == ((pQ)->Dtrm + (pQ)->Cty -1) ) \
            (pQ)->Front = (pQ)->Dtrm; \
        else \
            (pQ)->Front++; \
    }while(0)

/*
 *
 * 名称:DEQ_BYTE
 * 描述:宏,从非空的队列出列一个Byte。
 * 参数:pQ --- [IN] QUEUE类型指针,指向队列;
 *       pByte --- [OUT] Byte地址,输出出列的Byte。
 * 备注:只有在队列非空时才能使用。如下,
 *
 *           if(pQ->Qty > 0)
 *         {
 *            DEQ_BYTE(pQ, pByte);
 *         }
 */

#define  DEQ_BYTE(pQ, pByte) \
    do{ \
        *(pByte) = *((pQ)->Front); \
        (pQ)->Qty--; \
        if(0 == (pQ)->Qty) \
            (pQ)->Front = (pQ)->Rear = (pQ)->Dtrm -1; \
        else if( (pQ)->Front == ((pQ)->Dtrm + (pQ)->Cty -1) ) \
            (pQ)->Front = (pQ)->Dtrm; \
        else \
            (pQ)->Front++; \
    }while(0)


/*===================+  内联VO函数  +====================*/

/* 注:内联VO函数和非内联VO函数的功能是完全相同的。*/


#if INLINE_VOFUNCTION == 1

/**
 *
 * 名称:VO_Open
 * 描述:接口Open的VO函数。
 * 参数:pObject --- [IN] 指向对象;
 *       pCaller --- [IN] 来访者。
 */
                    
static  _INLINE_  IRESULT VO_Open(OBJECT* pObject, const VR* pCaller)
{
    extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller);
    extern  FRESULT CallerLeave(OBJECT* pND, const VR* pCaller);

    IRESULT  ir = IR_O;

    if( 0 == pCaller->cr || 0 == pCaller->mr )
        return IR_N_INVALIDARG;
    
    if( FR_P == CallerCome(pObject, pCaller) )
    {
        ir = pObject->Open(pObject, pCaller);
        CallerLeave(pObject, pCaller);
    }else { ir = IR_N; }
    
    return ir;
}
       
/**
 *
 * 名称:VO_Input
 * 描述:接口Input的VO函数。
 * 参数:pObject --- [IN] 指向对象;
 *      IStrm --- [IN] 输入流;
 *      Qty --- [IN] 输入的Byte数量;
 *      pCaller --- [IN] 来访者。
 */
         
static  _INLINE_  IRESULT VO_Input(OBJECT* pObject, BYTE* IStrm, BYTKTY Qty, const VR* pCaller)
{
    extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller);
    extern  FRESULT CallerLeave(OBJECT* pND, const VR* pCaller);

    IRESULT  ir = IR_O;

    if( NULL == IStrm || 0 == Qty || 0 == pCaller->cr || 0 == pCaller->mr )
        return IR_N_INVALIDARG;

    if( FR_P == CallerCome(pObject, pCaller) )
    {
        ir = pObject->Input(pObject, IStrm, Qty, pCaller);
        CallerLeave(pObject, pCaller);
    }else { ir = IR_N; }
    
    return ir;
}



您对本贴的看法:鲜花[0] 臭蛋[0]
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
8楼 发表于 2008-5-15 00:16 

/*===================+  内联VO函数  +====================*/

/* 注:内联VO函数和非内联VO函数的功能是完全相同的。*/


#if INLINE_VOFUNCTION == 1

/**
 *
 * 名称:VO_Open
 * 描述:接口Open的VO函数。
 * 参数:pObject --- [IN] 指向对象;
 *       pCaller --- [IN] 来访者。
 */
                    
static  _INLINE_  IRESULT VO_Open(OBJECT* pObject, const VR* pCaller)
{
    extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller);
    extern  FRESULT CallerLeave(OBJECT* pND, const VR* pCaller);

    IRESULT  ir = IR_O;

    if( 0 == pCaller->cr || 0 == pCaller->mr )
        return IR_N_INVALIDARG;
    
    if( FR_P == CallerCome(pObject, pCaller) )
    {
        ir = pObject->Open(pObject, pCaller);
        CallerLeave(pObject, pCaller);
    }else { ir = IR_N; }
    
    return ir;
}
       
/**
 *
 * 名称:VO_Input
 * 描述:接口Input的VO函数。
 * 参数:pObject --- [IN] 指向对象;
 *      IStrm --- [IN] 输入流;
 *      Qty --- [IN] 输入的Byte数量;
 *      pCaller --- [IN] 来访者。
 */
         
static  _INLINE_  IRESULT VO_Input(OBJECT* pObject, BYTE* IStrm, BYTKTY Qty, const VR* pCaller)
{
    extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller);
    extern  FRESULT CallerLeave(OBJECT* pND, const VR* pCaller);

    IRESULT  ir = IR_O;

    if( NULL == IStrm || 0 == Qty || 0 == pCaller->cr || 0 == pCaller->mr )
        return IR_N_INVALIDARG;

    if( FR_P == CallerCome(pObject, pCaller) )
    {
        ir = pObject->Input(pObject, IStrm, Qty, pCaller);
        CallerLeave(pObject, pCaller);
    }else { ir = IR_N; }
    
    return ir;
}

/**
 *
 * 名称:VO_Output
 * 描述:接口Output的VO函数。
 * 参数:pObject --- [IN] 指向对象;
 *      OStrm --- [OUT] 输出流的流向;
 *      Cty --- [IN] OStrm所指存储空间的容量;
 *      pQty --- [OUT] 指向实际输出的Byte数量;
 *      pCaller --- [IN] 来访者。
 */
      
static  _INLINE_  IRESULT VO_Output(OBJECT* pObject, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller)
{
    extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller);
    extern  FRESULT CallerLeave(OBJECT* pND, const VR* pCaller);

    IRESULT  ir = IR_O;

    if( NULL == OStrm || 0 == Cty || NULL == pQty || 0 == pCaller->cr || 0 == pCaller->mr )
        return IR_N_INVALIDARG;

    *pQty = 0;

    if( FR_P == CallerCome(pObject, pCaller) )
    {
        ir = pObject->Output(pObject, OStrm, Cty, pQty, pCaller);
        CallerLeave(pObject, pCaller);
    }else { ir = IR_N; }
    
    return ir;
}

/**
*
* 名称:VO_IOput
* 描述:接口IOput的VO函数。
*  参数:IStrm --- [IN] 输入流;
*        Qty --- [IN] 输入的Byte数量;
*        OStrm --- [OUT] 输出流的流向;
*        Cty --- [IN] OStrm所指存储空间的容量;
*        pQty --- [OUT] 指向实际输出的Byte数量;
*        pCaller --- [IN] 来访者。
*/
  
static  _INLINE_  IRESULT VO_IOput(OBJECT* pObject, BYTE* IStrm, BYTKTY Qty, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller)
{
    extern  FRESULT CallerCome(OBJECT* pND, const VR* pCaller);
    extern  FRESULT CallerLeave(OBJECT* pND, const VR* pCaller);
    
    IRESULT  ir = IR_O;

    if( NULL == IStrm || 0 == Qty || NULL == OStrm || 0 == Cty || NULL == pQty || 0 == pCaller->cr || 0 == pCaller->mr )
        return IR_N_INVALIDARG;
    
    *pQty = 0;

    if( FR_P == CallerCome(pObject, pCaller) )
    {
        ir = pObject->IOput(pObject, IStrm, Qty, OStrm, Cty, pQty, pCaller);
        CallerLeave(pObject, pCaller);
    }else { ir = IR_N; }
    
    return ir;
}



您对本贴的看法:鲜花[0] 臭蛋[0]
Web安全应用现状有奖调查+Web安全应急处理沙龙+100积分 | 致电800-858-2903,了解DELL如何为你量身订制笔记本
ohisee
新手




UID:689690
注册:2008-4-10
最后登录: 2008-05-20
帖子:12
精华:0

可用积分:12 (白手起家)
信誉积分:0
专家积分:0 (本版)

状态:...离线...

[个人空间] [短信] [博客]


顶部
9楼 发表于 2008-5-15 00:19 
/*===============+ 继承链的四种访问模式 +======