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

📄 shm_dlist.h

📁 实 现 了 一 个 双 向 链 表. 挺 好 用 的.
💻 H
字号:
/*=================================================================** Copyright (c)2006** All rights reserved.**** 文件名称:ipc_dlist.h**** 当前版本:1.1** 作    者:Like** 完成日期:2006-11-24**===================================================================*/#ifndef SHM_DLIST_H#define SHM_DLIST_H#include <stdlib.h>#include <stdio.h>#include "shm_elem.h"class ShmDList;/******************************************************************************** Author:       Like** Class Name:   ShmDListIter** Created Date:  2006-11-24** Description:   Used to go through a ShmDList**** Usage:         See description of ShmDList below******************************************************************************/class ShmDListIter{    typedef ShmDListIter iterator;        friend class ShmDList;    public:    ShmDListIter()         : _node(NULL)    {    }    ShmDListIter(ShmElem* node)        : _node(node)    {    }    ShmDListIter(const iterator& it)        : _node(it._node)    {    }    ShmElem* operator *()    {         return _node;    }    iterator& operator ++ ();        iterator operator ++ (int)    {         iterator    tmp = *this;                 ++*this;                 return tmp;     }    bool operator == (const iterator& it) const    {         return _node == it._node;     }        bool operator != (const iterator& it) const    {         return _node != it._node;     }public:    ShmElem*   _node;};/******************************************************************************** Author:       Like** Class Name:   ShmDList** Created Date:  2006-11-24** Description:   是一个基于共享内存的环状双向链表的实现。** Note:          任何插入ShmDList的节点必须存放在共享内存上,并且和ShmDList**                存放于同一个共享内存。使用ShmMgr可以实现这一目的. **                Please see shm_mgr.h for more details.           **** Usage:**         ** Step 1: ShmMgr     shm_mgr;           创建一个共享内存管理器**         ShmDList   dlist;             创建一个双向链表**         char*      shared_mem = NULL;**         ShmElem*   elem = NULL;**      ** Step 2: shm_mgr.InitShmem(key, 1024); 初始化共享内存管理器**         **         // 为dlist分配一定的共享内存** Step 3: shared_mem = shm_mgr.ShmAllocWithoutLock(ShmDList::BaseSpace());****         // 初始化dlist** Step 4: dlist.Attach(shared_mem, shm_mgr.IsCreated());  ****         // So far dlist can be used** Step 5: elem = (ShmElem*) shm_mgr.ShmAllocWithoutLock(64); **         **         // Insert an elem into list** Step 6: dlish.push_back(elem); // or dlish.push_front(elem); ****         // Scan a dlist** Step 7: ShmDList::iterator it;   ** ** Step 8: for (it = dlist.begin(); it != dlist.end(); it++)**         {**             elem = *it;****             do something here**         }******************************************************************************/typedef struct ShmDListHead{    int         _size;    ShmElem     _listHead;    } ShmDListHead;class ShmDList{       public:    typedef ShmDListIter iterator;         ShmDList()    {        _location = NULL;        _size     = NULL;        _listHead = NULL;    }        ~ShmDList()    {    }    static int BaseSpace();        void Attach(char* mem_addr, int flag = 0);    void Init();    void push_back(ShmElem* node);    void push_front(ShmElem* node);    iterator erase(iterator&);    void     clear();    inline iterator begin()    {                                     return iterator((ShmElem*) MAKE_SHM_PTR(_listHead->_nextOffset));     }        inline iterator end()    {         return iterator(_listHead);     }    unsigned int size() const     {         return *_size;     }               bool empty() const     {         return (*_size == 0);     }private:    /*************************************************************/    // _size points to _size variable of ShmDListHead    // which has been stored in a shared memory    //    // _listHead points to _listHead of ShmDListHead    // which has been stored in a shared memory    /*************************************************************/    char*       _location;    int*        _size;          ShmElem*    _listHead; };#endif

⌨️ 快捷键说明

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