亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shm_hash.cpp

?? hash表和單向鏈表的實現代碼,相當實用.
?? CPP
字號:
/*=================================================================** Copyright (c)2006,** All rights reserved.**** 文件名稱:ipc_hash.cpp**** 當前版本:1.1** 作    者:Like** 完成日期:2006-11-24**===================================================================*/#include <stdlib.h>#include <stdio.h>#include "shm_hash.h" /* int HashFunc(char *key, int len){    char* end = key + len;    int  hash = 0;        for (hash = 0; key < end; key++)    {        hash *= 16777619;        hash ^= (int) *(unsigned char*) key;    }        hash &= 134217727;    return (hash);} */ShmHashIter& ShmHashIter::operator ++ (){           Node*       node   = (Node*) MAKE_SHM_PTR(_nodeOffset);    Bucket*     bucket = (Bucket*) MAKE_SHM_PTR(_bucketOffset);        if (node->_nextOffset == MAKE_SHM_OFF(&(bucket->_nodeList)))    {        _bucketOffset = bucket->_bucketList._nextOffset;        bucket        = (Bucket*) MAKE_SHM_PTR(_bucketOffset);        _nodeOffset   = bucket->_nodeList._nextOffset;        return *this;    }    else    {           _nodeOffset  = node->_nextOffset;        return *this;    }}void ShmHash::Attach(char* mem_addr, int is_created){        // ------------------------------------------------------------    //  magic number | elem_size | size | bucket list | bucket entries.    // ------------------------------------------------------------    ShmHashHead*    hash_head = NULL;        _location       = mem_addr;    hash_head       = (ShmHashHead*) _location;                        _magicNumberPtr = &(hash_head->_magicNumber);    _elemSizePtr    = &(hash_head->_elemSize);    _size           = &(hash_head->_size);    _listLocation   = &(hash_head->_buffList);        _bucketList     = &(hash_head->_bucketList);    _bucketEntries  = &(hash_head->_firstEntry);       _nodeBuffList.Attach((char*) _listLocation, is_created);        if (is_created == 1)    {        Init();    }    else    {    	printf("Attached, magic = %d, elem size = %d, size = %d\n",    		*_magicNumberPtr, *_elemSizePtr, *_size);    }}void ShmHash::Init(){    int     i        = 0;    int     list_off = 0;    int     node_off = 0;        *_magicNumberPtr = _magicNumber;    *_elemSizePtr    = _elemSize;	printf("Created, magic = %d, elem size = %d, size = %d\n",		*_magicNumberPtr, *_elemSizePtr, *_size);        for (i = 0; i < *_magicNumberPtr; i++)    {        LoopBucket(&_bucketEntries[i]);    }        list_off = MAKE_SHM_OFF(_bucketList);    node_off = MAKE_SHM_OFF(&(_bucketList->_nodeList));        _bucketList->_bucketList._nextOffset =         _bucketList->_bucketList._prevOffset = list_off;        _bucketList->_nodeList._nextOffset =         _bucketList->_nodeList._prevOffset = node_off;      }void ShmHash::LoopBucket(ShmHashBucket* bucket){    ShmOffset   list_off = MAKE_SHM_OFF(&bucket->_bucketList);    ShmOffset   node_off = MAKE_SHM_OFF(&bucket->_nodeList);        bucket->_bucketList._prevOffset = list_off;    bucket->_bucketList._prevOffset = list_off;              bucket->_nodeList._prevOffset   = node_off;    bucket->_nodeList._nextOffset   = node_off;           }int ShmHash::BaseSpace(const int magic){    return sizeof(ShmHashHead) + sizeof(ShmHashBucket) * (magic - 1);}    ShmHashIter ShmHash::search(int k, int& flag){       int         offset    = 0;      Bucket*     bucket    = NULL;    Node*       head_node = NULL;    Node*       tail_node = NULL;    Node*       node      = NULL;            offset = k % (*_magicNumberPtr);    bucket = &_bucketEntries[offset];    head_node = &(bucket->_nodeList);    // Go through the node list        for (node = (Node*) MAKE_SHM_PTR (head_node->_nextOffset);         node != head_node;         node = (Node*) MAKE_SHM_PTR (node->_nextOffset))    {                if (_matchCallback(node))        {            flag = HASH_FOUND;            return iterator(MAKE_SHM_OFF(node), MAKE_SHM_OFF(bucket));        }            }    if (flag == HASH_FIND)    {        flag = HASH_NOT_FOUND;        return end();    }        if (head_node->_nextOffset == MAKE_SHM_OFF(head_node))    {        LinkBucketToList(bucket);    }        if (_nodeBuffList.size() > 0)    {        node = (Node*) _nodeBuffList.pop_front();         }    else    {        node = (Node*) _allocCallback(*_elemSizePtr);    }        offset = MAKE_SHM_OFF(node);    // Insert this new node into node list from tail        node->_nextOffset = MAKE_SHM_OFF(head_node);                          node->_prevOffset = head_node->_prevOffset;    tail_node = (Node*) MAKE_SHM_PTR(head_node->_prevOffset);    head_node->_prevOffset = offset;            tail_node->_nextOffset = offset;            flag = HASH_NEW;        return iterator(offset, MAKE_SHM_OFF(bucket));  }ShmHashIter ShmHash::erase(ShmHashIter& it){    Bucket*     bucket    = (Bucket*) MAKE_SHM_PTR(it._bucketOffset);    Node*       head_node = &(bucket->_nodeList);    Node*       node      = (Node*) MAKE_SHM_PTR(it._nodeOffset);    Node*       prev_node = (Node*) MAKE_SHM_PTR(node->_prevOffset);    Node*       next_node = (Node*) MAKE_SHM_PTR(node->_nextOffset);        prev_node->_nextOffset = node->_nextOffset;    next_node->_prevOffset = node->_prevOffset;     /*     *  If this bucket becomes empty, remove it from bucket list     */    if (head_node->_nextOffset == MAKE_SHM_OFF(head_node))    {                    bucket    = RemoveBucketFromList(bucket);               head_node = &(bucket->_nodeList);        if (_freeCallback != NULL)        {            _freeCallback(node);        }        else        {            _nodeBuffList.push_back((ShmOListElem*) node);        }                return iterator(head_node->_nextOffset, MAKE_SHM_OFF(bucket));    }    /*     *  If the removed node is the last one of this bucket,      *  return the first node of next bucket.     */        else if (next_node == head_node)    {                bucket    = (Bucket*) MAKE_SHM_PTR(bucket->_bucketList._nextOffset);        head_node = &(bucket->_nodeList);                 _freeCallback(node);        return iterator(head_node->_nextOffset, MAKE_SHM_OFF(bucket));    }                    _freeCallback(node);    return iterator(MAKE_SHM_OFF(next_node), MAKE_SHM_OFF(bucket));}void ShmHash::LinkBucketToList(ShmHashBucket* bucket){    Bucket*     prev_bucket = NULL;    Bucket*     temp_bucket = NULL;        // Insert this node into bucket list from tail        bucket->_bucketList._nextOffset = MAKE_SHM_OFF(_bucketList);    bucket->_bucketList._prevOffset = _bucketList->_bucketList._prevOffset;            prev_bucket = (Bucket*) MAKE_SHM_PTR(_bucketList->_bucketList._prevOffset);            _bucketList->_bucketList._prevOffset =         prev_bucket->_bucketList._nextOffset = MAKE_SHM_OFF(bucket);    temp_bucket = _bucketList;}ShmHashBucket* ShmHash::RemoveBucketFromList(ShmHashBucket* bucket){    Bucket*     prev_list = (Bucket*) MAKE_SHM_PTR(bucket->_bucketList._prevOffset);    Bucket*     next_list = (Bucket*) MAKE_SHM_PTR(bucket->_bucketList._nextOffset);        prev_list->_bucketList._nextOffset = bucket->_bucketList._nextOffset;    next_list->_bucketList._prevOffset = bucket->_bucketList._prevOffset;        bucket->_bucketList._nextOffset    = bucket->_bucketList._prevOffset = 0;    return next_list;}void ShmHash::clear(){    for (iterator it = begin(); it != end(); )    {        it = erase(it);    }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲妇熟xx妇色黄| 视频一区二区三区中文字幕| 日韩一级成人av| 在线视频亚洲一区| 欧洲精品中文字幕| 欧美一区二区私人影院日本| 在线播放视频一区| 精品三级在线观看| 日本一区二区三区四区在线视频 | 色婷婷av久久久久久久| 91影院在线观看| 欧美天堂一区二区三区| 欧美色倩网站大全免费| 欧美一区永久视频免费观看| 日韩免费观看高清完整版在线观看| 欧美刺激午夜性久久久久久久 | 91免费视频观看| 欧美在线免费观看亚洲| 欧美高清视频一二三区| 欧美成人伊人久久综合网| 国产午夜精品久久| 亚洲一区二区三区四区中文字幕 | 久久99国内精品| 国产九色精品成人porny | 日韩欧美一区中文| 中文文精品字幕一区二区| 亚洲免费资源在线播放| 欧美aⅴ一区二区三区视频| 国产麻豆欧美日韩一区| 色哟哟一区二区在线观看| 91精品国产入口| 中文字幕第一页久久| 亚洲黄一区二区三区| 精品一区在线看| 91麻豆免费看片| 欧美精品一区二区不卡 | 日产国产欧美视频一区精品| 国产麻豆成人传媒免费观看| 欧日韩精品视频| 国产网站一区二区| 午夜不卡av在线| 99re在线精品| 久久精品夜色噜噜亚洲a∨| 亚洲成人免费在线观看| 成人免费视频网站在线观看| 日韩视频一区二区| 午夜精品视频在线观看| 91亚洲大成网污www| 亚洲精品一区二区三区在线观看| 亚洲伊人色欲综合网| 国产乱码精品一区二区三区av| 欧美性感一区二区三区| 国产欧美一区二区精品忘忧草| 丝袜美腿亚洲色图| 色婷婷久久久亚洲一区二区三区 | 欧美一区二区在线观看| 亚洲天堂精品在线观看| 国产一区二区三区黄视频| 91麻豆精品国产自产在线观看一区 | 99久久久国产精品免费蜜臀| 精品国产乱码久久久久久免费| 亚洲成在人线在线播放| 在线国产亚洲欧美| 亚洲精品中文字幕乱码三区| 99久久国产综合精品麻豆| 国产精品福利一区| 99久久99久久精品免费观看| 日本一区二区三区在线观看| 国产一区啦啦啦在线观看| 精品国产91洋老外米糕| 老司机精品视频在线| 精品日韩成人av| 韩国视频一区二区| 国产亚洲一区二区三区| 成人三级在线视频| 国产精品久久久久久久久免费相片 | 精品一区二区三区不卡| 精品乱人伦小说| 久久国产精品区| 久久久久久久久99精品| 高清日韩电视剧大全免费| 国产精品美女久久久久久久久久久 | 成人在线一区二区三区| 国产精品免费aⅴ片在线观看| 成人毛片老司机大片| 17c精品麻豆一区二区免费| 99久久精品免费精品国产| 一二三区精品视频| 69久久99精品久久久久婷婷| 另类中文字幕网| 国产精品沙发午睡系列990531| 成人午夜精品一区二区三区| 中文字幕一区二区三区在线不卡| 色婷婷综合激情| 蜜臀av在线播放一区二区三区| 欧美精品一区二区三区蜜桃 | 午夜精品一区在线观看| 欧美大度的电影原声| 成人午夜大片免费观看| 亚洲愉拍自拍另类高清精品| 欧美一区二区三区日韩| 成人av免费网站| 日本va欧美va精品发布| 国产色综合一区| 在线国产电影不卡| 国产伦精品一区二区三区免费| 国产精品传媒入口麻豆| 欧美精品xxxxbbbb| 成人视屏免费看| 免费在线观看不卡| 亚洲激情五月婷婷| 久久婷婷色综合| 欧美性感一类影片在线播放| 国产麻豆视频一区二区| 亚洲国产日产av| 国产精品久久久99| 欧美成人官网二区| 在线视频综合导航| 岛国一区二区在线观看| 麻豆精品视频在线| 亚洲一区二区三区在线| 国产精品热久久久久夜色精品三区| 欧美人牲a欧美精品| 成人免费看黄yyy456| 乱一区二区av| 日韩在线一区二区| 一区二区三区蜜桃网| 国产精品天干天干在线综合| 欧美电影免费观看高清完整版| 91久久香蕉国产日韩欧美9色| 国产大陆精品国产| 精品亚洲成av人在线观看| 日韩精品久久理论片| 亚洲一区免费视频| 亚洲人成小说网站色在线| 国产日产欧产精品推荐色| 日韩无一区二区| 91精品国产综合久久精品麻豆 | 亚洲色图欧美激情| 欧美经典一区二区三区| 精品福利一二区| 精品国产一区二区三区四区四| 懂色av噜噜一区二区三区av| 亚洲一区自拍偷拍| 一区二区三区四区av| 亚洲欧美一区二区三区久本道91| 国产精品嫩草影院com| 久久精品在这里| 国产午夜一区二区三区| 2014亚洲片线观看视频免费| 久久这里只有精品6| 国产午夜精品一区二区三区四区| 精品久久久久久久久久久久包黑料| 91精品国产福利在线观看| 3d成人h动漫网站入口| 欧美一二三区精品| 精品久久久久久久久久久院品网 | 欧美mv日韩mv国产网站app| 日韩天堂在线观看| 欧美成人性福生活免费看| 日韩视频在线观看一区二区| 精品粉嫩aⅴ一区二区三区四区| 2020国产成人综合网| 中文字幕不卡一区| 亚洲日本在线a| 亚洲成a人片综合在线| 美女mm1313爽爽久久久蜜臀| 国产一区久久久| 91亚洲国产成人精品一区二区三| 色综合天天综合网天天看片| 欧美日韩一区小说| 日韩精品在线看片z| 国产午夜精品一区二区| 夜夜爽夜夜爽精品视频| 美女视频一区在线观看| 成人激情av网| 欧美日韩一区二区三区免费看| 日韩天堂在线观看| 中文字幕在线不卡视频| 亚洲aaa精品| 国产99久久久久| 欧美自拍偷拍午夜视频| 精品国产伦一区二区三区观看体验 | 久久99久久精品| 成人av综合一区| 欧美三级电影在线观看| 久久天堂av综合合色蜜桃网| 一区二区三区四区五区视频在线观看 | 欧美tickling挠脚心丨vk| 亚洲欧美自拍偷拍色图| 日韩制服丝袜先锋影音| 成人av高清在线| 欧美一区二区三区喷汁尤物| 国产精品女主播av| 久久国产福利国产秒拍| 欧美自拍丝袜亚洲| 一区二区三区四区激情| 国产真实乱偷精品视频免| 欧美日韩在线播放三区| ...av二区三区久久精品|