讓我們先來看看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是一個數(shù)據(jù)類型,并且這個數(shù)據(jù)類型有很多名字,比如有人叫做dictionary,有人叫做map。學習C++的人應該熟悉map數(shù)據(jù)類型,map數(shù)據(jù)類型是STL中定義的關(guān)聯(lián)容器。Dictionary數(shù)據(jù)類型的要點是屬性和值。Dictionary數(shù)據(jù)類型是由若干屬性組成的,每個屬性有一個或者多個值。在實際應用中,Dictionary數(shù)據(jù)類型可以更加復雜,一個屬性可以有如下方面屬性類型屬性值的個數(shù),一個或者多個屬性的訪問權(quán)限,可讀,可寫等。不難看出一個屬性本身的類型,屬性個數(shù)等又是一些屬性。在Darwin中,就是這么應用的。Darwin視頻服務(wù)器中Dictionary數(shù)據(jù)類型的應用在Darwin中針對Dictionary的定義有兩個類,分別是QTSSDictionary和QTSSDictionaryMap。QTSSDictionary 與QTSS_Object對應,QTSSDictionaryMap與QTSS_ObjectType對應。QTSS_Object為模塊和服務(wù)器核心之間提供了數(shù)據(jù)交換的方法。QTSS_Object由若干屬性構(gòu)成,每個屬性有自己名字,ID號,數(shù)據(jù)類型,讀寫權(quán)限。內(nèi)建屬性是QTSS對象的固有屬性,比如QTSS_RTSPRequestObject對象的內(nèi)建屬性URL,通過這個屬性,模塊可以獲取與RTSP請求關(guān)聯(lián)的URL。除了內(nèi)建的屬性,還可以為字典類型的對象添加靜態(tài)屬性或者臨時屬性。通過回調(diào)函數(shù)QTSS_AddStaticAttribute可以為對象類型添加靜態(tài)屬性,只能在Register角色中調(diào)用添加靜態(tài)屬性的函數(shù)。靜態(tài)屬性只能被添加,不能移除。不像靜態(tài)屬性,臨時屬性可以被移除,通過調(diào)用函數(shù)QTSS_RemoveInstanceAttribute可以移除一個臨時屬性。Darwin提供了針對Dictionary的回調(diào)函數(shù),全部是對Dictionary的屬性進行操作的。向Dictionary對象實例添加一個臨時的屬性。向Dictionary類型添加一個靜態(tài)的屬性。通過屬性ID號或者屬性名獲取屬性的信息。循環(huán)獲取對象多有屬性的信息。獲取對象屬性的個數(shù)。通過各種方式獲取屬性的值。設(shè)置屬性的值。如圖所示,是Darwin中定義的Dictionary類型的對象。以qtssRTSPRequestObjectType這個Dictionary類型為例,它的屬性描述了一個RTSP請求。RTSP請求對象(QTSS_RTSPRequestObject)是對象類型的實例,這個實例從服務(wù)器接收到客戶端的RTSP請求開始到應答完成結(jié)束。RTSP請求需與RTSP會話(QTSS_RTSPsessionObject)關(guān)聯(lián)。下面給出RTSP請求的一些屬性:qtssRTSPReqAbsoluteURL,“rtsp://”起始的URL。qtssRTSPReqContentLen,RTSP請求的內(nèi)容長度。不難看出,由于采用了Dictionary這種數(shù)據(jù)類型,使得Darwin具有了如下特性:便于模塊和服務(wù)器核心交換數(shù)據(jù)使得服務(wù)器的可管理共容易實現(xiàn)