0

[注] 質問を編集しようとしています。これが正しい場合は受け入れてください。元の質問は非常にあいまいです。

私にはやるべき仕事があります。ユーザーは、関数の名前と、必要に応じてクラスとファイルの名前を入力できます。チェックリストに応じて、この関数名をいくつかチェックする必要があります。ただし、問題は、チェックリストのチェックが関数ではなくファイルに対して記述されていることです。つまり、各ファイルに現れるすべてのクラスと関数のチェックについて説明します。そのため、ユーザーが関数名を入力したら、それを適切なファイルにマップし、適切なチェックを見つける必要があります。

これを行うための効率的な方法をいくつか教えてください。

編集: (できる限り簡単に、申し訳ありませんが、私の英語は最高ではありません ;))

プロファイリングしたいアプリケーション (スクリプト?) があるとしましょう (はい! プロファイラーのようなものを作成しています! :D)。しかし、問題があります。私たちのプロファイラーのユーザーは、少し奇妙な方法でプロファイリングする関数のリストを提供したいと考えています。

それで、彼は私たちに与えることができます: - 関数の名前 - その名前を持つすべての関数 (またはメソッド) をプロファイリングする必要があります (すべてのファイル、すべてのクラス、または標準ライブラリのようなものにある可能性があります (この場合)ファイル名はありません))。- クラスの名前 - このクラスのすべての関数/メソッドをプロファイリングする必要がありますが、クラス自体はいくつかのファイルのどこにでもある可能性があります (同じ名前の異なるクラスを持つことができます) - ファイルの名前 - この中のすべてをプロファイリングする必要がありますファイルですが、同じ名前のファイルがほとんどない可能性があります (そのため、すべてのファイルですべての関数/メソッドをプロファイルする必要があります)。

そして、上記のすべての組み合わせなので、クラス ("Bar" と呼びましょう) と関数 ("foo") がある場合、クラス "Bar" でこの関数 "foo" をプロファイルする必要がありますが、クラスは任意のファイルに含めることができます。 (いくつかのファイルにいくつかの「バー」クラスが存在する可能性があります。ファイル名と関数名がある場合、ファイル内のその名前を持つすべての関数をプロファイルする必要があります (クラスの内部または外部に関係なく) (ただし、まだ存在します)同じ名前のファイルがいくつかある場合があります)。

プロファイラーの実行関数を既に置き換えているため (はい、プロファイラー自体は動作しています)、ファイルやクラスが少ないことは実際には問題ではありませんが、問題は関数 (およびクラスとファイル) の名前を格納する方法です。関数を検索するには、可能な限り (高速であればメモリは重要ではありません) プロファイルにする必要があります (要するに: 実行関数は、この関数をプロファイルする必要があるかどうかを尋ねます。または、いいえ、答えを出す必要があります。実行関数には、関数名があります。 (確かに)、クラス名 (関数がクラスのメソッドの場合)、およびファイル名 (関数が標準ライブラリのメソッドでない場合)。

4

2 に答える 2

0

チェック リスト情報を格納する xml ファイルを生成できます。なので :

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

プログラムを実行すると、xml がメモリに読み込まれ、各階層がオブジェクトを構築し、上位階層のオブジェクトに下位のオブジェクトが含まれます。そして 3 つのマップ リストを作成します。最初の 'string' はファイルまたはクラスまたは関数の名前で、2 番目の 'object*' は xml によって作成されたオブジェクトへのポイントです。

情報を取得したら、 map::find を使用して検索できます。「object1」が見つかった場合は、「object1」とそれに含まれるオブジェクトで定義されたメソッドを実行できます。

于 2012-08-08T12:38:25.450 に答える
0

すべてのファイル->クラス->関数を一度調べて、関数名をキー、クラスとファイル情報を値としてマップ(ハッシュマップ)を作成できます。

ユーザーが関数名を入力 -> マップを検索してファイル/クラス名を即座に取得 -> ファイル名のルール リストを検索し、ルールを適用します。

于 2012-08-08T13:17:28.723 に答える