專利名稱:一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法
一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種嵌入式技術(shù)領(lǐng)域,尤其涉及一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法。
背景技術(shù):
隨著國(guó)家數(shù)字電視的大規(guī)模普及,作為數(shù)字電視終端產(chǎn)品的數(shù)字電視機(jī)頂盒的功 能也越來(lái)越強(qiáng)大,作為與用戶使用最多的人機(jī)交互界面也越來(lái)越多樣。為了更快更好的編 寫適合各種運(yùn)營(yíng)商提出的定制要求,機(jī)頂盒上使用腳本語(yǔ)言編寫應(yīng)用程序可以實(shí)現(xiàn)快速的 開發(fā),適應(yīng)快速變化的用戶需求。由于使用腳本作為機(jī)頂盒應(yīng)用程序的主要表現(xiàn)形式,機(jī)頂盒必須提供大量豐富的 功能函數(shù)供腳本調(diào)用,傳統(tǒng)注冊(cè)功能函數(shù)到腳本解析引擎的方式,一般采用數(shù)組登記方式 或者鏈表登記方式,使用數(shù)組登記方式存儲(chǔ)注冊(cè)功能函數(shù),一般使用從上到下的方式進(jìn)行 存儲(chǔ),先注冊(cè)的函數(shù)先存儲(chǔ),查找時(shí)也是使用從上到下的方式進(jìn)行查詢,一一比對(duì)存儲(chǔ)在數(shù) 組中的注冊(cè)功能函數(shù)的字符串名稱是否和需要調(diào)用的腳本中的函數(shù)的字符串相同的,如果 不同就繼續(xù)比對(duì)下一個(gè),如果相同,則調(diào)用對(duì)于的函數(shù)實(shí)現(xiàn)相應(yīng)的功能。使用鏈表登記方 式存儲(chǔ)注冊(cè)功能函數(shù),一般每添加一個(gè)注冊(cè)函數(shù)就分配一個(gè)結(jié)點(diǎn),并掛接在原鏈表的最后 一個(gè)結(jié)點(diǎn)上,直到把所有注冊(cè)函數(shù)掛接完畢為止。在腳本解析引擎在查詢時(shí),依著鏈表逐個(gè) 的查找每個(gè)結(jié)點(diǎn),一一比對(duì)存儲(chǔ)在數(shù)組中的注冊(cè)功能函數(shù)的字符串名稱是否和需要調(diào)用的 腳本中的函數(shù)的字符串相同的,如果不同就繼續(xù)比對(duì)下一個(gè),如果相同,則調(diào)用對(duì)于的函數(shù) 實(shí)現(xiàn)相應(yīng)的功能。因此當(dāng)腳本解析引擎調(diào)用相應(yīng)的注冊(cè)的功能函數(shù)時(shí),需要花費(fèi)大量的時(shí)間進(jìn)行比 對(duì)查找,當(dāng)注冊(cè)到腳本解析引擎中的功能函數(shù)越多時(shí),查詢的速度越慢,拖累整個(gè)腳本程序 執(zhí)行的效率。
發(fā)明內(nèi)容本發(fā)明要解決的技術(shù)問(wèn)題,在于提供一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法,克服了傳 統(tǒng)注冊(cè)功能函數(shù)注冊(cè)到腳本解析引擎的方式,當(dāng)腳本解析引擎調(diào)用相應(yīng)的注冊(cè)的功能函 數(shù)時(shí),需要花費(fèi)大量的時(shí)間進(jìn)行比對(duì)查找,查詢的速度慢,拖累整個(gè)腳本程序執(zhí)行的效率問(wèn)題。本發(fā)明是這樣實(shí)現(xiàn)的一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法,其特征在于包括以下 步驟步驟10、把機(jī)頂盒腳本調(diào)用的注冊(cè)功能函數(shù)進(jìn)行分類,每類函數(shù)對(duì)應(yīng)一個(gè)類名,并 對(duì)每個(gè)類分配一獨(dú)立的內(nèi)存空間進(jìn)行存儲(chǔ);步驟20、當(dāng)機(jī)頂盒注冊(cè)腳本程序時(shí),獲取一注冊(cè)功能函數(shù),并判斷該函數(shù)對(duì)應(yīng)的類 在內(nèi)存空間中是否存在,否,則分配一足夠大的內(nèi)存空間進(jìn)行存儲(chǔ),是則判斷該類的內(nèi)存空 間是否足夠存儲(chǔ)新的函數(shù),否則繼續(xù)分配一足夠大的內(nèi)存空間,再轉(zhuǎn)入步驟30,是則直接進(jìn) 入步驟30 ;
步驟30、通過(guò)散列法把注冊(cè)功能函數(shù)名的字符串轉(zhuǎn)換為固定長(zhǎng)度的數(shù)值,其散列 法步驟如下步驟301、把注冊(cè)功能函數(shù)名的字符串全部轉(zhuǎn)換為大寫步驟302、將轉(zhuǎn)換后的字符串從頭到尾開始按4個(gè)字節(jié)來(lái)組合成一個(gè)32位整型數(shù) 據(jù),以此類推直到最后4個(gè)字節(jié)組合成一個(gè)32位整型數(shù)據(jù),并把這些32位整型數(shù)據(jù)進(jìn)行加 減乘除,以及與或非運(yùn)算,最終得到一 32位的整型數(shù)據(jù);步驟303、把最終得到32位的整型數(shù)據(jù)作為該注冊(cè)功能函數(shù)名的字符串對(duì)應(yīng)的固 定長(zhǎng)度的hash數(shù)值。步驟40、將注冊(cè)功能函數(shù)所屬類的內(nèi)存空間中分配一個(gè)空間用來(lái)存儲(chǔ)該注冊(cè)功能 函數(shù)名的字符串、所述固定長(zhǎng)度的hash數(shù)值以及注冊(cè)功能函數(shù)的指針及注冊(cè)功能函數(shù)的 相關(guān)內(nèi)容,并將空間中的這些數(shù)據(jù)以鏈表的形式掛接在該注冊(cè)功能函數(shù)所屬類的空間下。步驟50、當(dāng)機(jī)頂盒腳本程序執(zhí)行一注冊(cè)功能函數(shù)時(shí),機(jī)頂盒腳本解析引擎會(huì)對(duì)腳 本程序所調(diào)用的注冊(cè)功能函數(shù)的字符串進(jìn)行hash運(yùn)算,得到該注冊(cè)功能函數(shù)對(duì)應(yīng)的hash 數(shù)值;步驟60、機(jī)頂盒腳本程序分析注冊(cè)功能函數(shù)所屬的類,找出該類的內(nèi)存空間,并根 據(jù)該類存儲(chǔ)的鏈表形式逐個(gè)的將所述根據(jù)函數(shù)字符串進(jìn)行hash運(yùn)算得到的hash數(shù)值與所 述內(nèi)存空間中的固定長(zhǎng)度的hash數(shù)值進(jìn)行比對(duì),找出注冊(cè)功能函數(shù)hash數(shù)值相同的數(shù)據(jù), 然后取出該注冊(cè)功能函數(shù)的字符串進(jìn)行比對(duì),如果一樣則取出對(duì)應(yīng)注冊(cè)功能函數(shù)的指針及 注冊(cè)功能函數(shù)的相關(guān)內(nèi)容交由腳本解析引擎調(diào)用,如果不相同,則繼續(xù)比對(duì)別的注冊(cè)功能 函數(shù)的hash數(shù)值。本發(fā)明具有如下優(yōu)點(diǎn)使用hash表登記注冊(cè)方式來(lái)對(duì)注冊(cè)功能函數(shù)進(jìn)行注冊(cè)登 記,能夠?qū)崿F(xiàn)對(duì)所需注冊(cè)功能函數(shù)的快速查找,加速了機(jī)頂盒腳本程序的運(yùn)行速度,提高了 機(jī)頂盒運(yùn)行的效率,給用戶帶來(lái)方便。
圖1為本發(fā)明方法流程示意圖。
具體實(shí)施方式下面參照?qǐng)D1結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的說(shuō)明。機(jī)頂盒腳本擴(kuò)充函數(shù)的方法,包括以下步驟步驟10、把機(jī)頂盒腳本調(diào)用的注冊(cè)功能函數(shù)進(jìn)行分類(分類的好處是可以快速定 位),每類函數(shù)對(duì)應(yīng)一個(gè)類名,并對(duì)每個(gè)類分配一獨(dú)立的內(nèi)存空間進(jìn)行存儲(chǔ);步驟20、當(dāng)機(jī)頂盒注冊(cè)腳本程序時(shí),獲取一注冊(cè)功能函數(shù),并判斷該函數(shù)對(duì)應(yīng)的類 在內(nèi)存空間中是否存在,否,則分配一足夠大的內(nèi)存空間(按照系統(tǒng)的資源情況,分配一定 的內(nèi)存出來(lái))進(jìn)行存儲(chǔ),是則判斷該類的內(nèi)存空間是否足夠存儲(chǔ)新的函數(shù)(新的函數(shù)屬于 該類下的另一個(gè)注冊(cè)功能函數(shù)),否則繼續(xù)分配一足夠大的內(nèi)存空間,再轉(zhuǎn)入步驟30,是則 直接進(jìn)入步驟30 ;步驟30、通過(guò)散列法把注冊(cè)功能函數(shù)名的字符串轉(zhuǎn)換為固定長(zhǎng)度的數(shù)值,其散列 法步驟如下
步驟301、把注冊(cè)功能函數(shù)名的字符串全部轉(zhuǎn)換為大寫;步驟302、將轉(zhuǎn)換后的字符串從頭到尾開始按4個(gè)字節(jié)來(lái)組合成一個(gè)32位整型數(shù) 據(jù),以此類推直到最后4個(gè)字節(jié)組合成一個(gè)32位整型數(shù)據(jù),并把這些32位整型數(shù)據(jù)進(jìn)行加 減乘除,以及與或非運(yùn)算,最終得到一 32位的整型數(shù)據(jù);步驟303、把最終得到32位的整型數(shù)據(jù)作為該注冊(cè)功能函數(shù)名的字符串對(duì)應(yīng)的固 定長(zhǎng)度的hash數(shù)值;步驟40、將注冊(cè)功能函數(shù)所屬類的內(nèi)存空間中分配一個(gè)空間用來(lái)存儲(chǔ)該注冊(cè)功能 函數(shù)名的字符串、所述固定長(zhǎng)度的hash數(shù)值以及注冊(cè)功能函數(shù)的指針及注冊(cè)功能函數(shù)的 相關(guān)內(nèi)容,并將空間中的這些數(shù)據(jù)以鏈表的形式掛接在該注冊(cè)功能函數(shù)所屬類的空間下;步驟50、當(dāng)機(jī)頂盒腳本程序執(zhí)行一注冊(cè)功能函數(shù)時(shí),機(jī)頂盒腳本解析引擎會(huì)對(duì)腳 本程序所調(diào)用的注冊(cè)功能函數(shù)的字符串進(jìn)行hash運(yùn)算,得到該注冊(cè)功能函數(shù)對(duì)應(yīng)的hash 數(shù)值;步驟60、機(jī)頂盒腳本程序分析注冊(cè)功能函數(shù)所屬的類,找出該類的內(nèi)存空間,并將 所述根據(jù)函數(shù)字符串進(jìn)行hash運(yùn)算得到的hash數(shù)值與所述內(nèi)存空間中的固定長(zhǎng)度的hash 數(shù)值進(jìn)行比對(duì),找出注冊(cè)功能函數(shù)hash數(shù)值相同的數(shù)據(jù),然后取出該注冊(cè)功能函數(shù)的字符 串進(jìn)行比對(duì),如果一樣則取出對(duì)應(yīng)注冊(cè)功能函數(shù)的指針及注冊(cè)功能函數(shù)的相關(guān)內(nèi)容(如函 數(shù)的屬性,特性等)交由腳本解析引擎調(diào)用,如果不相同,則繼續(xù)比對(duì)別的注冊(cè)功能函數(shù)的 hash數(shù)值。下面舉一具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。步驟10、把機(jī)頂盒腳本調(diào)用的注冊(cè)功能函數(shù)進(jìn)行分類,如注冊(cè)功能函數(shù)有int islower (int c)、int isprint (int c)、system_api_setvalue (),其中 intislower (int c)、 int isprint (int c)為一類,system_api_setvalue ()為另一類,并對(duì)每類函數(shù)對(duì)應(yīng)一個(gè)類 名,并對(duì)每個(gè)類分配一獨(dú)立的內(nèi)存空間進(jìn)行存儲(chǔ);步驟20、當(dāng)機(jī)頂盒注冊(cè)腳本程序時(shí),獲取一注冊(cè)功能函數(shù),并判斷該函數(shù)對(duì)應(yīng)的類 在內(nèi)存空間中是否存在,否,則分配一足夠大的內(nèi)存空間(按照系統(tǒng)的資源情況,分配一定 的內(nèi)存出來(lái))進(jìn)行存儲(chǔ),是則判斷該類的內(nèi)存空間是否足夠存儲(chǔ)新的函數(shù)(新的函數(shù)屬于 該類下的另一個(gè)注冊(cè)功能函數(shù)),否則繼續(xù)分配一足夠大的內(nèi)存空間,再轉(zhuǎn)入步驟30,是則 直接進(jìn)入步驟30 ;步驟30、通過(guò)散列法把注冊(cè)功能函數(shù)名的字符串轉(zhuǎn)換為固定長(zhǎng)度的數(shù)值,其散列 法步驟如下步驟301、把注冊(cè)功能函數(shù)名的字符串全部轉(zhuǎn)換為大寫,如函數(shù)的字符串名稱為 "system_api_setvalue"轉(zhuǎn)為大寫后為"SYSTEM_API_SETVALUE,,;其函數(shù)指針為 system_ api_setvalue ;步驟302、通過(guò)下列處理后轉(zhuǎn)換為32位整數(shù)數(shù)據(jù)值以下函數(shù)用c語(yǔ)言描述unsigned int hashFunction(char氺name){int hashvalue = 0, loop ;const char氺str = name ;
while (*str ! =' \0'){hashvalue = (hashvalue << 4)+*str ;if ((loop = (hashvalue&OxFOOOOOOO)) ! =0){hashvalue = hashvalue Λ (loop >>24);hashvalue = hashvalue Λ loop ;}++str ;}return hashvalue ;}注函數(shù)中name就是需要輸入的大寫函數(shù)名字符串,函數(shù)的返回值就是針對(duì)于這 個(gè)函數(shù)的32位整數(shù)數(shù)據(jù)值。轉(zhuǎn)換函數(shù)中的公式hashvalue = (hashvalue << 4)+*str, 只是作為一個(gè)例子,并不是一定使用相同的公式,只要能夠轉(zhuǎn)換出32位整數(shù)數(shù)據(jù)值的公式 都可以使用。通過(guò)上面的轉(zhuǎn)換函數(shù)得出0xfdcf5645。步驟303、把最終得到32位的整型數(shù)據(jù)作為該注冊(cè)功能函數(shù)名的字符串對(duì)應(yīng)的固 定長(zhǎng)度的hash數(shù)值;步驟40、將注冊(cè)功能函數(shù)所屬類的內(nèi)存空間中分配一個(gè)空間用來(lái)存儲(chǔ)該注冊(cè)功能 函數(shù)名的字符串(如函數(shù)的字符串名稱為“syStem_api_SetValue”)、所述固定長(zhǎng)度的hash 數(shù)值(其hash數(shù)值為所述0xfdcf5645)以及注冊(cè)功能函數(shù)的指針(函數(shù)的字符串名稱為 “system_api_setvalue”其指針為system_api_setvalue)及注冊(cè)功能函數(shù)的相關(guān)內(nèi)容(如 函數(shù)的屬性,特性等),并將空間中的這些數(shù)據(jù)以鏈表的形式掛接在該注冊(cè)功能函數(shù)所屬類 的空間下;步驟50、當(dāng)機(jī)頂盒腳本程序執(zhí)行一注冊(cè)功能函數(shù)時(shí)(如此時(shí)執(zhí)行的函數(shù)就是 system_api_setvalue函數(shù)),機(jī)頂盒腳本解析引擎會(huì)對(duì)腳本程序所調(diào)用的注冊(cè)功能函數(shù) 的字符串進(jìn)行hash運(yùn)算(則運(yùn)算出來(lái)的hash數(shù)值為Oxfdcf5645),得到該注冊(cè)功能函數(shù)對(duì) 應(yīng)的hash數(shù)值;步驟60、機(jī)頂盒腳本程序分析注冊(cè)功能函數(shù)所屬的類,找出該類的內(nèi)存空間,并將 所述根據(jù)函數(shù)字符串進(jìn)行hash運(yùn)算得到的hash數(shù)值與所述內(nèi)存空間中的固定長(zhǎng)度的hash 數(shù)值(如鏈表形式掛接在該注冊(cè)功能函數(shù)所屬類的空間下的0xfdcf56^)進(jìn)行比對(duì),找出 注冊(cè)功能函數(shù)hash數(shù)值相同的數(shù)據(jù),然后取出該注冊(cè)功能函數(shù)的字符串進(jìn)行比對(duì),如果一 樣則取出對(duì)應(yīng)注冊(cè)功能函數(shù)的指針(函數(shù)的字符串名稱為“SyStem_api_SetValUe”其指針 為SyStem_api_SetValUe)及注冊(cè)功能函數(shù)的相關(guān)內(nèi)容(如函數(shù)的屬性,特性等)交由腳本 解析引擎調(diào)用,如果不相同,則繼續(xù)比對(duì)別的注冊(cè)功能函數(shù)的hash數(shù)值。總之,本發(fā)明使用hash表登記注冊(cè)方式來(lái)對(duì)注冊(cè)功能函數(shù)進(jìn)行注冊(cè)登記,能夠?qū)?現(xiàn)對(duì)所需注冊(cè)功能函數(shù)的快速查找。以上所述僅為本發(fā)明的較佳實(shí)施例,凡依本發(fā)明申請(qǐng)專利范圍所做的均等變化與修飾,皆應(yīng)屬本發(fā)明的涵蓋范圍。
權(quán)利要求
1. 一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法,其特征在于包括以下步驟步驟10、把機(jī)頂盒腳本調(diào)用的注冊(cè)功能函數(shù)進(jìn)行分類,每類函數(shù)對(duì)應(yīng)一個(gè)類名,并對(duì)每 個(gè)類分配一獨(dú)立的內(nèi)存空間進(jìn)行存儲(chǔ);步驟20、當(dāng)機(jī)頂盒注冊(cè)腳本程序時(shí),獲取一注冊(cè)功能函數(shù),并判斷該函數(shù)對(duì)應(yīng)的類在內(nèi) 存空間中是否存在,否,則分配一足夠大的內(nèi)存空間進(jìn)行存儲(chǔ),是則判斷該類的內(nèi)存空間是 否足夠存儲(chǔ)新的函數(shù),否則繼續(xù)分配一足夠大的內(nèi)存空間,再轉(zhuǎn)入步驟30,是則直接進(jìn)入步 驟30 ;步驟30、通過(guò)散列法把注冊(cè)功能函數(shù)名的字符串轉(zhuǎn)換為固定長(zhǎng)度的數(shù)值,其散列法步 驟如下步驟301、把注冊(cè)功能函數(shù)名的字符串全部轉(zhuǎn)換為大寫;步驟302、將轉(zhuǎn)換后的字符串從頭到尾開始按4個(gè)字節(jié)來(lái)組合成一個(gè)32位整型數(shù)據(jù),以 此類推直到最后4個(gè)字節(jié)組合成一個(gè)32位整型數(shù)據(jù),并把這些32位整型數(shù)據(jù)進(jìn)行加減乘 除,以及與或非運(yùn)算,最終得到一 32位的整型數(shù)據(jù);步驟303、把最終得到32位的整型數(shù)據(jù)作為該注冊(cè)功能函數(shù)名的字符串對(duì)應(yīng)的固定長(zhǎng) 度的hash數(shù)值;步驟40、將注冊(cè)功能函數(shù)所屬類的內(nèi)存空間中分配一個(gè)空間用來(lái)存儲(chǔ)該注冊(cè)功能函數(shù) 名的字符串、所述固定長(zhǎng)度的hash數(shù)值以及注冊(cè)功能函數(shù)的指針及注冊(cè)功能函數(shù)的相關(guān) 內(nèi)容,并將空間中的這些數(shù)據(jù)以鏈表的形式掛接在該注冊(cè)功能函數(shù)所屬類的空間下;步驟50、當(dāng)機(jī)頂盒腳本程序執(zhí)行一注冊(cè)功能函數(shù)時(shí),機(jī)頂盒腳本解析引擎會(huì)對(duì)腳本程 序所調(diào)用的注冊(cè)功能函數(shù)的字符串進(jìn)行hash運(yùn)算,得到該注冊(cè)功能函數(shù)對(duì)應(yīng)的hash數(shù) 值;步驟60、機(jī)頂盒腳本程序分析注冊(cè)功能函數(shù)所屬的類,找出該類的內(nèi)存空間,并將所述 根據(jù)函數(shù)字符串進(jìn)行hash運(yùn)算得到的hash數(shù)值與所述空間中的固定長(zhǎng)度的hash數(shù)值進(jìn) 行比對(duì),找出注冊(cè)功能函數(shù)hash數(shù)值相同的數(shù)據(jù),然后取出該注冊(cè)功能函數(shù)的字符串進(jìn)行 比對(duì),如果一樣則取出對(duì)應(yīng)注冊(cè)功能函數(shù)的指針及注冊(cè)功能函數(shù)的相關(guān)內(nèi)容交由腳本解析 引擎調(diào)用,如果不相同,則繼續(xù)比對(duì)別的注冊(cè)功能函數(shù)的hash數(shù)值。
全文摘要
本發(fā)明提供一種機(jī)頂盒腳本擴(kuò)充函數(shù)的方法,使用hash表登記注冊(cè)方式對(duì)注冊(cè)功能函數(shù)進(jìn)行注冊(cè)登記,將每個(gè)注冊(cè)功能函數(shù)進(jìn)行分類,并對(duì)每個(gè)類分配一獨(dú)立的內(nèi)存空間進(jìn)行存儲(chǔ);并在內(nèi)存空間中分配一個(gè)空間用來(lái)存儲(chǔ)該注冊(cè)功能函數(shù)名的字符串、固定長(zhǎng)度的hash數(shù)值以及注冊(cè)功能函數(shù)的指針等數(shù)據(jù),當(dāng)機(jī)頂盒腳本程序執(zhí)行一注冊(cè)功能函數(shù)時(shí),機(jī)頂盒腳本解析引擎會(huì)對(duì)腳本程序所調(diào)用的注冊(cè)功能函數(shù)的字符串進(jìn)行hash運(yùn)算,將得到的hash數(shù)值與空間中的固定長(zhǎng)度的hash數(shù)值進(jìn)行對(duì)比,相同時(shí)取出對(duì)應(yīng)注冊(cè)功能函數(shù)的指針交由腳本解析引擎調(diào)用。本發(fā)明加快了機(jī)頂盒腳本程序?qū)λ韬瘮?shù)進(jìn)行調(diào)用的速率,提高了機(jī)頂盒運(yùn)行的效率,給用戶帶來(lái)方便。
文檔編號(hào)G06F9/445GK102117217SQ20101056697
公開日2011年7月6日 申請(qǐng)日期2010年11月29日 優(yōu)先權(quán)日2010年11月29日
發(fā)明者方立 申請(qǐng)人:福建新大陸通信科技股份有限公司