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 ;

}


 

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




 

你可能感兴趣的:(C++)