XrmGetResource(3X11)

名前
XrmGetResource, XrmQGetResource, XrmQGetSearchList, XrmQGetSearchResource - データベースのリソースと検索リストの引き出し

書式
Bool XrmGetResource(database, str_name, str_class, str_type_return, value_return)
     XrmDatabase database;
     char *str_name;
     char *str_class;
     char **str_type_return;
     XrmValue *value_return;

Bool XrmQGetResource(database, quark_name, quark_class, quark_type_return, value_return)
     XrmDatabase database;
     XrmNameList quark_name;
     XrmClassList quark_class;
     XrmRepresentation *quark_type_return;
     XrmValue *value_return;

typedef XrmHashTable *XrmSearchList;

Bool XrmQGetSearchList(database, names, classes, list_return, list_length)
     XrmDatabase database;
     XrmNameList names;
     XrmClassList classes;
     XrmSearchList list_return;
     int list_length;

Bool XrmQGetSearchResource(list, name, class, type_return, value_return)
     XrmSearchList list;
     XrmName name;
     XrmClass class;
     XrmRepresentation *type_return;
     XrmValue *value_return;

引き数

class
    リソースクラスを指定。

classes
    リソースクラスのリストを指定。

database
    使われるデータベースを指定。

list
    が返す検索リストを指定。

list_length
    list_return に対してアロケートされたエントリーの数(バイト数ではない)を 指定。

list_return
    後で使用するための検索リストが返される。

name
    リソース名を指定。

names
    リソース名のリストが返される。

quark_class
    取り出される値の完全に限定されたクラスを指定(クォークとして)。

quark_name
    取り出される値の完全に限定された名前を指定(クォークとして)。

quark_type_return
    対象の表現型が返される(クォークとして)。

str_class
    取り出される値の完全に限定されたクラスを指定(文字列として)。

str_name
    取り出される値の完全に限定された名前を指定(文字列として)。

str_type_return
    対象の表現型が返される(文字列として)。

type_return
    データの表現型が返される。

value_return
    データベース内での値が返される。

説明
関数 と は、指定したデータベースからリソースを取り出す。 どちらの関数も完全に限定された名前/クラスの組、目的のリソース表現、値 のアドレス(サイズ/アドレスの組)を引き数として取る。 値と返される型はデータベースのメモリを指す。 したがって、このデータを変更してはならない。

データベースは のいずれかのエントリーを解放または上書きだけを行う。 新しい値をデータベースに格納しないクライアントや、データベースのマージ をしないクライアントは、返されたアドレスが存在する限り、これをいつ使っ ても安全である。 と のどちらもリソースが見つかった場合には を返し、 見つからなかった場合には を返す。

関数 は、名前とクラスのリストを引き数に取り、マッチが起こったと思われるデータ ベースのレベルのリストを返す。 返されるリストは最善から最悪の順で並んでおり、順位を決定するアルゴリズ ムは と同じである。 list_return が検索リストを格納できる十分な大きさならば、 は を返し、そうでなければ を返す。

関数を呼び出した側がアロケートしなければならない検索リストの大きさは、 データベースに格納されているリソース指定子が含むレベル数とワイルドカー ドの数によって決まる。 最悪の場合には、この大きさは %3 sup n% である。 ここで、 n は名前やクラスが含んでいる名前やクラスのコンポーネン トの数である。

を用い、その後に共通の名前とクラスのプレフィックスを使って複数回リソー スを検索する場合、 に渡す名前やクラスのリスト中では、共通のプレフィクスだけを指定すべきで ある。

関数 は、指定した名前とクラスで完全に識別されているリソースに対して、指定し たデータベースのレベルを検索する。 検索は最初にマッチした時点で終了する。 はリソースが見つかった場合には を返し、 見つからなかった場合には を返す。

リソース名の最後のコンポーネント以外の全てを含む名前とクラスのリストを 使って を呼び出し、続いて 最後のコンポーネントである名前とクラスを使って を呼び出すと、完全に限定された名前とクラスを使って と を呼び出した場合と同じデータベースのエントリーが返される。

マッチングの規則
与えられた問い合わせにマッチするリソースデータベースのエントリを決定す るアルゴリズムは、リソースマネージャの中心部分である。 どんな問い合わせの場合でも、必要なリソースの名前とクラスを完全に指定し なければならない(文字 ``*''と ``?'' の使用は許されない)。 ライブラリでは、完全な名前とクラスにおける100個までのコンポーネントの 使用をサポートしている。 リソースは、パターンマッチングの構成を使用して、一部だけ指定された名前 とクラスでデータベースに格納される。 アスタリスク(*)は緩い結合であり、任意の数のコンポーネントが間に入るこ とを表現するために使われる。これは、間にコンポーネントが全く入らないこ とを含む。 ピリオド(.)は強い結合であり、隣接するコンポーネント同士を分割するため に使われる。 疑問符(?)は、任意の名前かクラス1つにマッチさせるために使われる。 データベースのエントリーは、緩い結合で終えることはできない。 最後のコンポーネント(``?'' であってはならない)は、必ず指定しなければな らない。 検索アルゴリズムは、問い合わせられた完全な名前とクラスに最も近くマッチ する(最も明確である)エントリーについてデータベースを検索する。 1つ以上のデータベースのエントリーが完全な名前とクラスにマッチした場合 は、1つだけを選ぶために優先順位の規則が用いられる。

完全な名前とクラスは、左から右へ(最も高いレベルから低いレベルへ)向かっ て、一度に1つづつのコンポーネントを調べられる。 各レベルでは、対応するコンポーネントかマッチするそれぞれのエントリーの 結合あるいはその両方が決定され、マッチしたコンポーネントや結合は優先順 位の規則に基づいて比較される。 全ての中から1つのエントリーが規則によって決まるまで、次のレベルに移動 する前に、規則の各項目がそれぞれのレベルに適用される。 このルールを優先度の順に示す。

1.  マッチするコンポーネント(名前、クラス、``?'' 文字のいずれか)を含むエン トリーは、そのレベルを省いたエントリー(つまり、緩い結合でレベルがマッ チしているもの)よりも優先順位が高い。

2.  名前がマッチしているエントリーは、クラスがマッチしているエントリーや文 字 ``?'' を使ってマッチしているエントリーより優先順位が高い。 クラスがマッチしているエントリーは、文字 ``?'' を使ってマッチしている エントリーより優先順位が高い。

3.  強い結合によって導かれたエントリーは、緩い結合によって導かれたエントリー よりも優先順位が高い。

関連項目
XrmInitialize(3X11), XrmMergeDatabases(3X11), XrmPutResource(3X11), XrmUniqueQuark(3X11)
Xlib - C Language X Interface