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


[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 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

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


11楼 发表于 2008-5-15 00:22 

/**
 *
 * 名称:OIOIC_Interact2
 * 描述:Interact2接口。
 * 参数:Act --- [IN] 交互行为;
 *      IStrm --- [IN] 输入流;
 *      Qty --- [IN] 输入的Byte数量;
 *      pCaller --- [IN] 来访者。
 */

static IRESULT  OIOIC_Interact2(OBJECT* This, ACTION  Act, BYTE* IStrm, BYTKTY Qty, const VR* pCaller)
{
    EM_OIOIC*   pem = (EM_OIOIC*)(This->pEM);

    switch( Act )
    {
        case SET_IQCTY: /* 设置IQ容量。*/
            if(sizeof(BYTKTY) == Qty)
            {
                if(pem->IQ.Dtrm != NULL)
                    free(pem->IQ.Dtrm);
                pem->IQ.Dtrm = (BYTE*)calloc(*((BYTKTY*)IStrm), 1);
                if( pem->IQ.Dtrm != NULL )
                {
                    pem->IQ.Front = pem->IQ.Rear = pem->IQ.Dtrm - 1;
                    pem->IQ.Cty = *((BYTKTY*)IStrm);
                    pem->IQ.Qty = pem->IQ.Lost = 0;
                    return IR_P;
                }else { return IR_N; }
            }else{ return IR_N; }
        case SET_OQCTY: /* 设置OQ容量。*/
            if(sizeof(BYTKTY) == Qty)
            {
                if(pem->OQ.Dtrm != NULL)
                    free(pem->OQ.Dtrm);
                pem->OQ.Dtrm = (BYTE*)calloc(*((BYTKTY*)IStrm), 1);
                if( pem->OQ.Dtrm != NULL )
                {
                    pem->OQ.Front = pem->OQ.Rear = pem->OQ.Dtrm - 1;
                    pem->OQ.Cty = *((BYTKTY*)IStrm);
                    pem->OQ.Qty = pem->OQ.Lost = 0;
                    return IR_P;
                }else { return IR_N; }
            }else{ return IR_N; }
        default:
            break;                        
    }
    
    return IR_O_SBOOIX;
}

/**
 *
 * 名称:OIOIC_Interact3
 * 描述:Interact3接口。
 * 参数:Act --- [IN] 交互行为;
 *      IStrm --- [IN] 输入流;
 *      Qty --- [IN] 输入的Byte数量;
 *      OStrm --- [OUT] 输出流的流向;
 *      Cty --- [IN] OStrm所指存储空间的容量;
 *      pQty --- [OUT] 指向实际输出的Byte数量;
 *      pCaller --- [IN] 来访者。
 */

static IRESULT  OIOIC_Interact3(OBJECT* This, ACTION Act, BYTE* IStrm, BYTKTY Qty, BYTE* OStrm, BYTKTY Cty, BYTKTY* pQty, const VR* pCaller)
{    
    return IR_O_SBOOIX;
}

/**
 *
 * 名称:OIOIC_Close
 * 描述:Close接口。
 * 参数:pCaller --- [IN] 来访者。
 */

static IRESULT  OIOIC_Close(OBJECT* This, const VR* pCaller)
{
    This->RefCnt--;
    return IR_P;
}

/*========================+ TOG +========================*/

/**
 *
 * 名称:TOG_OIOIC
 */

VOID  TOG_OIOIC(OBJECT* pObj)
{
    pObj->Open = OIOIC_Open;
    pObj->Input = OIOIC_Input;
    pObj->Output = OIOIC_Output;
    pObj->IOput = OIOIC_IOput;
    pObj->Interact0 = OIOIC_Interact0;
    pObj->Interact1 = OIOIC_Interact1;
    pObj->Interact2 = OIOIC_Interact2;
    pObj->Interact3 = OIOIC_Interact3;
    pObj->Close = OIOIC_Close;
}



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
ohisee
新手




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

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

状态:...离线...

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


12楼 发表于 2008-5-15 00:24 

/*=============+ CallerCome & CallerLeave +==============*/

/* 注:不允许外面使用 CallerCome 和 CallerLeave。*/

/**
 *
 * 名称:CallerCome
 * 描述:来访者来访,登记来访记录。
 * 参数:pND --- [IN] ND地址;
 *       pCaller --- [IN] 来访者。
 * 备注:不允许外面使用。
 */

FRESULT CallerCome(OBJECT* pND, const VR* pCaller)
{   
    NUMCS   i;
    VR*   pVR;
    
    /* 先检查有没有这个VR。 */
    for(i=0; i<pND->NCS; i++)
    {
        pVR = pND->pvr_ACS+i;
        if((pVR->cr == pCaller->cr) && (pVR->mr == pCaller->mr))
            return FR_N_HASVR; /* 已经有这个VR了。*/
    }

    /* 加上这个VR。 */
    for(i=0; i<pND->NCS; i++)
    {
        pVR = pND->pvr_ACS+i;
        if( 0 == pVR->cr )
        {
            *pVR = *pCaller;
            return FR_P;
        }
    }
        
    return FR_N;  
}

/**
 *
 * 名称:CallerLeave
 * 描述:来访者离开,清除来访记录。
 * 参数:pND --- [IN] ND地址;
 *       pCaller --- [IN] 来访者。
 * 备注:不允许外面使用。
 */

FRESULT CallerLeave(OBJECT* pND, const VR* pCaller)
{
    NUMBN  i;
    NUMCS  j;
    VR*  pVR;
    
    /* 首先ND的BN */
    for(i=0; i<pND->NBN; i++)
    {
        for(j=0; j<(*(pND->ppo_ABN+i))->NCS; j++)
        {
            pVR = (*(pND->ppo_ABN+i))->pvr_ACS+j;
              if((pVR->cr == pCaller->cr) && (pVR->mr == pCaller->mr))
                pVR->cr = pVR->mr = 0;
        }
    }
    
    /* 然后ND自己 */
    for(j=0; j<pND->NCS; j++)
    {
        pVR = pND->pvr_ACS+j;
        if((pVR->cr == pCaller->cr) && (pVR->mr == pCaller->mr))
            pVR->cr = pVR->mr = 0;
    }

    return FR_P;
}



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
ohisee
新手




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

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

状态:...离线...

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


13楼 发表于 2008-5-15 00:25 

/*==================+ Enqueue & Dequeue +================*/

/**
 *
 * 名称:Enqueue
 * 描述:向指定的队列入列指定数量的Byte。
 * 参数:IData --- [IN] 入列数据;
 *       Qty --- [IN] 入列的Byte数量。
 */

FRESULT  Enqueue(QUEUE* pq, BYTE* IData, BYTKTY Qty)
{
    BYTE*     newRear;  /* 入列成功后pq->Rear应该所处的位置。*/
    BYTKTY   ctyFree, qtyEnq;
    
    if( NULL == pq || NULL == IData )
    {
        return FR_N_INVALIDARG;
    }
    
    ctyFree = pq->Cty - pq->Qty;
    qtyEnq = (ctyFree > Qty) ? Qty : ctyFree;
    
    if( 0 == qtyEnq )
        return FR_O_VAINLY;
        
    newRear = pq->Dtrm + (pq->Rear + qtyEnq - pq->Dtrm ) % pq->Cty;
    if(newRear > pq->Rear) /* 如果入列成功,pq->Rear不须循环?*/
    {
        memcpy(pq->Rear+1, IData, qtyEnq);
    }else /* 如果入列成功,pq->Rear须循环。*/
    {    
        BYTKTY   qty1, qty2;
        qty1 = pq->Dtrm + pq->Cty - pq->Rear - 1;
        if(qty1 > 0)
            memcpy(pq->Rear+1, IData, qty1);
        qty2 = qtyEnq - qty1;
        memcpy(pq->Dtrm, IData + qty1, qty2);
    }

    pq->Rear = newRear;
    pq->Qty += qtyEnq;

    if(pq->Dtrm-1 == pq->Front)
        pq->Front = pq->Dtrm;

    if(ctyFree < Qty)
    {
       pq->Lost = Qty - ctyFree;  /* 丢失了 Qty - ctyFree 个Byte !*/
       return FR_N_LOST;
    }
    
    return FR_P;
}

/**
 *
 * 名称:Dequeue
 * 描述:从指定队列出列Byte。
 * 参数:OData --- [OUT] 出列数据的存储位置;
 *       Cty --- [IN] OData所指存储空间的容量;
 *       pQty --- [OUT] 指向实际出列的Byte数量。
 */

FRESULT  Dequeue(QUEUE* pq, BYTE* OData, BYTKTY Cty, BYTKTY* pQty)
{
    BYTE*    newFront;  /* 出列成功后pq->Front应该所处的位置。*/
    BYTKTY   qtyDeq;  /* 实际出列数据量。*/

    if(NULL == pq || NULL == OData || 0 == Cty || NULL == pQty)
    {
        return FR_N_INVALIDARG;
    }
    
    *pQty = 0; /* 先将出列数置0。*/
    
    if( pq->Qty != 0 )
    {
        qtyDeq = (Cty > pq->Qty) ? pq->Qty : Cty;

        newFront = pq->Dtrm + (pq->Front + qtyDeq - pq->Dtrm) % pq->Cty;
        if(newFront > pq->Front) /* 出列后,pq->Front不须循环? */
        {
            memcpy(OData, pq->Front, qtyDeq);
        }else /* 出列后,pq->Front须循环。*/
        {
            BYTKTY   qty1, qty2;
            qty1 = pq->Dtrm + pq->Cty - pq->Front;
            qty2 = qtyDeq - qty1;
            memcpy(OData, pq->Front, qty1);
            memcpy(OData + qty1, pq->Dtrm, qty2);
        }

        pq->Qty -= qtyDeq;

        if(0 == pq->Qty)
            pq->Front = pq->Rear = pq->Dtrm -1;
        else
            pq->Front = newFront;

    }else
    {
       return FR_O_VAINLY;
    }

    *pQty = qtyDeq;
    
    if(pq->Lost > 0)
    {
       pq->Lost = 0;
       return  FR_N_LOST;
    }    

    return FR_P;
}



您对本贴的看法:鲜花[0] 臭蛋[0]
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
motalelf
风云使者



UID:384785
注册:2006-3-11
最后登录: 2008-09-06
帖子:431
精华:0

可用积分:202 (白手起家)
信誉积分:105
专家积分:8 (本版:0)
空间积分:0
推广积分:0

状态:...离线...

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


14楼 发表于 2008-5-15 00:33 
我死顶圈棍圈棍C!!!!!



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

__________________________________

三个代表,吾党所宗。
以杜八耻,以进八荣。
咨尔多士,为民先锋。
夙夜匪懈,和谐是从。
   
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
aobai   帅哥 (谎言混合体)
精灵王


CU奥运火炬传递手2008
UID:548313
注册:2007-4-6
最后登录: 2008-09-07
帖子:337
精华:0

可用积分:1081 (家境小康)
信誉积分:105
专家积分:0 (本版:0)
空间积分:810
推广积分:0

状态:...离线...

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


15楼 发表于 2008-5-15 00:48 
路过



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

__________________________________


空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
zx_wing   帅哥 (骑着猪的青蛙)
大天使
学徒



UID:499746
注册:2006-12-4
最后登录: 2008-09-08
帖子:1944
精华:3

可用积分:1632 (家境小康)
信誉积分:100
专家积分:11 (本版:10)
空间积分:0
推广积分:0

来自:成都
状态:...保密...

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


16楼 发表于 2008-5-15 02:04 
佩服LZ认真的工作。
虽然不喜欢那几句狂言,同一了软件、同一了语言、连操作系统都写出来了 ……
不过从LZ贴的代码和图来看,LZ认真的工作了的,所以还是顶一个。



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

__________________________________


C调 ---- C语言
都是最喜欢的
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 converse   帅哥
广告杀手-法王
Stupid is as stupid does.




UID:117516
注册:2003-12-7
最后登录: 2008-09-08
帖子:12173
精华:13

可用积分:4985 (小富即安)
信誉积分:145
专家积分:130 (本版:10)
空间积分:0
推广积分:0

来自:芒果花开的地方
状态:...在线...

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


17楼 发表于 2008-5-15 09:25 


QUOTE:
原帖由 zx_wing 于 2008-5-15 02:04 发表
佩服LZ认真的工作。
虽然不喜欢那几句狂言,同一了软件、同一了语言、连操作系统都写出来了 ……
不过从LZ贴的代码和图来看,LZ认真的工作了的,所以还是顶一个。

不敢苟同,认真工作就能喊口号说大话了?在没有做出实质的东西之前,我持怀疑态度.和以前一样,希望作者拿出一些实质的东西再来谈什么统一.以后不再欢迎类似的帖子在C版发表.
封.



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

__________________________________

唯坚持,得成功.
C++名人Alexandrescu说,"十几岁的少年天才到处都有,三十多岁的优秀设计师凤毛麟角".我做不了十几岁的少年天才,但愿到三十多岁时能成为一个优秀工程师.

卖书: http://bbs.chinaunix.net/thread-1053812-1-1.html
空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘
版主 JohnBull   帅哥
版主-法师



UID:17373
注册:2002-8-27
最后登录: 2008-09-08
帖子:5799
精华:2

可用积分:2159 (小富即安)
信誉积分:100
专家积分:10 (本版:10)
空间积分:0
推广积分:0

来自:北京朝阳
状态:...离线...

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


18楼 发表于 2008-5-15 17:14 
少吹牛,用这个东西写个真东西出来是最有说服力的。



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

__________________________________

关于捐款,本人反对使用道德暴力!

捐了的那是仗义,没捐的也是天理。

空间积分可以换礼品了! | 有奖跟帖:服务器节能,奖50-100元图书 | 致电800-858-2903,了解DELL如何为你量身订制笔记本 | 送2G U盘

首页 » 论坛 » C/C++ »


 


Copyright © 2001-2008 ChinaUnix.net All Rights Reserved     联系我们:

感谢所有关心和支持过ChinaUnix的朋友们    转载本站内容请注明原作者名及出处

京ICP证041476号


清除 Cookies - ChinaUnix - Archiver - WAP - TOP

Processed in 0.138471 second(s), 5 queries , Gzip enabled