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

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

?? hust_hash.c

?? 實(shí)現(xiàn)基于ip2022的MPEG2 TS的IP組播接收
?? C
字號(hào):
/*------------------------------------------------------------------------- * hash.c - htnew, htreaderbegin, htreaderend, htwriterbegin, htwriterend, * htget, htgetent, htdel, htadd, hashstring, hashunsignedint, htcount, * htenum, htdestroy, unsignedinteq *------------------------------------------------------------------------- */#include <ipOS.h>#include <ipHAL.h>#include <ipStack.h>#include <ipEthernet.h>#include "hust_rtp.h"#include "hust_rtplibcommon.h"#include "hust_rtcp.h"#include "hust_event.h"#include "hust_hash.h"#include "hust_linux.h"////#include <stdio.h>///#include "hust_rtp.h"///#include "hust_hash.h"/////#include <stdlib.h>/////#include <strings.h>/*------------------------------------------------------------------------ * htnew - create and return pointer to a new hashtable  *------------------------------------------------------------------------ */struct ht *htnew(int size, int(* hashfcn)(unsigned long int, int), int(* cmpfcn)(unsigned long int, unsigned long int), void(* destroykeyfcn)(unsigned long int), void(* destroyobjectfcn)(void *)){	struct ht		*ht;  	ht = (struct ht *) heap_alloc(sizeof(struct ht));	if (ht == NULL) 		return NULL;	/*pthread_mutex_init(&ht->ht_writepend, NULL);	pthread_mutex_init(&ht->ht_readblk, NULL);	pthread_mutex_init(&ht->ht_writeblk, NULL);	pthread_mutex_init(&ht->ht_rdcntmutex, NULL);	pthread_mutex_init(&ht->ht_wrcntmutex, NULL);*/	ht->ht_readcnt = 0;	ht->ht_writecnt = 0;	ht->ht_entries = (struct htent **) heap_alloc(sizeof(struct htent *) * size);	ht->ht_count = 0;	ht->ht_hashfcn = hashfcn;	ht->ht_cmpfcn = cmpfcn;	ht->ht_destroykeyfcn = destroykeyfcn;	ht->ht_destroyobjectfcn = destroyobjectfcn;	if (ht->ht_entries == NULL) {		heap_free(ht);		return NULL;	}	memset((char *)ht->ht_entries,0, size * sizeof(struct htent *));	ht->ht_size = size;  	return ht;}//////新建一個(gè)哈希表,并返回該表的指針。在初始化一個(gè)session時(shí)被調(diào)用。/*------------------------------------------------------------------------ * htreaderbegin - to be called before reader access for locking *------------------------------------------------------------------------ */voidhtreaderbegin(struct ht *ht){	/*pthread_mutex_lock(&ht->ht_writepend);	pthread_mutex_lock(&ht->ht_readblk);	pthread_mutex_lock(&ht->ht_rdcntmutex);*/  	/*if ((++(ht->ht_readcnt)) == 1) {		pthread_mutex_lock(&ht->ht_writeblk);	}	pthread_mutex_unlock(&ht->ht_rdcntmutex);	pthread_mutex_unlock(&ht->ht_readblk);	pthread_mutex_unlock(&ht->ht_writepend);*/}/////*------------------------------------------------------------------------ * htreaderend - to be called after reader access for locking *------------------------------------------------------------------------ */voidhtreaderend(struct ht *ht){	/*pthread_mutex_lock(&ht->ht_rdcntmutex);	if (--ht->ht_readcnt == 0) {		pthread_mutex_unlock(&ht->ht_writeblk);	}	pthread_mutex_unlock(&ht->ht_rdcntmutex);*/}/*------------------------------------------------------------------------ * htwriterbegin - to be called before writer access for locking *------------------------------------------------------------------------ */voidhtwriterbegin(struct ht *ht){	/*pthread_mutex_lock(&ht->ht_wrcntmutex);	if ((++(ht->ht_writecnt)) == 1)		pthread_mutex_lock(&ht->ht_readblk);	pthread_mutex_unlock(&ht->ht_wrcntmutex);	pthread_mutex_lock(&ht->ht_writeblk);*/}/*------------------------------------------------------------------------ * htwriterend - to be called after writer access for locking *------------------------------------------------------------------------ */voidhtwriterend(struct ht *ht){	/*pthread_mutex_unlock(&ht->ht_writeblk);	pthread_mutex_lock(&ht->ht_wrcntmutex);	if ((--(ht->ht_writecnt)) == 0)		pthread_mutex_unlock(&ht->ht_readblk);	pthread_mutex_unlock(&ht->ht_wrcntmutex);*/}/*------------------------------------------------------------------------ * htget - retreive an object from the ht  *------------------------------------------------------------------------ */char *htget(struct ht *ht, unsigned long int key){	struct htent *p;	void *object;	///htreaderbegin(ht);	p = htgetent(ht, key);	if (p != NULL) {		object = p->hte_object;		///htreaderend(ht);		return object;	}	else {		///htreaderend(ht);		return NULL;	}}/*------------------------------------------------------------------------ * htgetent - non-locking internal call to do the work of retreiving  * object from ht *------------------------------------------------------------------------ */struct htent *htgetent(struct ht *ht, unsigned long int key){	int			hash;	struct htent		*p;	hash = ht->ht_hashfcn(key, ht->ht_size);	p = ht->ht_entries[hash];	while(p) {		if (!ht->ht_cmpfcn(p->hte_key, key))			return p;		p = p->hte_chain;	}	/*	 * Not found.	 */	return NULL;}/*------------------------------------------------------------------------ * htdel - remove an object from the hashtable *------------------------------------------------------------------------ */inthtdel(struct ht *ht, unsigned long int key){	int			hash;	struct htent		*p, *follow;	hash = ht->ht_hashfcn(key, ht->ht_size);  	///根據(jù)映射算法,計(jì)算索引  		///htwriterbegin(ht);	////為寫操作作準(zhǔn)備,主要是鎖讀的操作	p = ht->ht_entries[hash];////獲得可能包括要找的對(duì)象的bulk	follow = NULL;	while(p) {////從bulk的入口開始逐個(gè)比較key的值來確定		if (!ht->ht_cmpfcn(p->hte_key, key)) {			if (follow)				follow->hte_chain = p->hte_chain;			else				ht->ht_entries[hash] = p->hte_chain;			////通過指針操作把p所指的對(duì)象移到哈希表外						if (ht->ht_destroykeyfcn != NULL)				ht->ht_destroykeyfcn(p->hte_key);			if (ht->ht_destroyobjectfcn != NULL)				ht->ht_destroyobjectfcn(p->hte_object);			////銷毀p所指向的對(duì)象			heap_free(p);			ht->ht_count--;			///htwriterend(ht);			return OK;		}		follow = p;		p = p->hte_chain;		/////遍歷整個(gè)bulk鏈表。	}  	/* 	 * Not found.	 */	///htwriterend(ht);	return ERROR;}/*------------------------------------------------------------------------ * htadd - add an object to the hash table. Returns ERROR * if key is already present. *------------------------------------------------------------------------ */inthtadd(struct ht *ht, unsigned long int key, void *object){	int			len;	int			hash;	struct htent		*ent, *p;	/* 	 * Check for key.	 */	///htwriterbegin(ht);  	p = htgetent(ht, key);	if (p != NULL) {		///htwriterend(ht);		return ERROR;	}	///這個(gè)object在表中已經(jīng)存在	len = ht->ht_size;	ent = (struct htent *)heap_alloc(sizeof(struct htent));	if (ent == NULL) {		///htwriterend(ht);		return ERROR;	}	ent->hte_key = key;	ent->hte_object = object;	hash = ht->ht_hashfcn(key, len);	////根據(jù)key來計(jì)算哈希表中的索引值	/* 	 * Add to front of chain.	 */	p = ht->ht_entries[hash];	ent->hte_chain = p;  	ht->ht_entries[hash] = ent;	///對(duì)象插入到chain當(dāng)中,是放到chain的開頭	ht->ht_count++;	///htwriterend(ht);	return OK;}////把一個(gè)object(stream)放到hash table中去/*------------------------------------------------------------------------ * hashstring - function to generate hash value for a string. * Fix me! TBD: Use use better string hash function. *------------------------------------------------------------------------ */inthashstring(unsigned long int key, int len){	int		i;	int		acc = 0;	char          *str = (char *) key;	for (i = 0; i < strlen(str); i++)		/*		 * Convert to uppercase.		 */		acc += (str[i] >= 97 && str[i] <= 122 ? str[i] - 32 : str[i]);  	return acc % len;}////把key當(dāng)作是string變量,從而獲得索引,并不去分string中字母的大小寫。/*------------------------------------------------------------------------ * hashunsignedint - function to generate a hashvalue for an unsigned int * Because SSRCs are expected to be random, using value % htsize should * suffice as a hash function. *------------------------------------------------------------------------ */inthashunsignedint(unsigned long int key, int len){ 	return key % len;}////從一個(gè)整型的key來計(jì)算哈希表的索引/*------------------------------------------------------------------------ * htcount - return number of objects in the hashtable *------------------------------------------------------------------------ */inthtcount(struct ht *ht){	int count;	/*	 * Return number of items in hashtable.	 */	///htreaderbegin(ht);	count = ht->ht_count;	///htreaderend(ht);	return count;}////獲取表中對(duì)象的數(shù)目/*------------------------------------------------------------------------ * htenum - enumerate entries in the hashtable *------------------------------------------------------------------------ */struct htent **htenum(struct ht *ht){	struct htent	**v, *p;	int		i;	int		j;	///htreaderbegin(ht);	v = (struct htent **)heap_alloc(sizeof(struct htent *) * (ht->ht_count + 1));	if (v == NULL) {		///htreaderend(ht);		return NULL;	}	for (j = 0, i = 0; j < ht->ht_size; j++) {		p = ht->ht_entries[j];		////查找chain(bulk)的入口		while (p != NULL) {			v[i++] = p;			p = p->hte_chain;			///遍歷每個(gè)chain		}	}	///htreaderend(ht);	/*	 * Use NULL to mark end	 */	v[i] = NULL;	return v;}////把一個(gè)表中所有的entry的指針放到指針數(shù)組v中,這個(gè)函數(shù)被rtpsources調(diào)用。/*------------------------------------------------------------------------ * htdestroy - destroy hashtable and free all memory *------------------------------------------------------------------------ */inthtdestroy(struct ht *ht){	int		j;	struct htent *p, *q;	if (ht == NULL)		return ERROR;	///對(duì)于已空的表,destroy失敗	for (j = 0; j < ht->ht_size; j++) {		p = ht->ht_entries[j];		while (p != NULL) {			q = p->hte_chain;			/*			 * Destroy the key and object.			 */			if (ht->ht_destroykeyfcn != NULL)				ht->ht_destroykeyfcn(p->hte_key);			if (ht->ht_destroyobjectfcn != NULL)				ht->ht_destroyobjectfcn(p->hte_object);			/*			 * Free the memory from the hashtable entry.			 */			heap_free(p);			p = q;		}	}	/*	 * Free the array of pointers and ht structure.	 */	heap_free(ht->ht_entries);	heap_free(ht);	return OK;}/*------------------------------------------------------------------------ * unsignedinteq - determine if two unsigned ints are equal *------------------------------------------------------------------------ */intunsignedinteq(unsigned long int a, unsigned long int b){	return !(a == b);}////相等則返回0////函數(shù)ht->ht_cmpfcn(p->hte_key, key)的原型。

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品视频yy9299一区| 九九热在线视频观看这里只有精品| 久久欧美一区二区| 精品少妇一区二区三区在线播放| 日韩精品在线看片z| 69久久夜色精品国产69蝌蚪网| 欧美日韩免费电影| 欧美精品久久久久久久多人混战| 欧美亚洲高清一区二区三区不卡| 色综合久久中文字幕综合网| 色拍拍在线精品视频8848| 色老头久久综合| 欧美日韩一区二区三区高清| 制服丝袜中文字幕亚洲| 91.xcao| 日韩欧美黄色影院| 夜色激情一区二区| 亚洲精品久久7777| 日韩影视精彩在线| 久久9热精品视频| 国产成人在线网站| 99在线精品观看| 欧美日韩一区二区三区在线看 | 成人av电影在线| 色综合久久综合| 欧美妇女性影城| 久久久三级国产网站| 国产精品久久久久一区二区三区共 | 欧美一区二区三区日韩视频| 精品99999| 中文字幕一区二区三区不卡| 亚洲一区二区影院| 久久国产精品无码网站| 国产成人av电影在线播放| 一本高清dvd不卡在线观看| 欧美日本视频在线| 国产亚洲精品福利| 一区二区三区电影在线播| 午夜精品福利一区二区蜜股av| 激情小说欧美图片| 97精品国产露脸对白| 日韩午夜电影av| 亚洲欧洲在线观看av| 麻豆精品在线看| eeuss影院一区二区三区| 欧美日韩国产乱码电影| 26uuu成人网一区二区三区| 国产精品国产三级国产有无不卡 | 奇米影视在线99精品| 国产乱码精品一区二区三区忘忧草 | 久久亚洲精品小早川怜子| 一区在线观看免费| 老司机午夜精品99久久| 色综合久久久网| 久久久久久久久蜜桃| 亚洲一区二区影院| 懂色av一区二区夜夜嗨| 欧美一区二区三区视频在线 | 国产一区二区福利| 欧美在线免费观看亚洲| 国产三级一区二区三区| 亚洲妇女屁股眼交7| 成人av网站在线观看免费| 日韩欧美亚洲另类制服综合在线| 亚洲丝袜美腿综合| 国产在线国偷精品产拍免费yy| 欧美亚洲一区二区在线| 国产精品白丝在线| 九色综合国产一区二区三区| 欧美三级韩国三级日本三斤| 国产精品国产自产拍在线| 韩国精品主播一区二区在线观看| 在线观看日韩国产| 国产精品久久久久久亚洲毛片| 麻豆91小视频| 欧美日韩高清影院| 一区二区三区高清在线| www.成人网.com| 日本一区二区三区久久久久久久久不| 亚洲va欧美va天堂v国产综合| 99国内精品久久| 中文字幕第一区| 国产成人在线免费观看| 日韩美女一区二区三区四区| 香蕉久久夜色精品国产使用方法 | 91精品免费在线| 婷婷开心激情综合| 在线精品视频一区二区三四| 国产精品看片你懂得| 国产经典欧美精品| 久久蜜桃av一区二区天堂| 蜜芽一区二区三区| 91精品国产麻豆国产自产在线 | 亚洲高清免费观看 | 久久婷婷久久一区二区三区| 裸体一区二区三区| 欧美精选午夜久久久乱码6080| 亚洲18女电影在线观看| 欧美日韩免费高清一区色橹橹| 亚洲在线免费播放| 在线看日本不卡| 一区二区理论电影在线观看| 日本伦理一区二区| 亚洲午夜精品网| 欧美日韩中文字幕精品| 日韩激情一区二区| 制服丝袜中文字幕亚洲| 麻豆成人免费电影| 久久综合网色—综合色88| 激情六月婷婷综合| 久久精品视频一区| 国产不卡视频在线观看| 中文字幕在线观看一区| 日本高清无吗v一区| 亚洲午夜视频在线| 欧美一级一区二区| 韩国一区二区在线观看| 国产亚洲一区二区在线观看| 国产美女av一区二区三区| 国产午夜精品久久| 不卡影院免费观看| 亚洲国产综合在线| 6080日韩午夜伦伦午夜伦| 开心九九激情九九欧美日韩精美视频电影 | 色综合一区二区| 午夜国产不卡在线观看视频| 欧美一级专区免费大片| 国产精品一品视频| 亚洲欧美色图小说| 欧美日本一区二区三区| 九九视频精品免费| 国产精品乱码一区二区三区软件 | 亚洲国产经典视频| 91成人免费电影| 日本中文字幕一区二区有限公司| 精品日韩在线一区| 99精品欧美一区二区三区小说| 亚洲国产一区二区a毛片| 日韩视频123| 99视频精品全部免费在线| 亚洲国产一区视频| 久久久久一区二区三区四区| 91丨porny丨国产入口| 日韩av一区二区三区四区| 国产欧美一区二区三区鸳鸯浴 | 精品成人佐山爱一区二区| 99精品久久免费看蜜臀剧情介绍| 亚洲成人av电影在线| 欧美精品一区男女天堂| 一本大道久久a久久精品综合| 日本人妖一区二区| 久久精品日产第一区二区三区高清版| 91亚洲精品一区二区乱码| 美女一区二区视频| 亚洲视频电影在线| 欧美va亚洲va在线观看蝴蝶网| 91在线精品一区二区三区| 美女在线观看视频一区二区| 日韩伦理av电影| 精品久久久久av影院| 色一情一伦一子一伦一区| 国产伦精品一区二区三区视频青涩| 亚洲激情在线播放| 久久久久9999亚洲精品| 欧美日韩在线播放一区| 成人黄色av网站在线| 蜜臀a∨国产成人精品| 悠悠色在线精品| 国产日本一区二区| 日韩三级精品电影久久久| 色综合久久中文综合久久牛| 国产精品一二三四五| 日韩 欧美一区二区三区| 亚洲精品国产成人久久av盗摄 | 国产精品综合av一区二区国产馆| 亚洲一区二区三区视频在线 | 亚洲综合色婷婷| 亚洲国产精品成人综合| 精品久久久久久久久久久久久久久 | 亚洲日本成人在线观看| 久久久久久久久久电影| 欧美视频一区二区三区| 9i看片成人免费高清| 国产98色在线|日韩| 蜜桃在线一区二区三区| 亚洲成av人**亚洲成av**| 亚洲精品写真福利| 亚洲国产精品二十页| 国产亚洲自拍一区| 精品1区2区在线观看| 日韩一区二区免费电影| 欧美日韩一区二区三区四区| 色国产综合视频| av一二三不卡影片| 粉嫩蜜臀av国产精品网站| 国产自产v一区二区三区c| 美女网站一区二区| 久久精品国产亚洲aⅴ| 日韩黄色小视频| 天天av天天翘天天综合网色鬼国产|