⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shm_dlist.cpp

📁 实 现 了 一 个 双 向 链 表. 挺 好 用 的.
💻 CPP
字号:
/*=================================================================** Copyright (c)2006** All rights reserved.**** 文件名称:ipc_dlist.cpp**** 当前版本:1.1** 作    者:Like** 完成日期:2006-11-24**===================================================================*/#include <stdlib.h>#include <stdio.h>#include "shm_dlist.h"/*****************************************************************// // Based on the current node, get the next node in a dlist // ******************************************************************/ ShmDListIter& ShmDListIter::operator ++ (){       _node = (ShmElem*) MAKE_SHM_PTR(_node->_nextOffset);    return *this;}/*****************************************************************// // Calculate the size of memory which a ShmDList needed.// ******************************************************************/     int ShmDList::BaseSpace(){    return sizeof(ShmDListHead);}/*****************************************************************// // Attach to a shared memory// ******************************************************************/ void ShmDList::Attach(char* mem_addr, int flag){    // ------------------------------------------------------------    //  size (int) | list head (including prevOffset and nextOffset)    // ------------------------------------------------------------    ShmDListHead*   list_head = NULL;        _location = mem_addr;        list_head = (ShmDListHead*) _location;        _size     = &(list_head->_size);    _listHead = &(list_head->_listHead);        if (flag == 1)    {        Init();    } }  /*****************************************************************// // 将一个空链表自环。这个函数只能被执行一次。// ******************************************************************/   void ShmDList::Init(){    int list_off = 0;                list_off = MAKE_SHM_OFF(_listHead);        _listHead->_nextOffset = list_off;    _listHead->_prevOffset = list_off;    *_size = 0;}/*****************************************************************// // 将一个节点从链表的“头”插入一个节点// ******************************************************************/ void ShmDList::push_back(ShmElem* node){    ShmElem*    tail_node = NULL;            node->_nextOffset = MAKE_SHM_OFF(_listHead);                          node->_prevOffset = _listHead->_prevOffset;    tail_node = (ShmElem*) MAKE_SHM_PTR(_listHead->_prevOffset);    _listHead->_prevOffset = tail_node->_nextOffset = MAKE_SHM_OFF(node);                  (*_size)++;}/*****************************************************************// // 将一个节点从链表的“尾”插入一个节点// ******************************************************************/ void ShmDList::push_front(ShmElem* node){    ShmElem*    next_node = NULL;    node->_prevOffset = MAKE_SHM_OFF(_listHead);            node->_nextOffset = _listHead->_nextOffset;                          next_node = (ShmElem*) MAKE_SHM_PTR(_listHead->_nextOffset);    _listHead->_nextOffset = next_node->_prevOffset = MAKE_SHM_OFF(node);                    (*_size)++;}/*****************************************************************// // Delete a node from ShmDList// ******************************************************************/ ShmDListIter ShmDList::erase(ShmDListIter& it){    ShmElem*    prev_node = (ShmElem*) MAKE_SHM_PTR(it._node->_prevOffset);    ShmElem*    next_node = (ShmElem*) MAKE_SHM_PTR(it._node->_nextOffset);        prev_node->_nextOffset = it._node->_nextOffset;    next_node->_prevOffset = it._node->_prevOffset;     (*_size)--;        return iterator(next_node); }/*****************************************************************// // As its name, it is used to delete all the nodes from a ShmDList// ******************************************************************/ void ShmDList::clear(){    for (iterator it = begin(); it != end(); )    {        it = erase(it);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -