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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ixethdbhashtable.c

?? u-boot1.3.0的原碼,從配了網(wǎng)絡(luò)驅(qū)動(dòng)和FLASH的驅(qū)動(dòng),并該用ESC竟如
?? C
?? 第 1 頁 / 共 2 頁
字號:
 */IxEthDBStatus ixEthDBPeekHashEntry(HashTable *hashTable, int keyType, void *reference){    UINT32 hashValue;    HashNode *node;    hashValue = hashTable->entryHashFunction(reference);    node      = hashTable->hashBuckets[hashValue % hashTable->numBuckets];    while (node != NULL)    {        TRY_LOCK(&node->lock);        if (hashTable->matchFunctions[keyType](reference, node->data))        {            UNLOCK(&node->lock);            return IX_ETH_DB_SUCCESS;        }        else        {            UNLOCK(&node->lock);            node = node->next;        }    }    /* not found */    return IX_ETH_DB_NO_SUCH_ADDR;}/** * @brief releases the write access lock * * @pre the node should have been obtained via @ref ixEthDBSearchHashEntry() * * @see ixEthDBSearchHashEntry() * * @internal */void ixEthDBReleaseHashNode(HashNode *node){    UNLOCK(&node->lock);}/** * @brief initializes a hash iterator * * @param hashTable hash table to be iterated * @param iterator iterator object * * If the initialization is successful the iterator will point to the * first hash table record (if any). * Testing if the iterator has not passed the end of the table should be * done using the IS_ITERATOR_VALID(iteratorPtr) macro. * An implicit write access lock is granted on the entry pointed by the iterator. * The access is automatically revoked when the iterator is incremented. * If the caller decides to terminate the iteration before the end of the table is * passed then the manual access release method, @ref ixEthDBReleaseHashIterator, * must be called. * * @see ixEthDBReleaseHashIterator() * * @retval IX_ETH_DB_SUCCESS if initialization was successful and the iterator points * to the first valid table node * @retval IX_ETH_DB_FAIL if the table is empty * @retval IX_ETH_DB_BUSY if a locking failure has occured, in which case the caller * should retry * * @warning do not use ixEthDBReleaseHashNode() on entries pointed by the iterator, as this * might place the database in a permanent invalid lock state * * @internal */IxEthDBStatus ixEthDBInitHashIterator(HashTable *hashTable, HashIterator *iterator){    iterator->bucketIndex  = 0;    iterator->node         = NULL;    iterator->previousNode = NULL;    return ixEthDBIncrementHashIterator(hashTable, iterator);}/** * @brief releases the write access locks of the iterator nodes * * @warning use of this function is required only when the caller terminates an iteration * before reaching the end of the table * * @see ixEthDBInitHashIterator() * @see ixEthDBIncrementHashIterator() * * @param iterator iterator whose node(s) should be unlocked * * @internal */void ixEthDBReleaseHashIterator(HashIterator *iterator){    if (iterator->previousNode != NULL)    {        UNLOCK(&iterator->previousNode->lock);    }    if (iterator->node != NULL)    {        UNLOCK(&iterator->node->lock);    }}/** * @brief incremenents an iterator so that it points to the next valid entry of the table * (if any) * * @param hashTable hash table to iterate * @param iterator iterator object * * @pre the iterator object must be initialized using @ref ixEthDBInitHashIterator() * * If the increment operation is successful the iterator will point to the * next hash table record (if any). * Testing if the iterator has not passed the end of the table should be * done using the IS_ITERATOR_VALID(iteratorPtr) macro. * An implicit write access lock is granted on the entry pointed by the iterator. * The access is automatically revoked when the iterator is re-incremented. * If the caller decides to terminate the iteration before the end of the table is * passed then the manual access release method, @ref ixEthDBReleaseHashIterator, * must be called. * Is is guaranteed that no other thread can remove or change the iterated entry until * the iterator is incremented successfully. * * @see ixEthDBReleaseHashIterator() * * @retval IX_ETH_DB_SUCCESS if the operation was successful and the iterator points * to the next valid table node * @retval IX_ETH_DB_FAIL if the iterator has passed the end of the table * @retval IX_ETH_DB_BUSY if a locking failure has occured, in which case the caller * should retry * * @warning do not use ixEthDBReleaseHashNode() on entries pointed by the iterator, as this * might place the database in a permanent invalid lock state * * @internal */IxEthDBStatus ixEthDBIncrementHashIterator(HashTable *hashTable, HashIterator *iterator){    /* unless iterator is just initialized... */    if (iterator->node != NULL)    {        /* try next in chain */        if (iterator->node->next != NULL)        {            TRY_LOCK(&iterator->node->next->lock);            if (iterator->previousNode != NULL)            {                UNLOCK(&iterator->previousNode->lock);            }            iterator->previousNode = iterator->node;            iterator->node         = iterator->node->next;            return IX_ETH_DB_SUCCESS;        }        else        {            /* last in chain, prepare for next bucket */            iterator->bucketIndex++;        }    }   /* try next used bucket */    for (; iterator->bucketIndex < hashTable->numBuckets ; iterator->bucketIndex++)    {        HashNode **nodePtr = &(hashTable->hashBuckets[iterator->bucketIndex]);        HashNode *node = *nodePtr;#if (CPU!=SIMSPARCSOLARIS) && !defined (__wince)        if (((iterator->bucketIndex & IX_ETHDB_BUCKET_INDEX_MASK) == 0) &&            (iterator->bucketIndex < (hashTable->numBuckets - IX_ETHDB_BUCKETPTR_AHEAD)))        {            /* preload next cache line (2 cache line ahead) */            nodePtr += IX_ETHDB_BUCKETPTR_AHEAD;            __asm__ ("pld [%0];\n": : "r" (nodePtr));        }#endif        if (node != NULL)        {            TRY_LOCK(&node->lock);            /* unlock last one or two nodes in the previous chain */            if (iterator->node != NULL)            {                UNLOCK(&iterator->node->lock);                if (iterator->previousNode != NULL)                {                    UNLOCK(&iterator->previousNode->lock);                }            }                        /* redirect iterator */            iterator->previousNode = NULL;            iterator->node         = node;            return IX_ETH_DB_SUCCESS;        }    }    /* could not advance iterator */    if (iterator->node != NULL)    {        UNLOCK(&iterator->node->lock);        if (iterator->previousNode != NULL)        {            UNLOCK(&iterator->previousNode->lock);        }        iterator->node = NULL;    }    return IX_ETH_DB_END;}/** * @brief removes an entry pointed by an iterator * * @param hashTable iterated hash table * @param iterator iterator object * * Removes the entry currently pointed by the iterator and repositions the iterator * on the next valid entry (if any). Handles locking issues automatically and * implicitely grants write access lock to the new pointed entry. * Failures due to concurrent threads having write access locks in the same region * preserve the state of the database and the iterator object, leaving the caller * free to retry without loss of access. It is guaranteed that only the thread owning * the iterator can remove the object pointed by the iterator. * * @retval IX_ETH_DB_SUCCESS if removal has succeeded * @retval IX_ETH_DB_BUSY if a locking failure has occured, in which case the caller * should retry * * @internal */IxEthDBStatus ixEthDBRemoveEntryAtHashIterator(HashTable *hashTable, HashIterator *iterator){    HashIterator nextIteratorPos;    LockStack locks;    INIT_STACK(&locks);    /* set initial bucket index for next position */    nextIteratorPos.bucketIndex = iterator->bucketIndex;    /* compute iterator position before removing anything and lock ahead */    if (iterator->node->next != NULL)    {        PUSH_LOCK(&locks, &iterator->node->next->lock);        /* reposition on the next node in the chain */        nextIteratorPos.node         = iterator->node->next;        nextIteratorPos.previousNode = iterator->previousNode;    }    else    {        /* try next chain - don't know yet if we'll find anything */        nextIteratorPos.node = NULL;        /* if we find something it's a chain head */        nextIteratorPos.previousNode = NULL;        /* browse up in the buckets to find a non-null chain */        while (++nextIteratorPos.bucketIndex < hashTable->numBuckets)        {            nextIteratorPos.node = hashTable->hashBuckets[nextIteratorPos.bucketIndex];            if (nextIteratorPos.node != NULL)            {                /* found a non-empty chain, try to lock head */                PUSH_LOCK(&locks, &nextIteratorPos.node->lock);                break;            }        }    }    /* restore links over the to-be-deleted item */    if (iterator->previousNode == NULL)    {        /* first in chain, lock bucket */        PUSH_LOCK(&locks, &hashTable->bucketLocks[iterator->bucketIndex]);        hashTable->hashBuckets[iterator->bucketIndex] = iterator->node->next;        POP_LOCK(&locks);    }    else    {        /* relink */        iterator->previousNode->next = iterator->node->next;        /* unlock last remaining node in current chain when moving between chains */        if (iterator->node->next == NULL)        {            UNLOCK(&iterator->previousNode->lock);        }    }    /* delete entry */    hashTable->freeFunction(iterator->node->data);    ixEthDBFreeHashNode(iterator->node);    /* reposition iterator */    *iterator = nextIteratorPos;    return IX_ETH_DB_SUCCESS;}/** * @} */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
毛片av中文字幕一区二区| 高清shemale亚洲人妖| 韩国一区二区三区| 日本中文字幕一区二区视频 | 亚洲午夜久久久久久久久电影院| 欧美极品少妇xxxxⅹ高跟鞋| 亚洲成年人影院| 蜜臀久久久久久久| 色婷婷av一区二区三区软件 | 国产高清久久久| 4hu四虎永久在线影院成人| 亚洲天天做日日做天天谢日日欢| 自拍偷拍国产精品| 国产成人午夜99999| 不卡视频在线看| 久久精品欧美一区二区三区不卡 | 肉肉av福利一精品导航| 91啪在线观看| 国产精品免费视频观看| 国产精品一区在线观看乱码| 欧美成人精品福利| 久久久久久免费网| 国内精品伊人久久久久影院对白| 国产成人啪免费观看软件 | 久久精品人人做| 国内精品伊人久久久久影院对白| 大尺度一区二区| 国产丝袜在线精品| 一级特黄大欧美久久久| 色婷婷狠狠综合| 精品国产乱码久久久久久牛牛| 国产精品欧美一区喷水| 国产精品99久久久久久有的能看 | 91麻豆文化传媒在线观看| 国产精品嫩草影院com| 国产一区高清在线| 久久美女高清视频| 国产91丝袜在线播放| 久久中文娱乐网| 国模娜娜一区二区三区| 91国在线观看| 亚洲大片免费看| 欧美浪妇xxxx高跟鞋交| 奇米色一区二区三区四区| 欧美一区二区三区免费大片| 日韩电影在线一区二区三区| 91精品国产综合久久精品麻豆| 国产精品理伦片| 蜜桃久久av一区| xvideos.蜜桃一区二区| 成人一级片在线观看| 中国av一区二区三区| hitomi一区二区三区精品| 最新高清无码专区| 欧美图片一区二区三区| 美国十次综合导航| 久久久电影一区二区三区| 成人高清免费观看| 亚洲精品视频观看| 欧美日韩精品综合在线| 久久精品国产999大香线蕉| 国产女同性恋一区二区| 成人黄色免费短视频| 久久久久久亚洲综合| 一本大道久久a久久精品综合| 国产亚洲精品久| 色综合久久99| 日本欧美大码aⅴ在线播放| 一本色道久久加勒比精品| 免费成人av在线| 久久久久久黄色| 在线观看视频一区二区| 麻豆精品国产传媒mv男同 | 成人动漫一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 成人网男人的天堂| 日韩精品五月天| 欧美浪妇xxxx高跟鞋交| 午夜国产精品一区| 欧美老女人在线| 99久久99久久精品免费观看| 视频一区中文字幕国产| 国产欧美综合在线| 欧美日韩成人在线| 成人av免费在线观看| 国产精品美女久久久久av爽李琼| 国产.欧美.日韩| 欧美aa在线视频| 亚洲视频一二三区| www激情久久| 欧美午夜免费电影| 福利电影一区二区三区| 秋霞国产午夜精品免费视频| 亚洲私人黄色宅男| 在线观看一区二区视频| 成人亚洲一区二区一| 日av在线不卡| 亚洲国产婷婷综合在线精品| 中文乱码免费一区二区| 色综合久久综合| 成人免费毛片app| 国产中文字幕精品| 青青草91视频| 日韩专区一卡二卡| 洋洋成人永久网站入口| 国产精品毛片无遮挡高清| 99精品热视频| 成人高清av在线| 国产精品一区二区久久不卡| 秋霞影院一区二区| 国产精品丝袜黑色高跟| 精品久久人人做人人爰| 99精品欧美一区二区蜜桃免费| 亚洲超碰97人人做人人爱| 久久综合九色综合97婷婷女人 | 欧美第一区第二区| 在线精品亚洲一区二区不卡| 丝瓜av网站精品一区二区| 亚洲永久免费视频| 亚洲永久免费av| 亚洲图片欧美视频| 伊人婷婷欧美激情| 亚洲视频在线观看一区| 欧美视频在线播放| 欧美精品精品一区| 91精品婷婷国产综合久久性色| 国产a区久久久| 成人午夜看片网址| 99国产精品一区| av中文字幕不卡| 99re6这里只有精品视频在线观看| 图片区小说区区亚洲影院| 午夜av区久久| 美女爽到高潮91| 国产一区二区网址| 夜夜爽夜夜爽精品视频| 亚洲乱码精品一二三四区日韩在线| 欧美电视剧在线看免费| 久久久久久久久蜜桃| 欧美激情中文字幕一区二区| 欧美韩国日本不卡| 国产精品成人免费精品自在线观看| 日韩一二在线观看| 国产亚洲精品免费| 成人免费小视频| 亚洲综合成人在线视频| 天堂精品中文字幕在线| 久久国产尿小便嘘嘘尿| 国产成人综合精品三级| 久久66热re国产| av中文字幕不卡| 3d成人h动漫网站入口| 在线亚洲一区二区| 成人爱爱电影网址| 欧美军同video69gay| 久久久国产午夜精品| 日韩欧美亚洲一区二区| 日韩一区二区中文字幕| 国产精品久久久久久久久久久免费看 | 欧美午夜电影一区| 91精品国产综合久久小美女| 久久久久久免费毛片精品| 国产精品久久久久久久久免费桃花 | 国产精品国产a| 亚洲电影中文字幕在线观看| 亚洲欧美精品午睡沙发| 男人的天堂久久精品| 成人18视频日本| 日韩一区二区免费电影| 欧美一区二区三区精品| 国产精品人成在线观看免费| 中文字幕av一区二区三区免费看 | 中文字幕在线一区| 日本一区二区三区四区在线视频| 久久久久久久久久久久久夜| 精品少妇一区二区三区免费观看 | 国产成人亚洲综合色影视| 国产精品一二三区| 欧美日韩日日骚| 国产精品免费看片| 青娱乐精品视频| 精品一区二区三区日韩| 色偷偷88欧美精品久久久| wwwwww.欧美系列| 日韩主播视频在线| www.成人网.com| ww久久中文字幕| 欧美aaaaa成人免费观看视频| 老司机免费视频一区二区三区| 狠狠色综合日日| 欧美群妇大交群中文字幕| 欧美一级片在线观看| 一区二区免费视频| 成人18视频日本| 国产无人区一区二区三区| 18成人在线观看| 国产成人小视频| 久久久国产精品午夜一区ai换脸| 亚洲三级小视频| 99久久夜色精品国产网站|