讓我們先來(lái)看看Wikipedia中叫做Associative array的詞條,是如下解釋的:An associative array (also associative container , map , mapping , dictionary , finite map , and in query-PRocessing an index or index file ) is an abstract data type composed of a collection of unique keys and a collection of values, where each key is associated with one value (or set of values).Associative array是一個(gè)數(shù)據(jù)類(lèi)型,并且這個(gè)數(shù)據(jù)類(lèi)型有很多名字,比如有人叫做dictionary,有人叫做map。學(xué)習(xí)C++的人應(yīng)該熟悉map數(shù)據(jù)類(lèi)型,map數(shù)據(jù)類(lèi)型是STL中定義的關(guān)聯(lián)容器。Dictionary數(shù)據(jù)類(lèi)型的要點(diǎn)是屬性和值。Dictionary數(shù)據(jù)類(lèi)型是由若干屬性組成的,每個(gè)屬性有一個(gè)或者多個(gè)值。在實(shí)際應(yīng)用中,Dictionary數(shù)據(jù)類(lèi)型可以更加復(fù)雜,一個(gè)屬性可以有如下方面屬性類(lèi)型屬性值的個(gè)數(shù),一個(gè)或者多個(gè)屬性的訪問(wèn)權(quán)限,可讀,可寫(xiě)等。不難看出一個(gè)屬性本身的類(lèi)型,屬性個(gè)數(shù)等又是一些屬性。在Darwin中,就是這么應(yīng)用的。Darwin視頻服務(wù)器中Dictionary數(shù)據(jù)類(lèi)型的應(yīng)用在Darwin中針對(duì)Dictionary的定義有兩個(gè)類(lèi),分別是QTSSDictionary和QTSSDictionaryMap。QTSSDictionary 與QTSS_Object對(duì)應(yīng),QTSSDictionaryMap與QTSS_ObjectType對(duì)應(yīng)。QTSS_Object為模塊和服務(wù)器核心之間提供了數(shù)據(jù)交換的方法。QTSS_Object由若干屬性構(gòu)成,每個(gè)屬性有自己名字,ID號(hào),數(shù)據(jù)類(lèi)型,讀寫(xiě)權(quán)限。內(nèi)建屬性是QTSS對(duì)象的固有屬性,比如QTSS_RTSPRequestObject對(duì)象的內(nèi)建屬性URL,通過(guò)這個(gè)屬性,模塊可以獲取與RTSP請(qǐng)求關(guān)聯(lián)的URL。除了內(nèi)建的屬性,還可以為字典類(lèi)型的對(duì)象添加靜態(tài)屬性或者臨時(shí)屬性。通過(guò)回調(diào)函數(shù)QTSS_AddStaticAttribute可以為對(duì)象類(lèi)型添加靜態(tài)屬性,只能在Register角色中調(diào)用添加靜態(tài)屬性的函數(shù)。靜態(tài)屬性只能被添加,不能移除。不像靜態(tài)屬性,臨時(shí)屬性可以被移除,通過(guò)調(diào)用函數(shù)QTSS_RemoveInstanceAttribute可以移除一個(gè)臨時(shí)屬性。Darwin提供了針對(duì)Dictionary的回調(diào)函數(shù),全部是對(duì)Dictionary的屬性進(jìn)行操作的。向Dictionary對(duì)象實(shí)例添加一個(gè)臨時(shí)的屬性。向Dictionary類(lèi)型添加一個(gè)靜態(tài)的屬性。通過(guò)屬性ID號(hào)或者屬性名獲取屬性的信息。循環(huán)獲取對(duì)象多有屬性的信息。獲取對(duì)象屬性的個(gè)數(shù)。通過(guò)各種方式獲取屬性的值。設(shè)置屬性的值。如圖所示,是Darwin中定義的Dictionary類(lèi)型的對(duì)象。以qtssRTSPRequestObjectType這個(gè)Dictionary類(lèi)型為例,它的屬性描述了一個(gè)RTSP請(qǐng)求。RTSP請(qǐng)求對(duì)象(QTSS_RTSPRequestObject)是對(duì)象類(lèi)型的實(shí)例,這個(gè)實(shí)例從服務(wù)器接收到客戶端的RTSP請(qǐng)求開(kāi)始到應(yīng)答完成結(jié)束。RTSP請(qǐng)求需與RTSP會(huì)話(QTSS_RTSPsessionObject)關(guān)聯(lián)。下面給出RTSP請(qǐng)求的一些屬性:qtssRTSPReqAbsoluteURL,“rtsp://”起始的URL。qtssRTSPReqContentLen,RTSP請(qǐng)求的內(nèi)容長(zhǎng)度。不難看出,由于采用了Dictionary這種數(shù)據(jù)類(lèi)型,使得Darwin具有了如下特性:便于模塊和服務(wù)器核心交換數(shù)據(jù)使得服務(wù)器的可管理共容易實(shí)現(xiàn)