2012-08-08 75 views
0

[注]我嘗試編輯你的問題。請接受,如果這是正確的。原來的問題非常模糊。3層結構搜索(雙向)

我有一些任務要做。用戶可以輸入函數的名稱以及可選的類和文件的名稱。我必須根據檢查列表對這個函數名稱執行一些檢查。然而,問題在於檢查列表中的檢查是針對文件描述的,而不是針對功能描述的。它描述了對每個文件中出現的所有類和函數的檢查。所以,當用戶輸入函數名稱時,我需要將其映射到正確的文件並找出正確的檢查。

你能否建議一些有效的方法來做到這一點?

編輯:(簡單,我可以,對不起我的英語不是最好的;))

比方說,我們有一個應用程序(腳本),我們要分析哪一個(是的,我們?!正在創造類似於探查器的東西!:D)但我們不想檢查所有的東西,只有很少的功能。但是有問題。我們的分析器的用戶想要以一些奇怪的方式給出函數列表來進行配置。因此,他可以給我們: - 函數的名稱 - 我們需要描述具有該名稱的每個函數(或方法),不管它在哪裏(可以在每個文件或每個類或類似標準庫(在這種情況下,我們沒有文件名))。 - 類的名稱 - 我們需要分析這個類中的每個函數/方法,但類本身可以在幾個文件中的任何地方(我們可以有不同的類具有相同的名稱) - 文件的名稱 - 我們需要描述一切在這個文件中,但可以有很少的文件具有相同的名稱(因此在每個文件中我們需要分析每個函數/方法)。所以如果我們有類(我們稱之爲「Bar」)和函數(「foo」),我們需要在類「Bar」中剖析這個函數「foo」,但仍然可以class如果我們有文件名和函數名,我們需要在文件中對每個具有該名稱的函數進行概要分析(不管它是否在任何類的內部或外部) (但仍然可以有很少的文件具有相同的名稱)

幾乎沒有文件或幾個類是不是真的有問題,因爲我已經在profiler中替換執行函數(是的,分析器本身工作),但問題是如何存儲函數(以及類和文件)的名稱,以便儘可能快地(內存實際上並不重要)來搜索函數shou ld是簡介(簡而言之,執行功能要求關於它應該描述這個函數或否,我們需要給出答案,在執行函數中我們有函數名(肯定),類名(如果函數是類的方法)和文件名稱(如果函數不是來自標準庫)。

+0

uhhmmm ...我想一個小例子會幫助我理解你的問題 – 2012-08-08 12:26:00

+0

我什麼都不懂。 – 2012-08-08 12:26:16

+0

我不知道你在問什麼。 – acraig5075 2012-08-08 12:26:47

回答

0

您可以生成一個xml文件來存儲您的檢查清單信息。如:

<file name="file1"...> 
    <class name="class1" ...> 
     <func name=" func1" ... /> 
    </class> 
</file> 

當你運行你的程序,讀取xml到內存中,每個層次建立一個對象和高層次對象包括較低的對象。 並構建三個地圖列表,其中第一個「字符串」是文件或類或func的名稱,第二個「對象*」是指向由xml構建的對象的點。

當你得到一個信息,你可以使用map :: find來搜索它。如果找到'object1',則可以執行'object1'及其包含對象中定義的方法。

+0

您是否有意選擇了適合該問題的句子?這個答案似乎非常模糊。例如什麼是'地圖列表'?地圖或列表?什麼是'指向對象'?你的意思是指針嗎? – PermanentGuest 2012-08-08 12:48:07

+0

它是一張地圖,地圖的第二個元素是一個指針。 – aasa 2012-08-08 13:16:08

0

您可以通過所有文件 - >類 - >函數並創建一個函數名稱作爲鍵和類和文件信息作爲值的映射(哈希映射)。

用戶輸入函數名稱 - >您通過搜索地圖即時獲取文件/類名 - >您尋找文件名的規則列表並應用規則。

+0

如果用戶只給我類名(這意味着我需要爲類中的每個函數完成我的工作)或文件名(就像之前一樣,但對於文件中的每個函數和/或每個函數/方法在文件中的每個類中)。 – Matthew 2012-08-08 16:22:06

+0

它會起作用,如果你爲一個類名創建了同樣類型的地圖 - 你將能夠找到它的文件名。然後你可以在前進的方向上,從課堂到功能,這很容易。 當用戶給你一個文件名,你可以枚舉所有的類和功能,並完成你的工作。這並不耗時,因爲一個文件後面包含太多的功能。 – Steed 2012-08-09 07:36:30