jrtplib 源码分析 (一) 辅助类

来源:互联网 发布:淘宝查假冒伪劣处罚 编辑:程序博客网 时间:2024/06/09 05:13

    jrtplib 需要用到 jthread中的文件  jmutex 和 jthread

  

    jthread类包含:

         jmutex : 互斥类 。

        JMutexAutoLock :构造函数实现加锁  虚构函数实现解锁  参数为 jmutex对象。

        jthread : 线程类  抽象类  继承者需实现对 virtual void *Thread() = 0; 的实现  用以实现自己想要的功能。


    jrtplib类:

        rtpdebug:重载了new  

       struct MemoryInfo  //内存申请信息
       {
             void *ptr;            //内存指针
             size_t size;       //内存大小
              int lineno;        //申请时行号
              char *filename;    //文件名称
    
             MemoryInfo *next;
      };


     void *operator new(size_t s,char filename[],int line)   // 用来保存申请内存的信息

     void dodelete(void *p)                                                       //删除内存


     rtprandom : 生成随机数


     rtperrors :错误类型定义


    rtpdefines :常量定义


    rtpconfig : 根据操作系统类型判断包含那个头文件 rtpconfig_win    rtpconfig_unix.h   定义的常量值


      rtptypes :定义int8_t , int16_t , int32_t, int64_t  类型


      rtpmemorymanager:内存管理  申请 释放

     rtpmemoryobject:设置和得到 RTPMemoryManager *memmgr 对象

     注释 :

       本人最近阅读 RTP源代码,对类似以下的语句很不理解
              RTCPPacket *p;
             p = RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket(data,length);

      new的第一个大小参数(类型为size_t) 是编译器自己加上去的。new(a,b) T 变成 new(sizeof(T),a,b) T    所以
            RTPNew(GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket      

    相当于
            new (GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket               

    相当于
            new ( sizeof(RTCPSRPacket), GetMemoryManager(),RTPMEM_TYPE_CLASS_RTCPSRPACKET) RTCPSRPacket


    rtpaddress :网络地址基类 抽象类

   

    rtpipv4address : 继承自 rtpaddress

    rtpipv6address: 继承自 rtpaddress

   

    rtpkeyhashtable:哈希表  模板类

    class HashElement        //哈希元素
    {
    private:
        int hashindex;
        Key key;
        Element element;
    public:
        HashElement *hashprev,*hashnext;
        HashElement *listprev,*listnext;
    };


    HashElement *table[hashsize];  数组指针 二维数组   根据key的索引值 包含HashElement的链表 指针

    HashElement *firsthashelem,*lasthashelem;    数据的链表开始和结束
    HashElement *curhashelem;                            当前项 查找 删除时使用


   GetIndex::GetIndex(class key &k) : 得到索引值 k%8371


    rtptimeutilities:ntp时间类   秒 + 微妙 (1/1000000)


    rtpcollisionlist: 接收地址检测 地址是否存在  超时检测


   rtplibraryversion :库版本号



 



原创粉丝点击