ACE_Message_Block类 使用小结

ACE_Message_Block用来封装"网络主机之间需要传输的数据";并能很好的管理动态内存分配。每个ACE_Message_Block对象都包括一个“带有引用计数”的ACE_Da ta_Block指针成员,该成员指向实际的数据。如果多个ACE_Message_Block连接在一起(通过Composite模式),形成单链表,则形成了“复合消息”结构。将多条消息连接起来,形成双链表,则构成ACE_Message_Queue类。

        ACE_Message_Block中有多个获取大小或者长度的函数,容易混淆.下图是根据ACE_Message_Block(实际是ACE_Data_Block)空间的处理状况所绘,能比较清晰的反应出它们的异同.需要注意,为了表现出多样性,下图是wr_ptr(),rd_ptr(),size()都调用过之后的情景.

ACE_Message_Block类 使用小结 - 陈波 - cp7618@yeah的博客


       红色表示是ACE_Message_Block独有的函数, 其余则ACE_Message_Block和ACE_Data_Block均有.
矩形纸上函数的返回值均为指针类型,之下的返回值均为size_t类型.

函数                         说明
length()               有效数据的长度== wr_ptr() – rd_ptr()
size()                     全部可用空间的长度,如果没有size()而变小,则等同capacity()== mark() – base()
space()                 剩余可用空间的长度<= size() - length(),因为不含rd_ptr()移动过的空间== mark() – wr_ptr()
capacity()          最大空间的长度(ACE_Message_Block构造或初始化时所用参数值)== end() – base()
total_length()     复合消息(ACE_Message_Block内单向链 cont())的总长度
total_size()         复合消息(ACE_Message_Block内单向链 cont())的总大小
total_capacity() 复合消息(ACE_Message_Block内单向链 cont())的总空间大小

duplicate()浅拷贝函数,公用一个内部的ACE_Data_Block
ACE_Message_Block::duplicate() 与 ACE_Data_Block.duplicate()的实现是不同的.
ACE_Data_Block::duplicate()简单的只是将自身的reference加+1, 然后返回自身(this)
ACE_Message_Block:duplicate()则将自身copy了一份, 然后将自身的状态值赋给拷贝,注意它们公用同一个data_block.而且ACE_Message_Block::duplicate()支持复合消息,它会检查内部单向链,来依次调用其duplicate().

ACE_Message_Block::clone()深拷贝, 不但拷贝自身,内部的ACE_Data_Block也一并拷贝了,并且支持复合消息.

ACE_Data_Block.size(size_t len)函数, 动态的变化ACE_Data_Block持

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值