zoukankan      html  css  js  c++  java
  • C++封装的用于存放内存块的双向循环列表

    C++有许多已经封装好的数据结构,但是当数据不是标准数据时,存在很大麻烦,如内存块时。

    直接进入话题吧:

    如题:

    结构头文件

    #include <stdio.h>
    #include <stdlib.h>
    
    #define  uint unsigned int
    
    typedef struct databuf
    {
    	char *Addr ;
    	unsigned int Len ;
    
    	databuf *next;
    	databuf *previous;
    }databuf,*pdatabuf ;
    
    
    class NetData
    {
    public:
    
    	pdatabuf Data ;
    	bool Lock ;
    
    	NetData();
    
    	~NetData();
    
    	void Lockdata();
    	void UnLockdata();
    	void WaitUnLock() ;
        void Entity_entity(pdatabuf Node,char *Addr,uint Len);
        /* first is messy print */
        void Entity_print(pdatabuf Node);
        void PrintList(pdatabuf phead);
        /* Length 1 no data only head */
        int GetLength(pdatabuf phead);
        pdatabuf Before_Null_Node(pdatabuf phead);
        /* Create,return Node add */
        pdatabuf CreateNode(pdatabuf previous,char *Addr,uint Len);
        pdatabuf CreateNode_Head();
        /* Add Node between */
        void AddNode(pdatabuf pNode,pdatabuf pNode2,char *Addr ,uint Len);
        /* Delete next Node */
        bool DeleteNode(pdatabuf pNode);
    
    private:
    
    protected:
    
    };


    结构CPP文件


    NetData::NetData()
    :Lock(0)
    {
    
    }
    NetData::~NetData()
    {
    
    }
    
    void NetData::Lockdata()
    {
    	printf("Locked\n");
    	this->Lock = 1 ;
    }
    void NetData::UnLockdata()
    {
    	printf("UnLocked\n");
    	this->Lock = 0 ;
    }
    void NetData::WaitUnLock()
    {
    	while(this->Lock==1)
    	{
    		usleep(200000);
    	}
    	printf("UnLocked\n");
    }
    void NetData::Entity_entity(pdatabuf Node,char *Addr,uint Len)
    {
    	Node->Addr = Addr ;
    	Node->Len = Len ;
    }
    pdatabuf NetData::CreateNode_Head()
    {
        pdatabuf pNode = (pdatabuf)malloc(sizeof(databuf));
        assert(pNode!=NULL);
    
    
        pNode->next = NULL ;
        pNode->previous = pNode;
        return pNode ;
    }
    /* first is messy print */
    void NetData::Entity_print(pdatabuf Node)
    {
    
    }
    void NetData::PrintList(pdatabuf phead)
    {
        pdatabuf p = phead ;
        while(p!=NULL)
        {
            Entity_print(p);
            p = p->next ;
        }
    }
    /* Length 1 no data only head */
    int NetData::GetLength(pdatabuf phead)
    {
        pdatabuf p = phead ; int Length=0 ;
        while(p!=NULL)
        {
            Length ++ ;
            p = p->next ;
        }
        return Length ;
    }
    pdatabuf NetData::Before_Null_Node(pdatabuf phead)
    {
        pdatabuf p = phead ;
        while(p->next!=NULL)
        {
            p=p->next ;
        }
        return p ;
    }
    /* Create,return Node add */
    pdatabuf NetData::CreateNode(pdatabuf previous,char *Addr ,uint Len)
    {
        pdatabuf pNode = (pdatabuf)malloc(sizeof(databuf));
        assert(pNode!=NULL);
        pNode->next = NULL ;
        pNode->previous = previous ;
        Entity_entity(pNode,Addr,Len);
    
        return pNode ;
    }
    /* Add Node between */
    void NetData::AddNode(pdatabuf pNode,pdatabuf pNode2,char *Addr,uint Len)
    {
        pdatabuf pNew = CreateNode(pNode,Addr,Len);
        pNode->next = pNew ;
        pNew->next = pNode2 ;
        //pNew->previous = pNode ;
    }
    /* Delete next Node */
    bool NetData::DeleteNode(pdatabuf pNode)
    {
        pdatabuf pDel = pNode->next ;
        if(pDel==NULL)
        {
            printf(" No Node to Delete ");
            return 0 ;
        }
        pNode->next = pDel->next ;
        pDel->next->previous = pNode ;
    
        pDel->previous = NULL ;
        pDel->next = NULL ;
        free(pDel->Addr);
        free(pDel);
        return 1 ;
    }
    


    使用此封装好的结构,改变类的名字,或者重新申请即可。




  • 相关阅读:
    junit单元测试
    方法引用
    方法引用表达式(1)
    Stream流的常用方法
    Stream流
    综合案例:文件上传
    tcp通信协议
    python 生成器与迭代器
    Python 序列化与反序列化
    python 文件操作
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3043397.html
Copyright © 2011-2022 走看看