(57)【要約】コンピューティングシステムが列調整プロセスを実行する。列調整プロセスでは、表計算アプリケーションのテーブル内の一組のターゲット列のそれぞれの列に対する全体的な最大の列幅を決定するために複数のスレッドを使用する。ターゲット列のそれぞれについて、ターゲット列に対する全体的な最大の列幅は、列内の任意のセル内の値の幅が最も広いテキスト表現の幅に基づく。その一組のターゲット列は、少なくとも１つの列を含む。次いで、コンピューティングシステムは、その一組のターゲット列のそれぞれの列がその列に対する全体的な最大の列幅に基づく幅を有するよう、表計算アプリケーションのテーブルをリフローする。行の高さを調整する場合も、これと類似のプロセスを実行する。
2013530446.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングシステムが、複数のスレッドを使用して表計算アプリケーションのテーブル内の一組のターゲット列のそれぞれの列に対して全体的な最大の列幅を決定する列調整プロセスを実行するステップであって、前記一組のターゲット列は少なくとも１つの列を含む、ステップと、
前記一組のターゲット列のそれぞれの列が前記列に対する前記全体的な最大の列幅に基づく幅を有するよう、前記表計算アプリケーションのテーブルをリフローするステップと
を含むことを特徴とする方法。
【請求項２】
前記列調整プロセスを実行するステップは、
前記表計算アプリケーションのテーブル内の行を複数のワークユニットに分割するステップであって、前記幅評価スレッドのそれぞれが前記複数のワークユニットから１つまたは複数のワークユニットを選択し、前記１つまたは複数の選択されたワークユニット内のそれぞれの列についてローカルの最大の列幅を決定する、ステップと、
前記一組のターゲット列のそれぞれの列について、前記列に対する前記ローカルの最大の列幅のうちの最大値を識別することによって、前記全体的な最大の列幅を識別するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記列調整プロセスを実行するステップは、前記複数のワークユニット内のワークユニットの数に基づき、および処理システム内の処理ユニットの数に基づき幅評価スレッドの適切な数を決定するステップを含み、
幅評価スレッドの数は、幅評価スレッドの前記適切な数に等しいことを特徴とする請求項２に記載の方法。
【請求項４】
前記列調整プロセスを実行するステップは、
前記一組のターゲット列内のセルの数が下限を超えるかどうかを判定するステップと、
前記一組のターゲット列内のセルの前記数が前記下限を超えない場合、単一のスレッドを使用して、前記全体的な最大の列幅を決定するステップと
を含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記幅評価スレッドのそれぞれは、デバイスコンテキストを作成し、
前記幅評価スレッドのそれぞれは、前記幅評価スレッドによって作成された前記デバイスコンテキストを使用して、前記一組のターゲット列内のセル内のテキストの幅を評価することを特徴とする請求項１に記載の方法。
【請求項６】
前記表計算アプリケーションのテーブルのセル内の値は、１つまたは複数の外部データソース内のデータから導出され、
前記方法は、前記表計算アプリケーションのテーブルの前記セル内の前記値が前記１つまたは複数の外部データソースから更新されたときに、前記列調整プロセスを起動するステップをさらに含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記コンピューティングシステムが、ユーザーから１つまたは複数の列選択入力を受け取るステップをさらに含み、前記１つまたは複数の列選択入力は前記一組のターゲット列の列を示すことを特徴とする請求項１に記載の方法。
【請求項８】
１つまたは複数の処理ユニットを備える処理システムと、
表計算アプリケーションを表現するコンピュータ可読命令を格納するデータストレージシステムであって、前記コンピュータ可読命令は、前記１つまたは複数の処理ユニットによって実行されたときに、前記表計算アプリケーションを実現することを前記コンピューティングシステムに行わせ、前記表計算アプリケーションは、
複数のスレッドを使用して表計算アプリケーションのテーブル内の、少なくとも１つの行を含む一組のターゲット行のそれぞれの行について、前記一組のターゲット行内のセルの数が下限を超えたときに、全体的な最大の行の高さを決定する行調整プロセスを実行し、
前記一組のターゲット行のそれぞれの列が前記行に対する前記全体的な最大の行の高さに基づく高さを有するよう、前記表計算アプリケーションのテーブルをリフローする
ように構成される、データストレージシステムと
を備えることを特徴とするコンピューティングシステム。
【請求項９】
前記表計算アプリケーションは、前記行調整プロセスの一部として
前記表計算アプリケーションのテーブル内の列を複数のワークユニットに分割し、前記高さ評価スレッドのそれぞれが前記複数のワークユニットから１つまたは複数のワークユニットを選択し、前記１つまたは複数の選択されたワークユニット内のそれぞれの行についてローカルの最大の行の高さを決定し、前記ワークユニットのそれぞれは、余りのワークユニットを除いて、同じ数の列を含み、さらに
前記一組のターゲット行のそれぞれの行について、前記行に対する前記ローカルの最大の行の高さのうちの最大値を識別することによって、前記全体的な最大の行の高さを識別することを特徴とする請求項８に記載のコンピューティングシステム。
【請求項１０】
前記表計算アプリケーションは、前記行調整プロセスの一部として
前記複数のワークユニット内のワークユニットの数に基づき、および前記処理システム内の前記処理ユニットの数に基づき高さ評価スレッドの適切な数を決定し、
高さ評価スレッドの数は、高さ評価スレッドの前記適切な数に等しいことを特徴とする請求項９に記載のコンピューティングシステム。
【請求項１１】
前記表計算アプリケーションは、前記行調整プロセスの一部として
前記一組のターゲット行内のセルの数が下限を超えるかどうかを判定し、
前記一組のターゲット行内のセルの数が前記下限を超えない場合、単一のスレッドを使用して、前記全体的な最大の行の高さを決定することを特徴とする請求項８に記載のコンピューティングシステム。
【請求項１２】
前記高さ評価スレッドのそれぞれは、デバイスコンテキストを作成し、前記デバイスコンテキストを使用して前記一組のターゲット行内のセル内のテキストの高さを評価することを特徴とする請求項８に記載のコンピューティングシステム。
【請求項１３】
前記表計算アプリケーションは、表示システムを使用して、前記表計算アプリケーションのユーザーに対して前記表計算アプリケーションのテーブルを表示することを特徴とする請求項８に記載のコンピューティングシステム。
【請求項１４】
前記一組のターゲット行は、前記表計算アプリケーションのテーブル内の行の全部ではなく一部を含むことを特徴とする請求項８に記載のコンピューティングシステム。
【請求項１５】
コンピュータ可読命令を格納するコンピュータ可読データ記憶媒体であって、前記コンピュータ可読命令は、コンピューティングシステムの処理システム内の１つまたは複数の処理ユニットによって実行されたときに、前記コンピューティングシステムに
グラフィカルユーザーインターフェースに表計算アプリケーションのテーブルを表示させるステップと、
前記表計算アプリケーションのユーザーから１つまたは複数の列選択入力を受け取るステップであって、前記１つまたは複数の列選択入力は前記表計算アプリケーションのテーブル内の一組のターゲット列を示し、前記一組のターゲット列は前記表計算アプリケーションのテーブル内の１つまたは複数の列を示す、ステップと、
前記一組のターゲット列内のセルの数が下限を超えるかどうかを判定するステップと、
前記一組のターゲット列内のセルの前記数が前記下限を超えない場合、単一のスレッドを使用して、前記ターゲット列に対する全体的な最大の列幅を決定するステップと、
前記一組のターゲット列内のセルの前記数が前記下限を超える場合、
前記表計算アプリケーションのテーブル内の行を複数のワークユニットに分割するアクションであって、前記ワークユニットのそれぞれは、余りのワークユニットを除いて、場合により同じ数の行を含む、アクションと、
前記複数のワークユニット内のワークユニットの数に基づき、および前記処理システム内の前記処理ユニットの数に基づき幅評価スレッドの適切な数を決定するアクションと、
複数の幅評価スレッドを起こすアクションであって、前記複数の幅評価スレッド内の幅評価スレッドの数は幅評価スレッドの前記適切な数に等しく、前記複数の幅評価スレッド内のそれぞれの幅評価スレッドは前記複数のワークユニット内の残りのワークユニットがなくなるまで
デバイスコンテキストを作成するアクションと、
前記複数のワークユニットのうちの１つまたは複数のワークユニットを選択するアクションと、
前記デバイスコンテキストのうちの１つを使用して前記１つまたは複数の選択されたワークユニット内のセル内のテキストの幅を計算するアクションと、
前記１つまたは複数の選択されたワークユニット内の前記セル内のテキストの前記幅を使用して、前記一組のターゲット列のそれぞれの列のローカルの最大の列幅を決定するアクションと、
を実行するアクションと、
前記幅評価スレッドによって決定された前記ローカルの最大の列幅を使用して、前記一組のターゲット列に対する前記全体的な最大の列幅を決定するアクションと
を実行するステップと、
前記一組のターゲット列のそれぞれの列が前記列に対する前記全体的な最大の列幅に基づく幅を有するよう、前記表計算アプリケーションのテーブルをリフローし、それにより、前記表計算アプリケーションのテーブルを前記表計算アプリケーションのユーザーに対して表示させるステップと
を実行するように構成された表計算アプリケーションを実現させることを特徴とするコンピュータ可読データ記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、列幅または行の高さのマルチスレッド方式による調整に関する。
【背景技術】
【０００２】
表計算アプリケーションを使用することで、ユーザーは表形式データを表示し、操作することができる。例えば、表計算アプリケーションを使用することで、ユーザーは複数の倉庫で複数の製品の一覧表を含むテーブルを表示し、操作することができる。表計算アプリケーションのテーブルを表示するときに、ユーザーは、表計算アプリケーションのテーブルのセル内の値が完全な形で見えることを好む。しかし、表計算アプリケーションのテーブル内の列の幅が狭すぎると、列内の１つまたは複数のセル内の値が切り詰められて見える場合がある。例えば、与えられた列内のセルに２０文字の製品名が含まれる可能性があるが、与えられた列は、１６文字分の幅しかない。その結果、この例では、このセルの隣のセル内に値がある場合に、ユーザーはその数の４桁分を見ることができない。
【０００３】
ユーザーが、表計算アプリケーションのテーブルのセル内の値を完全な形で見ることができるようにするために、表計算アプリケーション側で、表計算アプリケーションのデータ内の列の幅を自動的に調整するプロセスを実行することができる。このプロセスは、それらのセルのうちのそれぞれのセル内のテキストの幅に関する決定を下す必要がある場合がある。表計算アプリケーションのテーブル内のセルの数が多い場合、表計算アプリケーションのテーブル内の列の幅を調整するプロセスは、比較的低速なものとなる可能性がある。そのような遅延があると、ユーザーの思考が妨げられたり、ユーザーが表計算アプリケーションのテーブル内の列の幅を調整するプロセスを起動する気をなくしてしまう可能性がある。したがって、表計算アプリケーションのテーブル内の列の幅を調整するプロセスをできる限り素早くすることが望ましい。
【発明の概要】
【０００４】
コンピューティングシステムが列調整プロセスを実行する。列調整プロセスでは、表計算アプリケーションのテーブル内の列に対する全体的な最大の列幅を決定するために複数のスレッドを使用する。それらの列のそれぞれについて、列に対する全体的な最大の列幅は、列内の任意のセル内の任意の値の幅が最も広いテキスト表現の幅に基づく。次いで、コンピューティングシステムは、列が列に対する全体的な最大の列幅に基づく幅を有するよう、表計算アプリケーションのテーブルをリフローする。
【０００５】
同様に、コンピューティングシステムは、行調整プロセスを実行する。行調整プロセスでは、表計算アプリケーションのテーブル内の行に対する全体的な最大の行の高さを決定するために複数のスレッドを使用する。行に対する全体的な最大の行の高さは、行内の任意のセル内の任意の値の高さが最も高いテキスト表現の高さに基づく。次いで、コンピューティングシステムは、行が行に対する全体的な最大の行の高さに基づく高さを有するよう、表計算アプリケーションのテーブルをリフローする。
【０００６】
この概要は、概念の選択を紹介するために用意されている。これらの概念は、以下の「発明を実施するための形態」で説明される。この「発明の概要」は、請求されている主題の鍵となる特徴または本質的特徴を明示することを意図しておらず、また請求されている主題の範囲を確定する補助としても意図していない。
【図面の簡単な説明】
【０００７】
【図１】例示的なコンピューティングシステムを示すブロック図である。
【図２】コンピューティングシステムの例示的な代替的実施形態を示すブロック図である。
【図３】表計算アプリケーションが列幅を調整する例示的なオペレーションを示す流れ図である。
【図４】幅評価スレッドの例示的なオペレーションを示す流れ図である。
【図５】例示的なコンピューティングデバイスを示すブロック図である。
【発明を実施するための形態】
【０００８】
図１は、例示的なコンピューティングシステム１００を示すブロック図である。コンピューティングシステム１００は、１つまたは複数のコンピューティングデバイスを備えるシステムである。本明細書で使用されているように、コンピューティングデバイスは、情報処理する物理的な有形のデバイスである。さまざまな実施形態において、コンピューティングシステム１００は、さまざまな種類のコンピューティングデバイスを備える。例えば、コンピューティングシステム１００は、１つまたは複数のデスクトップコンピュータ、ラップトップコンピュータ、ネットブックコンピュータ、ハンドヘルドコンピューティングデバイス、スマートフォン、スタンドアロンのサーバーデバイス、ブレードサーバーデバイス、メインフレームコンピュータ、スーパーコンピュータ、および／または他の種類のコンピューティングデバイスを備えることができる。コンピューティングシステム１００が複数のコンピューティングデバイスを備える実施形態では、コンピューティングシステム１００内のコンピューティングデバイスは、インターネットまたはローカルエリアネットワークなどの通信ネットワークを介してさまざまなロケーションに分散させることができる。
【０００９】
図１の例に示されているように、コンピューティングシステム１００は、データストレージシステム１０２、処理システム１０４、および表示システム１０６を備える。他の実施形態では、コンピューティングシステム１００は、図１の例に示されているよりも多い、または少ないコンポーネントを備えることは理解されるであろう。さらに、図１は、簡単に考察できるようにコンピューティングシステム１００を簡略化された形態で示していることも理解されるであろう。
【００１０】
データストレージシステム１０２は、１つまたは複数のコンピュータ可読データ記憶媒体を備えるシステムである。コンピュータ可読データ記憶媒体は、揮発性または不揮発性の形態でデータを格納することができる物理的デバイスまたは製造品である。いくつかの実施形態では、データストレージシステム１０２は、非一時的である１つまたは複数のコンピュータ可読データ記憶媒体を備える。コンピュータ可読データ記憶媒体のいくつかの種類の例として、ＲＡＭ（ランダムアクセスメモリ）、ＲＯＭ（リードオンリーメモリ）、光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ、ＢｌｕＲａｙディスク、ＨＤＤＶＤディスクなど）、磁気ディスク（例えば、ハードディスクドライブ、フロッピィディスクなど）、ソリッドステートメモリデバイス（例えば、フラッシュメモリドライブ）、ＥＥＰＲＯＭ、フィールドプログラマブルゲートアレイ、ならびに他の種類の非一時的デバイスおよび製造品が挙げられる。データストレージシステム１０２が複数のコンピュータ可読データ記憶媒体を備えるいくつかの実施形態では、コンピュータ可読データ記憶媒体は、さまざまな地理的位置にわたって分散される。
【００１１】
データストレージシステム１０２は、表計算アプリケーション１０８を表現するコンピュータ可読命令を格納する。いくつかの実施形態では、これらのコンピュータ可読命令は、表計算アプリケーションであるＭＩＣＲＯＳＯＦＴ（登録商標）ＥＸＣＥＬ（登録商標）または別の表計算アプリケーションの一バージョンを表現する。データストレージシステム１０２が複数のコンピュータ可読データ記憶媒体を備えるいくつかの実施形態では、表計算アプリケーション１０８を表現するコンピュータ可読命令は、コンピュータ可読データ記憶媒体の２つまたはそれ以上に分散される。データストレージシステム１０２が複数のコンピュータ可読データ記憶媒体を備える他の実施形態では、表計算アプリケーション１０８を表現するコンピュータ可読命令は、コンピュータ可読データ記憶媒体の１つのみに格納される。
【００１２】
処理システム１０４は、複数の処理ユニット１１０Ａから１１０Ｎ（「処理ユニット１１０」と総称する）を備えるシステムである。さまざまな実施形態において、処理システム１０４は、さまざまな数の処理ユニットを備える。例えば、処理システム１０４は、２個、４個、８個、１６個、３２個、６４個、または他の個数の処理ユニットを備えることができる。処理ユニット１１０のそれぞれは、物理的集積回路である。処理ユニット１１０のそれぞれは、他の処理ユニット１１０と非同期にコンピュータ可読命令を実行することができる。その結果、これらの処理ユニット１１０は、コンピュータ可読命令を互いに並列に独立して実行することができる。
【００１３】
表示システム１０６は、ユーザーに対して情報を表示するために処理システム１０４によって使用されるシステムである。さまざまな実施形態では、表示システム１０６は、ユーザーに対してさまざまな形で情報を表示する。例えば、いくつかの実施形態では、表示システム１０６は、グラフィックスインターフェースおよびモニターを備える。
【００１４】
処理システム１０４内の処理ユニット１１０は、表計算アプリケーション１０８を表現するコンピュータ可読命令を実行する。表計算アプリケーション１０８を表現するコンピュータ可読命令は、処理ユニット１１０によって実行されたときに、表計算アプリケーション１０８を実現することをコンピューティングシステム１００に行わせる。表計算アプリケーション１０８を使用することで、ユーザーは計算アプリケーションのテーブルを表示し、操作することができる。表計算アプリケーションのテーブルは、１つまたは複数の行および１つまたは複数の列に編成された表形式のデータセットである。例えば、表計算アプリケーションのテーブルは、表計算アプリケーション内の完全なテーブル、テーブルの一部、ピボットテーブル、または表計算アプリケーションの別の種類のテーブルとすることができる。表計算アプリケーションのテーブルは、さまざまな種類のデータを収めることができる。例えば、表計算アプリケーションのテーブルは、売上高データ、在庫品目データ、軍事データ、課金データ、統計データ、人口データ、人口統計データ、財務データ、医療データ、スポーツデータ、科学データ、または表の形で提示することができる他の種類のデータを収めることができる。
【００１５】
表計算アプリケーションのテーブル内のそれぞれのセルは、値を有することができる。セル内の値は、さまざまなデータ型を有することができる。例えば、特定の列または特定の行内のすべてのセルは、整数、実数、浮動小数点数、英数字テキスト文字列、日付、金額、論理値、などであってよい。
【００１６】
ユーザーが表計算アプリケーション１０８を操作しているときに、表計算アプリケーション１０８は、表示システム１０６を使用している表計算アプリケーション１０８のユーザーに対して表計算アプリケーションのテーブルをグラフィカルユーザーインターフェースに表示させる。表計算アプリケーション１０８は、１つまたは複数の異なる種類のイベントに応答して、調整プロセスを実行し、表計算アプリケーションのテーブル内の一組のターゲット列のそれぞれの列に対する全体的な最大の列幅を決定する。列調整プロセスでは、いくつかの表計算アプリケーションのテーブル内の列に対する全体的な最大の列幅を決定するために複数の幅評価スレッドを使用する。列調整プロセスでは、他の表計算アプリケーションのテーブル内の列に対する全体的な最大の列幅を決定するために単一の幅評価スレッドを使用する。列に対する全体的な最大の列幅は、列内の任意のセル内の値の最も広いテキスト表現の幅である。表計算アプリケーション１０８は、その一組のターゲット列のそれぞれの列がその列に対する全体的な最大の列幅に基づく幅を有するよう、表計算アプリケーションのテーブルをリフローする。表計算アプリケーション１０８が、表計算アプリケーションのテーブルをリフローするときに、表計算アプリケーション１０８は、表示システム１０６に、リフローされた表計算アプリケーションのテーブルを表示させる。
【００１７】
ターゲット列は、表計算アプリケーション１０８が列調整プロセスを実行する表計算アプリケーションのテーブル内の列である。この一組のターゲット列は、表計算アプリケーションのテーブル内の少なくとも１つの列を含む。つまり、この一組のターゲット列は、表計算アプリケーションのテーブル内の単一列を含むことができるか、または表計算アプリケーションのテーブル内の複数の列を含むことができる。さらに、いくつかの場合において、この一組のターゲット列は、表計算アプリケーションのテーブル内の列のすべてを含むことができる。さらに、いくつかの実施形態において、表計算アプリケーション１０８のユーザーは、その一組のターゲット列の列を選択することができる。言い換えると、表計算アプリケーション１０８は、ユーザーから１つまたは複数の列選択入力を受け取るということである。列選択入力は、ターゲット列を示す。例えば、表計算アプリケーションのテーブルは、列「Ａ」から「Ｆ」までを備える。この例では、ユーザーは、列調整プロセスを列「Ａ」、「Ｃ」、および「Ｄ」に関して実行すべきであることを示す１つまたは複数の列選択入力を表計算アプリケーション１０８に送る。いくつかの実施形態では、この一組のターゲット列は、ユーザーによってその幅が手動で設定された列を含まない。
【００１８】
さまざまな実施形態では、列の幅は、さまざまな形で列に対する全体的な最大の列幅に基づくものとしてよい。例えば、いくつかの実施形態では、列の幅は、列に対する全体的な最大の列幅に等しい。他の実施形態では、列の幅は、列に対する全体的な最大の列幅にバッファの幅を加えた値に等しい。バッファは、隣接する列のセル内の値の間を視覚的に仕切る、セル内の値のいずれかの側に関するスペースを備える。バッファは、列のヘッダ内の制御要素をレンダリングするのに必要なスペースを含むこともできる。このようなコントロール要素としては、例えばオートフィルタードロップダウンボタンが挙げられる。バッファの幅は、典型的には小さい（例えば、いずれかのサイズ上で５ピクセル未満）。
【００１９】
以下の例は、列調整プロセスの効果を示す。この例では、表計算アプリケーションのテーブル内の１つの列は、３つのセルを備える。この例では、第１のセルは、幅５４ピクセルのテキストを含み、第２のセルは、幅６３ピクセルのテキストを含み、第３のセルは、幅３４ピクセルのテキストを含む。この例では、列は、最初に幅５０ピクセルである。列調整プロセスは、列の幅が、６３ピクセルにバッファの幅が加えられた値となるように列の幅を調整する。したがって、列調整プロセスを実行した結果、ユーザーは第２のセル内において完全な値を見ることができる。
【００２０】
前段落の例では、３つのセルを含む単一の列のみを備える非常に単純な表計算アプリケーションのテーブルを説明している。多くの状況において、実際の表計算アプリケーションのテーブルは、数千行、数千列、および数百万セルを備えうる。その結果、セルのそれぞれにおけるテキストの幅を順次評価する作業は、時間およびリソースを多量に消費する可能性がある。複数の幅評価スレッドを使用することによって、大きな表計算アプリケーションのテーブル上で列調整プロセスを実行するのに要する時間は、幅評価スレッドの数に比例して短縮されうる。
【００２１】
本明細書の大部分においてセル内のテキストの列幅の調整およびテキストの幅の評価を説明しているが、行調整プロセスも、説明されている列調整プロセスと類似の方法で動作しうる。本明細書の説明は、列の説明が行の説明に置き換えられ、幅の説明が高さの説明に置き換えられる場合に行調整プロセスにも当てはまる。表計算アプリケーション１０８は、行調整プロセスを使用して、表計算アプリケーションのテーブル内のそれぞれの行がその行に対する全体的な最大の行の高さに基づく高さを有するよう、表計算アプリケーションのテーブルをリフローする。行調整プロセスでは、表計算アプリケーションのテーブル内のそれぞれの行に対する全体的な最大の行の高さを決定するために複数の高さ評価スレッドを使用する。行に対する全体的な最大の行の高さは、行内の任意のセル内の最も高いテキストの高さである。
【００２２】
図２は、コンピューティングシステム１００の例示的な代替的実施形態を示すブロック図である。図２の例に示されているように、コンピューティングシステム１００は、図１に示されている例示的な実施形態のように、データストレージシステム１０２および処理システム１０４を備える。しかし、図１に示されている例示的な実施形態とは異なり、図２に示されているコンピューティングシステム１００の例示的な代替的実施形態は、表示システム１０６の代わりにネットワークインターフェース２００を有する。
【００２３】
ネットワークインターフェース２００を使用することで、コンピューティングシステム１００はネットワーク２０４を介してクライアントデバイス２０２からデータを送受信することができる。ネットワーク２０４は、コンピューティングデバイスならびにコンピューティングシステム１００およびクライアントデバイス２０２の間の通信を円滑にするリンクを備える通信ネットワークである。さまざまな実施形態において、ネットワーク２０４は、さまざまな種類のコンピューティングデバイスを備える。例えば、ネットワーク２０４は、ルーター、スイッチ、モバイルアクセスポイント、ブリッジ、ハブ、侵入検出デバイス、ストレージデバイス、スタンドアロンのサーバーデバイス、ブレードサーバーデバイス、センサー、デスクトップコンピュータ、ファイアウォールデバイス、ラップトップコンピュータ、ハンドヘルドコンピュータ、携帯電話、および他の種類のコンピューティングデバイスを備えることができる。さまざまな実施形態において、ネットワーク２０４は、さまざまな種類のリンクを備える。例えば、ネットワーク２０４は、有線および／またはワイヤレスリンクを備えることができる。さらに、さまざまな実施形態において、ネットワーク２０４は、さまざまなスケールで実装される。例えば、ネットワーク２０４は、１つまたは複数のローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク、サブネット、ワイドエリアネットワーク（インターネットなど）として実装されうるか、または別のスケールで実装されうる。
【００２４】
クライアントデバイス２０２は、コンピューティングデバイスである。例えば、クライアントデバイス２０２は、ユーザーによって使用されるパーソナルコンピュータであってよい。ユーザーは、クライアントデバイス２０２を使用して、ネットワーク２０４を介して、要求をコンピューティングシステム１００に送信し、コンピューティングシステム１００からデータを受信する。このようにして、ユーザーは、クライアントデバイス２０２を使用し、表計算アプリケーション１０８を使用することで表形式データを表示し操作することができる。例えば、コンピューティングシステム１００は、ネットワーク２０４を介して、データをクライアントデバイス２０２に送信することができる。この例では、クライアントデバイス２０２は、表計算アプリケーション１０８から受け取ったデータを処理してクライアントデバイス２０２のユーザーに対して提示するように構成される。例えば、クライアントデバイス２０２は、表計算アプリケーションのテーブルを含むウェブページをレンダリングするか、またはクライアントアプリケーションと相互にやり取りして表計算アプリケーションのテーブルを表示することができる。
【００２５】
図３は、表計算アプリケーション１０８が列幅を調整する例示的なオペレーション３００を示す流れ図である。表計算アプリケーション１０８は、さまざまなイベントに応答してオペレーション３００を起動することができる。例えば、いくつかの実施形態では、表計算アプリケーションのテーブル内のデータを１つまたは複数の外部データソース内のデータから導出する。外部データソースは、リレーショナルデータベース、他の表計算アプリケーションのテーブル、ログファイル、ＸＭＬファイル、ディレクトリ、および／または他の種類のデータソースとすることができる。この例では、表計算アプリケーション１０８は、表計算アプリケーションのテーブルのセル内の値が１つまたは複数の外部データソースから更新されたときにオペレーション３００を起動する。別の例では、表計算アプリケーションのテーブルはピボットテーブルである。ピボットテーブル内のデータは、１つまたは複数の他の表計算アプリケーションのテーブルから導出される。この例では、表計算アプリケーション１０８は、ピボットテーブル内のセル内の値が１つまたは複数の他の表計算アプリケーションのテーブルから更新されたときにオペレーション３００を起動する。さらに別の例では、表計算アプリケーション１０８は、表計算アプリケーション１０８のユーザーが表計算アプリケーションのテーブルのセル内に１つまたは複数の値を入力したときにオペレーション３００を起動する。さらに別の例では、表計算アプリケーション１０８は、表計算アプリケーション１０８のユーザーから列調整プロセスを実行する命令を受け取ったことに応答してオペレーション３００を起動する。さらに別の例では、表計算アプリケーション１０８は、表計算アプリケーション１０８のユーザーが表計算アプリケーションのテーブル内のデータの書式を変更するときにオペレーション３００を起動する。
【００２６】
起動した後、表計算アプリケーション１０８は、一組のターゲット列内のセルの総数が下限を超えるかどうかを判定する（３０２）。この一組のターゲット列は、表計算アプリケーションのテーブルの列のうちの少なくとも１つの列を含む。さまざまな実施形態において、この一組のターゲット列は、さまざまな方法で決定される。例えば、いくつかの実施形態では、表計算アプリケーション１０８は、ユーザーから列選択入力を受け取る。列選択入力は、ターゲット列を示す。別の例では、表計算アプリケーション１０８は、表計算アプリケーションのテーブル内の列のすべてをその一組のターゲット列として自動的に使用する。さらに別の例では、表計算アプリケーションのテーブル内のセルの値が外部データソースから更新される場合、その一組のターゲット列は更新された値を持つセルが入っている列を含む。
【００２７】
さまざまな実施形態において、表計算をアプリケーション１０８は、さまざまな下限を使用する。例えば、いくつかの実施形態では、下限は２０５６セルである。他の実施形態では、他の下限が使用される（例えば、１０２８セル、４１１２セルなど）。
【００２８】
ターゲット列内のセルの総数が、この下限を超えない場合（３０２の「いいえ」）、表計算アプリケーション１０８は、単一の幅評価スレッドを使用して、その一組のターゲット列に対する全体的な最大の列幅を識別する。単一の幅評価スレッドは、ターゲット列内のそれぞれのセル内のテキストの幅を計算することによって、その一組のターゲット列のそれぞれの列に対する全体的な最大の列幅を識別する。いくつかの実施形態では、単一の幅評価スレッドは、オペレーション３００を実行する表計算アプリケーション１０８の１つのスレッドである。他の実施形態では、単一の幅評価スレッドは、オペレーション３００を実行する表計算アプリケーション１０８のスレッドと異なる１つのスレッドである。
【００２９】
一組のターゲット列内のセルの総数が、この下限を超える場合（３０２の「はい」）、表計算アプリケーション１０８は、表計算アプリケーションのテーブルの行を複数のワークユニット（ｗｏｒｋ  ｕｎｉｔ）に分割する（３０６）。さまざまな実施形態において、これらのワークユニットは、さまざまな数の行を含む。いくつかの実施形態では、これらのワークユニットのそれぞれは、場合によっては余りのワークユニットを除いて、同じ数の行を含む。例えば、すべてのワークユニットは、余りのワークユニットを除いて、２５６個の行を含みうる。そのような実施形態では、余りのワークユニットは、２５６より少ない行を含みうる。例えば、表計算アプリケーションのテーブルが１１００個の行を備えている場合、２５６個の行を含む４つのワークユニットと、７６個の行を含む余りのワークユニットとがある。他の実施形態では、ワークユニットは、２５６個より多い、または少ない数の行を含むことができる。例えば、いくつかの実施形態では、これらのワークユニットのそれぞれは５１２個の行を含む。さらに、いくつかの実施形態では、表計算アプリケーション１０８は、管理者ユーザーがそれらのワークユニット内の行の数を設定することを可能にするユーザーインターフェースを提示する。
【００３０】
それに加えて、表計算アプリケーション１０８は、適切な数の幅評価スレッドを決定する（３０８）。さまざまな実施形態において、表計算アプリケーション１０８は、さまざまな方法で幅評価スレッドの適切な数を決定する（３０８）。例えば、いくつかの実施形態では、表計算アプリケーション１０８は、ワークユニットの数に基づき、また処理システム１０４内の処理ユニットの数に基づき幅評価スレッドの適切な数を決定する。例えば、４で割ったワークユニットの数が、処理システム１０４内の処理ユニット１１０の数以下である場合、表計算アプリケーション１０８は、幅評価スレッドの適切な数は、端数切り捨ての、４で割ったワークユニットの数であると決定する。４で割ったワークユニットの数が、処理システム１０４内の処理ユニット１１０の数より大きい場合、表計算アプリケーション１０８は、幅評価スレッドの適切な数は、処理システム１０４内の処理ユニット１１０の数に等しいと決定する。
【００３１】
次に、表計算アプリケーション１０８は、複数の幅評価スレッドを起こす（３１０）。複数の幅評価スレッド内の幅評価スレッドの数は、幅評価スレッドの適切な数に等しい。さまざまな実施形態において、表計算アプリケーション１０８は、複数の幅評価スレッドを起こすさまざまなアクションを実行する。例えば、いくつかの実施形態では、表計算アプリケーション１０８は、幅評価スレッドを動作させるために利用可能である、中断している（sleeping）スレッドのプールを保持する。この例では、表計算アプリケーション１０８は、この中断しているスレッドのプール内のスレッドを起こす。他の実施形態では、表計算アプリケーション１０８は、幅評価スレッドとして機能するように新しいスレッドをインスタンス化し、起こす。幅評価スレッドによって実行される例示的なオペレーションは、図４に関して示されている。
【００３２】
幅評価スレッドを起こした後、表計算アプリケーション１０８は、幅評価スレッドからローカルの最大の列幅を受け取るのを待つ（３１２）。いくつかの実施形態では、表計算アプリケーション１０８は、表計算アプリケーション１０８が幅評価スレッドからローカルの最大の列幅を受け取るのを待っている間、他のアクションを実行することができる。
【００３３】
その後、表計算アプリケーション１０８は、幅評価スレッドからターゲット列のローカルの最大の列幅を受け取る（３１４）。ローカルの最大の列幅は、幅評価スレッドによって決定される、ターゲット列のセル内の最も広いテキストの幅である。表計算アプリケーション１０８は、幅評価スレッドのそれぞれからそれぞれの列のローカルの最大の列幅を受け取る。例えば、表計算アプリケーションのテーブルが３つの列を有し、幅評価スレッドが２つある場合、表計算アプリケーション１０８は、第１の幅評価スレッドから３つのローカルの最大の列幅を、第２の幅評価スレッドから３つのローカルの最大の列幅を受け取る。第１の幅評価スレッドおよび第２の幅評価スレッドは、表計算アプリケーションのテーブル内の異なる行を評価するので、第１の幅評価スレッドおよび第２の幅評価スレッドは、同じ列に対して異なるローカルの最大の列幅を返すことができる。
【００３４】
次いで、表計算アプリケーション１０８は、ローカルの最大の列幅を使用して、ターゲット列に対する全体的な最も広い列幅を決定する（３１６）。言い換えると、その一組のターゲット列のそれぞれの列について、表計算アプリケーション１０８は、その列に対するローカルの最大の列幅のうちの最大値を識別することによって、その列に対する全体的な最大の列幅を識別する。例えば、幅評価スレッドが２つあり、表計算アプリケーション１０８が一方の幅評価スレッドから１つの列に対して５０のローカルの最大の列幅を受け取り、他方の幅評価スレッドからその列に対して６０のローカルの最大の列幅を受け取る場合、表計算アプリケーション１０８は、その列に対する全体的な最も広い列幅が６０であると判定する。
【００３５】
ターゲット列に対する全体的な最大の列幅を識別した後、表計算アプリケーション１０８は、その一組のターゲット列のそれぞれの列がその列に対する全体的な最大の列幅に基づく幅を有するよう、表計算アプリケーションのテーブルをリフローする（３１８）。言い換えると、表計算アプリケーション１０８は、表計算アプリケーションのテーブルのそれぞれの列がその列に対する全体的な最大の列幅に基づく幅を有するよう、表計算アプリケーションのテーブルをグラフィカルユーザーインターフェースに表示させる。さまざまな実施形態において、表計算アプリケーション１０８は、さまざまな方法でリフローされた表計算アプリケーションのテーブルをグラフィカルユーザーインターフェースに表示させることができる。例えば、いくつかの実施形態では、表計算アプリケーション１０８は、データをクライアントデバイス２０２に送信することができる。クライアントデバイス２０２は、リフローされた表計算アプリケーションのテーブルを表示するように構成される。別の例では、表計算アプリケーション１０８は、いくつかの実施形態において、表示システム１０６を使用して、リフローされた表計算アプリケーションのテーブルを表示することができる。
【００３６】
図４は、幅評価スレッドの例示的なオペレーション４００を示す流れ図である。オペレーション４００は、幅評価スレッドが表計算アプリケーション１０８によって起こされたときに開始する（４０２）。表計算アプリケーション１０８が幅評価スレッドを起こしたときに、表計算アプリケーション１０８は、その一組のターゲット列への参照およびワークユニットのプールを提供する。幅評価スレッドは、幅評価スレッドが起きたときにさまざまなアクションを実行することができる。例えば、いくつかの実施形態では、幅評価スレッドは、一組の最大の列幅を初期化する。この一組の最大の列幅は、その一組のターゲット列のそれぞれの列に対する最大の列幅を含む。最初は、最大の列幅のそれぞれはゼロに等しい。
【００３７】
起きた後、表計算アプリケーション１０８は、デバイスコンテキストを作成する（４０４）。デバイスコンテキストは、画面またはプリンタに出力されるテキストおよび画像の属性を定義するために使用されるデータ構造体である。デバイスコンテキストは、さまざまな属性を含む。例えば、デバイスコンテキストは、ウィンドウ用のデフォルトのフォント、ウィンドウ用のデフォルトのフォントサイズ、ウィンドウのコンテキストなどを指定する属性を含むことができる。
【００３８】
次いで、幅評価スレッドは、ワークユニットのプール内に利用可能なワークユニットがあるかどうかを判定する（４０６）。ワークユニットは、現在ワークユニットの最大の列幅を計算している幅評価スレッドがなく、および、現在の列調整プロセスでワークユニットの最大の列幅をすでに計算してしまっている幅評価スレッドがない場合、利用可能なワークユニットである。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で利用可能なワークユニットがあるかどうかを判定する。例えば、いくつかの実施形態では、表計算アプリケーション１０８は、それぞれのワークユニットに対応するフラグを含むデータ構造体を保持する。特定のワークユニットに対応するフラグは、特定のワークユニットが利用可能なときに一方の値を、特定のワークユニットが利用可能でないときに他方の値をとる。別の例では、表計算アプリケーション１０８は、ワークユニットへの参照を含むスタックデータ構造体を生成する。スタックデータ構造体が空である場合、ワークユニットのプール内に利用可能なワークユニットはない。
【００３９】
１つまたは複数の残りのワークユニットがある場合（４０６の「はい」）、幅評価スレッドは、利用可能なワークユニットのプールからワークユニットを１つ選択する（４０８）。列調整プロセスに関わる幅評価スレッドのそれぞれは、利用可能なワークユニットの同じプールからワークユニットを選択する。例えば、幅評価スレッド「Ａ」および幅評価スレッド「Ｂ」は、列調整プロセスに関わっており、利用可能なワークユニットのプールは、ワークユニット「Ｘ」、「Ｙ」、および「Ｚ」を含む。この例では、幅評価スレッド「Ａ」と幅評価スレッド「Ｂ」は両方とも、ワークユニット「Ｘ」、「Ｙ」、および「Ｚ」のうちから利用可能なワークユニットを選択する。
【００４０】
幅評価スレッドが利用可能なワークユニットのうちの１つを選択するときに、幅評価スレッドは、その幅評価スレッドによって選択されたワークユニットを他の幅評価スレッドのどれもが選択できないよう、選択されたワークユニットをロックする。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で利用可能なワークユニットを選択する。例えば、いくつかの実施形態では、幅評価スレッドは、利用可能なワークユニットのうちの１つを疑似ランダムに選択する。他の実施形態では、幅評価スレッドは、ワークユニットに割り当てられた順序に基づき、利用可能なワークユニットのうちの１つを選択する。さらに他の実施形態では、幅評価スレッドは、利用可能なワークユニットへの参照を含むスタックデータ構造体から、一番上の参照を取り出す。スタックデータ構造体から取り出された参照によって参照されているワークユニットが、選択されたワークユニットである。
【００４１】
次いで、幅評価スレッドは、一組のターゲット列に残りの列があるかどうかを判定する（４１０）。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で一組のターゲット列に残りの列があるかどうかを判定する。例えば、いくつかの実施形態では、幅評価スレッドは、ターゲット列のそれぞれへの参照を含むスタックデータ構造体を生成する。そこでスタックデータ構造体が空でない場合、幅評価スレッドは、その一組のターゲット列に残りの列があると判定する。他の実施形態では、幅評価スレッドは、ターゲット列のそれぞれに対応するフラグを含むデータ構造体を保持する。フラグは、列が評価されたときに一方の値を、列が評価されていないときに他方の値をとる。幅評価スレッドは、これらのフラグを使用して列が残っているかどうかを判定する。
【００４２】
その一組のターゲット列に１つまたは複数の残りの列がある場合（４１０の「はい」）、幅評価スレッドは、その一組のターゲット列の残りの列を１つ選択する（４１２）。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で残っている列のうちの１つを選択する。例えば、いくつかの実施形態では、幅評価スレッドは、ターゲット列のそれぞれへの参照を最初に含んでいたスタックデータ構造体から選択された列への参照を取り出す。他の実施形態では、幅評価スレッドは、その一組のターゲット列の一番右の残っている列を選択する。さらに他の実施形態では、幅評価スレッドは、別の基準に従って、残っている列を選択する。
【００４３】
次いで、幅評価スレッドは、選択されたワークユニット内の選択された列に、残りのセルがあるかどうかを判定する（４１４）。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で選択されたワークユニット内の選択された列に残りのセルがあるかどうかを判定する。例えば、いくつかの実施形態では、幅評価スレッドは、行インデックスを保持するする。行インデックスは、選択されたワークユニット内の行を示す。幅評価スレッドが、選択された列を選択すると、行インデックスは、選択されたワークユニット内の最も低い行番号を有する行を示す。この例では、行インデックスが選択されたワークユニット内で最も高い行番号を超える行番号を有する行を示す場合、幅評価スレッドは、選択された列内にセルが残っていないと判定する。
【００４４】
選択されたワークユニット内の選択された列に１つまたは複数の残りのセルがある場合（４１４）、幅評価スレッドは、選択されたワークユニット内の選択された列にある残りのセルを１つ選択する（４１６）。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で選択されたワークユニット内の選択された列の残っているセルのうちの１つを選択する。例えば、いくつかの実施形態では、幅評価スレッドは、上で説明されているように行インデックスを保持する。この例では、幅評価スレッドは、行インデックスによって示される行内のセルを選択する。次いで、幅評価スレッドは行インデックスをインクリメントする。
【００４５】
セルを選択した後、幅評価スレッドは、選択されたセルに対するセル幅を計算する（４１８）。さまざまな実施形態において、幅評価スレッドは、さまざまな方法で選択されたセルに対するセル幅を計算する。例えば、いくつかの実施形態では、幅評価スレッドは、グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）のテキストエクステントメソッド（ｔｅｘｔ  ｅｘｔｅｎｔ  ｍｅｔｈｏｄ）を呼び出す。幅評価スレッドがテキストエクステントメソッドを呼び出した場合、幅評価スレッドは、選択されたセル内のテキストと幅評価スレッドによって作成されたデバイスコンテキストとをテキストエクステントメソッドに送る。次いで、テキストエクステントメソッドは、デバイスコンテキストの属性を使用して、選択されたセル内のテキストの幅を決定する。テキストエクステントメソッドは、選択されたセル内のテキストの幅を幅評価スレッドに返す。いくつかの実施形態では、テキストエクステントメソッドは、ＭＩＣＲＯＳＯＦＴ（登録商標）ＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムのグラフィックスデバイスインターフェース（ＧＤＩ）ＡＰＩまたはＧＤＩ＋ＡＰＩの一部である。テキストエクステントメソッドが選択されたセルの幅を決定するときに、テキストエクステントメソッドは、他のプロセスまたは幅評価スレッドがデバイスコンテキストの読み込みまたは書き出しを行えないよう、デバイスコンテキストをロックする。幅評価スレッドのすべてが、同じデバイスコンテキストをテキストエクステントメソッドに送ろうとしていた場合、幅評価スレッドは、他の幅評価スレッドがデバイスコンテキストを使用するのを終了するまで待たなければならない。デバイスコンテキストに対するこの競合を低減するために、幅評価スレッドのそれぞれが、別々のデバイスコンテキストを作成する。
【００４６】
選択されたセルに対するセル幅を計算した後、幅評価スレッドは、選択されたセルに対するセル幅が選択された列に対するローカルの最大の列幅より大きいかどうかを判定する（４２０）。選択されたセルに対するセル幅が選択された列に対するローカルの最大の列幅より大きい場合（４２０の「はい」）、幅評価スレッドは、選択された列に対するローカルの最大の列幅を更新する（４２２）。例えば、選択された列に対するローカルの最大の列幅が、３０ピクセルであり、選択されたセルのセル幅が、４０ピクセルである場合、幅評価スレッドは、選択された列に対するローカルの最大の列幅が４０ピクセルとなるよう、選択された列に対するローカルの最大の列幅を更新する。一方、選択された列に対するローカルの最大の列幅が、３０ピクセルであり、選択されたセルに対するセル幅が、２０ピクセルである場合、幅評価スレッドは、ローカルの最大の列幅を更新しない。
【００４７】
選択された列に対するローカルの最大の列幅を更新した後、または選択されたセルに対するセル幅が選択された列に対するローカルの最大の列幅以下であると判定した後（４２０の「いいえ」）、幅評価スレッドは、再び、選択されたワークユニット内の選択された列に残りのセルがあるかどうかを判定する。選択されたワークユニット内の選択された列に１つまたは複数の残りのセルがある場合、幅評価スレッドは、選択された列内の別の残りのセルに関してステップ４１６、４１８、４２０を、また場合によってはステップ４２２を繰り返す。
【００４８】
一方、選択されたワークユニット内の選択された列に残りのセルがない場合（４１４の「いいえ」）、幅評価スレッドは、再び、その一組のターゲット列に残りの列があるかどうかを判定する（４１０）。その一組のターゲット列に１つまたは複数の残りの列がある場合、幅評価スレッドは、その一組のターゲット列の別の残りの列に関してステップ４１２、ならびに場合によってはステップ４１４、４１６、４１８、４２０、および４２２を繰り返す。
【００４９】
選択されたワークユニット内に残りの列がない場合（４１０の「いいえ」）、幅評価スレッドは、再び、残りのワークユニットがあるかどうかを判定する（４０６）。１つまたは複数の残りのワークユニットがある場合、幅評価スレッドは、別の残りのワークユニットに関してステップ４０８、ならびに場合によってはステップ４１０、４１２、４１４、４１６、４１８、４２０、および４２２を繰り返す。
【００５０】
残りのワークユニットがない場合（４０６の「いいえ」）、幅評価スレッドは、ローカルの最大の列幅を表計算アプリケーション１０８に与える（４２４）。表計算アプリケーション１０８にローカルの最大の列幅を与えた後、幅評価スレッドは中断する（４２６）。
【００５１】
図５は、例示的なコンピューティングデバイス５００を示すブロック図である。いくつかの実施形態では、コンピューティングシステム１００は、コンピューティングデバイス５００に似た１つまたは複数のコンピューティングデバイスを使用して実装される。他の実施形態では、コンピューティングシステム１００は、図５の例に示されているのとは別のハードウェアコンポーネントを有するコンピューティングデバイスを使用して実装されることは理解されるであろう。
【００５２】
異なる実施形態において、コンピューティングデバイスは異なる方法で実装される。例えば、図５の例において、コンピューティングデバイス５００は、メモリ５０２、処理システム５０４、二次ストレージデバイス５０６、ネットワークインターフェースカード５０８、ビデオインターフェース５１０、表示デバイス５１２、外部コンポーネントインターフェース５１４、外部ストレージデバイス５１６、入力デバイス５１８、プリンタ５２０、通信メディア５２２を備える。他の実施形態では、コンピューティングデバイスは、実装に使用するハードウェアコンポーネントの数を増やして、または減らして実装される。例えば、別の例示的な実施形態では、コンピューティングデバイスは、ビデオインターフェース、表示デバイス、外部ストレージデバイス、または入力デバイスを備えていない。
【００５３】
メモリ５０２は、データおよび／または命令を格納することができる１つまたは複数のコンピュータ可読データ記憶媒体を備える。本明細書で使用されているように、コンピュータ可読データ記憶媒体は、コンピューティングデバイスによって読み出せるデータおよび／またはソフトウェア命令を格納するデバイスまたは製造品である。異なる実施形態では、メモリ５０２は異なる方法で実装される。例えば、さまざまな実施形態において、メモリ５０２は、さまざまな種類のコンピュータ可読データ記憶媒体を使用して実装される。コンピュータ可読データ記憶媒体の種類の例として、限定はしないが、ＤＲＡＭ（ダイナミックランダムアクセスメモリ）、ＤＤＲ  ＳＤＲＡＭ（ダブルデータレート同期型ダイナミックランダムアクセスメモリ）、ｒｅｄｕｃｅｄ  ｌａｔｅｎｃｙ  ＤＲＡＭ、ＤＤＲ２  ＳＤＲＡＭ、ＤＤＲ３  ＳＤＲＡＭ、Ｒａｍｂｕｓ  ＲＡＭ、ソリッドステートメモリ、フラッシュメモリ、ＲＯＭ（リードオンリーメモリ）、電気的消去可能プログラマブルＲＯＭ、ならびにデータを格納する他の種類のデバイスおよび／または製造品が挙げられる。
【００５４】
処理システム５０４は、ソフトウェア命令を選択的に実行する１つまたは複数の物理的集積回路を備える。さまざまな実施形態において、処理システム５０４はさまざまな方法で実装される。例えば、例示的な一実施形態では、処理システム５０４は、１つまたは複数の処理コアとして実装される。例えば、この例示的な実施形態では、処理システム５０４は、１つまたは複数のＩｎｔｅｌ  Ｃｏｒｅ  ２マイクロプロセッサとして実装される。別の例示的な実施形態では、処理システム５０４は、１つまたは複数の個別のマイクロプロセッサとして実装される。さらに別の例示的な実施形態では、処理システム５０４は、特定の機能を実現するＡＳＩＣとして実装される。さらに別の例示的な実施形態では、処理システム５０４は、ＡＳＩＣを使用し、ソフトウェア命令を実行することによって特定の機能を実現する。
【００５５】
異なる実施形態では、処理システム５０４は、異なる命令セットのソフトウェア命令を実行する。例えば、さまざまな実施形態において、処理システム５０４は、ｘ８６命令セット、ＰＯＷＥＲ命令セット、ＲＩＳＣ命令セット、ＳＰＡＲＣ命令セット、ＩＡ−６４命令セット、ＭＩＰＳ命令セット、および／または他の命令セットなどの命令セットに含まれるソフトウェア命令を実行する。
【００５６】
二次ストレージデバイス５０６は、１つまたは複数のコンピュータ可読データ記憶媒体を備える。二次ストレージデバイス５０６は、処理システム５０４によって直接的にはアクセス可能でないデータおよびソフトウェア命令を格納する。言い換えると、処理システム５０４は、Ｉ／Ｏオペレーションを実行して、二次ストレージデバイス５０６からデータおよび／またはソフトウェア命令を取り出すということである。さまざまな実施形態において、二次ストレージデバイス５０６は、さまざまな種類のコンピュータ可読データ記憶媒体によって実装される。例えば、二次ストレージデバイス５０６は、１つまたは複数の磁気ディスク、磁気テープドライブ、ＣＤ−ＲＯＭディスク、ＤＶＤ−ＲＯＭディスク、Ｂｌｕ−Ｒａｙディスク、ソリッドステートメモリデバイス、ベルヌーイカートリッジ、および／または他の種類のコンピュータ可読データ記憶媒体によって実装することができる。
【００５７】
ネットワークインターフェースカード５０８を使用することで、コンピューティングシステム５００はコンピュータ通信ネットワークにデータを送信しコンピュータ通信ネットワークからデータを受信することができる。異なる実施形態では、ネットワークインターフェースカード５０８は異なる方法で実装される。例えば、さまざまな実施形態において、ネットワークインターフェースカード５０８は、イーサネット（登録商標）インターフェース、トークンリングネットワークインターフェース、光ファイバーネットワークインターフェース、ワイヤレスネットワークインターフェース（例えば、ＷｉＦｉ、ＷｉＭａｘなど）、または他の種類のネットワークインターフェースとして実装される。
【００５８】
ビデオインターフェース５１０を使用することで、コンピューティングデバイス５００はビデオ情報を表示デバイス５１２に出力することができる。異なる実施形態では、ビデオインターフェース５１０は異なる方法で実装される。例えば、例示的な一実施形態では、ビデオインターフェース５１０は、コンピューティングデバイス５００のマザーボード内に一体化される。別の例示的な実施形態では、ビデオインターフェース５１０はビデオ拡張カードである。ビデオ拡張カードの種類の例として、ＡＴＩ  Ｔｅｃｈｎｏｌｏｇｉｅｓ，  Ｉｎｃ．社（オンタリオ州マーカム所在）が製造するＲａｄｅｏｎグラフィックスカード、Ｎｖｉｄｉａ  Ｃｏｒｐｏｒａｔｉｏｎ社（カリフォルニア州サンタクララ所在）が製造するＧｅｆｏｒｃｅグラフィックスカード、および他の種類のグラフィックスカードが挙げられる。
【００５９】
さまざまな実施形態において、表示デバイス５１２は、さまざまな種類の表示デバイスとして実装される。表示デバイスの種類の例として、限定はしないが、陰極線管ディスプレイ、ＬＣＤディスプレイパネル、プラズマスクリーンディスプレイパネル、タッチセンサー式ディスプレイパネル、ＬＥＤスクリーン、プロジェクタ、および他の種類の表示デバイスが挙げられる。さまざまな実施形態において、ビデオインターフェース５１０は、さまざまな方法で表示デバイス５１２と通信する。例えば、さまざまな実施形態において、ビデオインターフェース５１０は、ＵＳＢ（ユニバーサルシリアルバス）コネクタ、ＶＧＡコネクタ、ＤＶＩ（デジタルビジュアルインターフェース）コネクタ、Ｓ−ビデオコネクタ、ＨＤＭＩ（高精細度マルチメディアインターフェース）インターフェース、ＤｉｓｐｌａｙＰｏｒｔコネクタ、または他の種類のコネクタを介して表示デバイス５１２と通信する。
【００６０】
外部コンポーネントインターフェース５１４を使用することで、コンピューティングデバイス５００は外部デバイスと通信することができる。さまざまな実施形態において、外部コンポーネントインターフェース５１４は異なる方法で実装される。例えば、例示的な一実施形態では、外部コンポーネントインターフェース５１４は、ＵＳＢインターフェースである。他の例示的な実施形態では、コンピューティングデバイス５００は、ＦｉｒｅＷｉｒｅインターフェース、シリアルポートインターフェース、パラレルポートインターフェース、ＰＳ／２インターフェース、および／またはコンピューティングデバイス５００を外部コンポーネントと通信させることができる別の種類のインターフェースである。
【００６１】
異なる実施形態では、外部コンポーネントインターフェース５１４を使用することで、コンピューティングデバイス５００は異なる外部コンポーネントと通信することができる。例えば、図５の例では、外部コンポーネントインターフェース５１４を使用することで、コンピューティングデバイス５００は、外部ストレージデバイス５１６、入力デバイス５１８、およびプリンタ５２０と通信することができる。他の実施形態では、外部コンポーネントインターフェース５１４を使用することで、コンピューティングデバイス５００は、より多くの、またはより少ない外部コンポーネントと通信することができる。外部コンポーネントの他の種類の例として、限定はしないが、スピーカー、電話機充電ジャック、モデム、メディアプレーヤードック、他のコンピューティングデバイス、スキャナ、デジタルカメラ、指紋読取装置、およびコンピューティングデバイス５００に接続することができる他のデバイスが挙げられる。
【００６２】
外部ストレージデバイス５１６は、１つまたは複数のコンピュータ可読データ記憶媒体を備える外部コンポーネントである。コンピューティングデバイス５００の異なる実装は、異なる種類の外部ストレージデバイスとインターフェースする。外部ストレージデバイスの種類の例として、限定はしないが、磁気テープドライブ、フラッシュメモリモジュール、磁気ディスクドライブ、光ディスクドライブ、フラッシュメモリユニット、ｚｉｐディスクドライブ、光ジュークボックス、および１つまたは複数のコンピュータ可読データ記憶媒体を備える他の種類のデバイスが挙げられる。入力デバイス５１８は、ユーザー入力をコンピューティングデバイス５００に供給する外部コンポーネントである。コンピューティングデバイス５００の異なる実装は、異なる種類の入力デバイスとインターフェースする。入力デバイスの種類の例として、限定はしないが、キーボード、マウス、トラックボール、スタイラス入力デバイス、キーパッド、マイクロホン、ジョイスティック、タッチセンサー式ディスプレイ画面、およびユーザー入力をコンピューティングデバイス５００に供給する他の種類のデバイスが挙げられる。プリンタ５２０は、データを紙に印刷する外部デバイスである。コンピューティングデバイス５００の異なる実装は、異なる種類のプリンタとインターフェースする。プリンタの種類の例として、限定はしないが、レーザープリンタ、インクジェットプリンタ、写真印刷機、複写機、ファクス機、領収書プリンタ、ドットマトリックスプリンタ、またはデータを紙に印刷する他の種類のデバイスが挙げられる。
【００６３】
通信メディア５２２は、コンピューティングデバイス５００のハードウェアコンポーネント間の通信を円滑にするものである。異なる実施形態では、通信メディア５２２は、コンピューティングデバイス５００の異なるコンポーネント間の通信を円滑にする。例えば、図５の例では、通信メディア５２２は、メモリ５０２、処理システム５０４、二次ストレージデバイス５０６、ネットワークインターフェースカード５０８、ビデオインターフェース５１０、および外部コンポーネントインターフェース５１４の間の通信を円滑にする。コンピューティングデバイス５００の異なる実装では、通信メディア５２２は、異なる方法で実装される。例えば、コンピューティングデバイス５００の異なる実装では、通信メディア５２２は、ＰＣＩバス、ＰＣＩ  Ｅｘｐｒｅｓｓバス、およびＡＧＰ（アクセラレイティッドグラフィックスポート）バス、Ｉｎｆｉｎｉｂａｎｄインターコネクト、シリアルＡＴＡ（アドバンストテクノロジーアタッチメント）インターコネクト、パラレルＡＴＡインターコネクト、Ｆｉｂｅｒ  Ｃｈａｎｎｅｌインターコネクト、ＵＳＢバス、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｉｎｇ  ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）インターフェース、または別の種類の通信メディアとして実装されうる。
【００６４】
メモリ５０２は、さまざまな種類のデータおよび／またはソフトウェア命令を格納する。例えば、図５の例では、メモリ５０２は、ＢＩＯＳ（基本入出力システム）５２４、オペレーティングシステム５２６、アプリケーションソフトウェア５２８、およびプログラムデータ５３０を格納する。ＢＩＯＳ  ５２４には、処理システム５０４によって実行されたときに、コンピューティングデバイス５００を起動させる一組のソフトウェア命令が収められている。オペレーティングシステム５２６は、処理システム５０４によって実行されたときに、コンピューティングデバイス５００に、コンピューティングデバイス５００のリソースの活動および共有を調整するオペレーティングシステムを実現させる一組のソフトウェア命令を備える。オペレーティングシステムの種類の例として、限定はしないが、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（登録商標）、Ｌｉｎｕｘ（登録商標）、Ｕｎｉｘ（登録商標）、Ａｐｐｌｅ  ＯＳ  Ｘ、Ａｐｐｌｅ  ＯＳ  Ｘ  ｉＰｈｏｎｅ、Ｐａｌｍ  ｗｅｂＯＳ、Ｐａｌｍ  ＯＳ、Ｇｏｏｇｌｅ  Ｃｈｒｏｍｅ  ＯＳ、Ｇｏｏｇｌｅ  Ａｎｄｒｏｉｄ  ＯＳなどが挙げられる。アプリケーションソフトウェア５２８は、処理システム５０４によって実行されたときに、コンピューティングデバイス５００に、コンピューティングデバイス５００のユーザーに対してアプリケーションを提供することを行わせる一組のソフトウェア命令を備える。プログラムデータ５３０は、アプリケーションソフトウェア５２８によって生成され、および／または使用されるデータである。
【００６５】
上で説明されているさまざまな実施形態は、例示のみによって提示されており、制限として解釈すべきでない。当業者であれば、本明細書で図示され、説明されている例示的な実施形態およびアプリケーションに従うことなくさまざまな修正および変更を加えることができることを容易に理解するであろう。例えば、図に示されているオペレーションは、単なる例にすぎない。さまざまな実施形態において、類似のオペレーションは、図に示されているものよりも多い、または少ないステップを含みうる。さらに、他の実施形態では、類似のオペレーションは、異なる順序で図に示されているオペレーションのステップを含みうる。
【図１】
2013530446.tif 000003
【図２】
2013530446.tif 000004
【図３】
2013530446.tif 000005
【図４】
2013530446.tif 000006
【図５】
2013530446.tif 000007
【国際調査報告】
2013530446.tif 000008
2013530446.tif 000009