JP4611245B2 - コンピュータ装置およびストリングクラスのオブジェクトを操作又はアクセスする方法 - Google Patents
コンピュータ装置およびストリングクラスのオブジェクトを操作又はアクセスする方法 Download PDFInfo
- Publication number
- JP4611245B2 JP4611245B2 JP2006153915A JP2006153915A JP4611245B2 JP 4611245 B2 JP4611245 B2 JP 4611245B2 JP 2006153915 A JP2006153915 A JP 2006153915A JP 2006153915 A JP2006153915 A JP 2006153915A JP 4611245 B2 JP4611245 B2 JP 4611245B2
- Authority
- JP
- Japan
- Prior art keywords
- class
- text
- string
- memory
- string class
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4432—Reducing the energy consumption
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Devices For Executing Special Programs (AREA)
- Mobile Radio Communication Systems (AREA)
- Executing Machine-Instructions (AREA)
Description
「ストリングクラスのオブジェクト」
C++では、テキスト(例えば、コンピュータの画面に実際に現れる文字のストリング)は「オブジェクト」として表わされる。C++または他のオブジェクト指向言語の当業者は、このカテゴリ化に精通しているであろう。このようなテキストに関連したオブジェクトは、「ストリングクラスのオブジェクト」と呼ばれる特定のタイプである。オブジェクトが属するクラスの種類(例えば、テキストの場合はストリングクラス)は、そのオブジェクトに実行することが許される操作を規定する。ストリングクラスには一定の操作(例えば、2つのテキストストリングをまとめて連結する)だけが行える。従って、ストリングクラスのある特定のオブジェクトは、特定のテキストストリングを表わしている。それは特定の、十分に定義された方法でのみ操作される。
・ファイル読み取りサービスを使用してテキストをバッファに読み込む
・ストリング生成サービスを使用してバッファされたデータをストリングクラスのオブジェクトに変える
・バッファの内容を破棄する
C++ではテキストストリングの実際の格納位置を識別するのは困難であるが、テキストストリングの位置を知る必要はない。なぜなら、直接操作するのはストリングクラスのオブジェクトであり、その結果実際のテキストストリングが操作される。従って、ストリングクラスのオブジェクトは、事実上テキストストリングのメモリ位置を知っており、テキスト操作に関連する必要なメモリ管理タスクの全てを扱うことができる。
ANSI/ISOのC++標準の草案として知られるC++のバージョンでは、ストリングクラスの全てのオブジェクトは(<string>として参照される、上記標準のスタンダードライブラリの草案の部分のストリングクラスで例示されているように)、洗練されたメモリ管理タスクが遂行されるような方法で処理される(例えば、バッファスペースを拡張したり、縮小したり、結合できる、すなわち、完全に動的な、テキスト用のバッファスペースの再配置)。しかし、このレベルのメモリ管理は、大量のコードを使用し、かなり大きいスペースを必要とする。
C++では、ソースコードがテキストストリングを含むインスタンスが多数ある。これらのテキストストリングは「リテラルテキスト」として知られ、ソースコードを実行可能なオブジェクトコードへとコンパイルする時に、リテラルテキストはバッファメモリに永久的に格納される。リテラルテキストが操作されるとき、ストリングクラスのオブジェクトは、そこから生成されなければならない。しかしながら、このストリングクラスのオブジェクトの生成することで、メモリ内にテキストストリングが生成されることになり、このテキストストリンは、新たに生成されたストリングクラスのオブジェクトによって実際に操作されることになる。要するに、テキストストリングがメモリ内で複製されるのである。すなわち、テキストストリングは、ソースコードのコンパイルによって生じるオリジナルバッファで一度生成され、さらに、テキストの操作を可能とするストリングクラスのオブジェクトに関連したメモリ位置で再度複製される。
C++では、プログラマはヒープメモリを使用してテキストを処理する。長さが制限されたテキストは、長さが制限されていないテキストの処理に必要な十分に柔軟な手法を実際には必要としない。それにもかかわらず、従来のC++では、テキストの長さに関係なく、ストリングクラスのオブジェクトに十分特徴付けられた、十分に柔軟な機構しかなく、それ以外の機構がない。ヒープメモリの取り扱いはコードおよびサイクルを集中的に使用するので、これは、メモリ管理コードにおけるオーバーヘッドを大きくする。
上記のように、従来のC++では、リテラルテキストに関するテキストストリングはメモリ内で複製される。すなわち、ソースコードのコンパイルで生じるオリジナルバッファ内で一度生成され、テキストの操作を可能にするストリングクラスのオブジェクトに関するメモリ位置で再度複製される。この複製は無駄である。
上記のように、従来のC++では、テキストの長さに関係なく、十分に柔軟で十分に特徴付けられたストリングクラスのオブジェクトを使用する機構しかなく、それ以外を使用する機構はない。ヒープメモリの処理はコードおよびサイクルを集中的に使用するので、これによりメモリ管理コードに多くのオーバーヘッドが生じる。
EPOC32は、コードサイズおよびサイクルオーバヘッドを最小化する以外の重要な特徴も示す。それは主に以下の点である。
・ディスクリプタが与えるポリモルフィック特性
・ディスクリプタがユニコードおよびアスキーの一様なコーディングを可能とするフラット構造としてのストリングおよび生のデータバッファクラスのオブジェクト
全てのディスクリプタは「フラット」構造である(すなわち、ディスクリプタがコピーされると、ディスクリプタ自身だけがコピーされる。従来のC++では、オブジェクトのコピーはオブジェクト自身だけでなく関連する全てのポインタおよびポインタで示されるデータ、すなわち、オブジェクトに意味を与える複雑な関連する構造、のコピーも必要である。)。従って、EPOC32では、ディスクリプタをコピーすることは、通常のC++で等価であるオブジェクトをコピーすることよりも、メモリオーバヘッドおよびサイクルにおいてはるかに経済的である。
共通の作用が異なった機構によって達成されるとしても、グループ内の全てのオブジェクトが単一のオブジェクトのように作用するとき、オブジェクトのグループはポリモルフィズムを示すと言われる。ポリモルフィズムは従来のC++では、互いにポリモルフィックな全てのオブジェクトが、共通の位置に、仮想関数テーブルへのポインタ(従ってポインタは各オブジェクト内に必要である)を含んでいる、仮想関数によってもたらされる。このテーブルは各ポリモルフィック関数に対する実際のコードを識別する。ポリモルフィズムを共有する各クラスに対して別のテーブルが必要である。しかしこの手法は、各ポインタが32ビット(すなわち4文字)であり各オブジェクトが仮想関数テーブルへのポインタを必要とするので、比較的大きな空間を使用する。更に、各オブジェクトで32ビット長のフィールドも使用される。
C++では、16ビットのユニコードのコーディングは、そうでなければ8ビットコードとなる全てのテキストデータのサイズを2倍にすることとなる。また、従来は、プログラマがソースコードを書くときに、アスキーまたはユニコードのどちらを使用して記述するかを決定する必要があった。
C++では、テキストストリングは通常「0」で終了し、これによりシステムはテキストストリングの終了位置を容易に知ることができる。EPOC32ではこれはもはや必要ない。なぜなら、ディスクリプタが参照されるデータの長さを定義する記述を含んでいるからである。従って、各テキスト項目毎に終端を示すのに「0」を使用する必要がなくなるので、更にまたコードの節約となる。
ディスクリプタには3つのクラスがある。すなわち、ポインタディスクリプタ、バッファディスクリプタおよびヒープディスクリプタである。
・ポインタディスクリプタには2つの形態がある。不変ポインタディスクリプタ TPtrC と可変ポインタディスクリプタTPtrである。
・これによりデータは変更できない。
・全てのメンバ関数が一定。
・不変ストリングまたはデータ(例えば変更されてはいけないデータ)
・TDesC から導出され、従って多数のメンバ関数を有する。
・設計者によって設定された最大長を越えない範囲で、このディスクリプタによってデータを変更できる。
・変更されている領域を含むメモリ領域を直接指し示す。
・ポインタ長により含まれるデータ項目数が決定される。
・全てのTDesC メンバ関数に加えデータの変更および操作のためのTDesメンバ関数を継承する。
・ポインタディスクリプタはデータ表現とは別であるが、メモリ内の予め存在する領域から構成される。
・作成時または後で代入演算子(演算子=)により、ディスクリプタにデータを設定できる。
・整数テンプレートにより長さが定義される。すなわち、TBufC<;40>;は40のデータ項目を含んでいる。
・全てのTDesC メンバ関数を継承する。
・最大長を越えない範囲で変更できるデータを含んでいる。
・最大長が最大データ項目数を定義する。
・実際の長さが実際のデータ項目数を定義する。
・整数テンプレートにより長さが定義される。すなわち、TBuf<;40>;は40のデータ項目だけを含んでいる。
・データ領域はディスクリプタオブジェクトの一部である。
・操作および変更の必要なデータを含めるのに有効であるが、その長さは既知の最大値(例えばWPテキスト)を越えない。
・全てのTDesC メンバ関数に加えデータの変更および操作のためのTDesメンバ関数を継承する。
・不変ヒープディスクリプタ:HBufC
・データと連続した長さを有する。
・データ領域はディスクリプタオブジェクトの一部であり、オブジェクト全体はヒープから割り当てられたセルを占める。
・作成時または後で代入演算子(演算子=)により、ディスクリプタにデータを設定できる。
・全てのTDesC メンバ関数を継承する。
・再割り当て可能、すなわち、データ領域は拡張および縮小できる。
Pslon Software Plc.から1997年に発行されることになっているEPOC32「ディスクリプタ」SDK(抜粋)。Pslon Software Plc.から1997年7月(改訂1.0)に発行されたSDK全文を参照する。
SDK:ディスクリプタ概要
ディスクリプタクラスの3重構造(主に、ポインタディスクリプタクラス、バッファディスクリプタクラスおよびヒープディスクリプタクラス)は、ストリングおよび一般的バイナリデータの両方に、それらが存在するメモリのタイプに関係なく、安全かつ一貫したアクセスおよび操作のための機構を提供する。例えば、ROM内のコード部分のストリングを、RAM内のファイルレコードと同様に扱える。
・ユニコードおよびアスキーテキスト両方のサポートを提供する。マクロ UNIC0DEは、アスキーまたはユニコードで作成された変数を選択するのに使用される。
・ストリングおよびバイナリデータの扱いを統一する。
・ROM内のテキストまたはデータの安全かつ便利な参照を可能にする。
・関連するテキストまたはデータを操作する多くのメンバ関数を提供する。
・データの変更を可能とするが、定められたデータ領域外へ書き込もうとするあらゆる試みを防止する。
・仮想関数に関連するメモリオーバヘッドをなくす。
・組み込みタイプのように作用し、スタック上に安全に作成され、安全に孤立化(orphaned)され得る。
・(HBufC がヒープ上に割り当てられ、規則の例外となる。)。
アスキーおよびユニコードテキスト
E32.ディスクリプタ文字セット
アスキーテキスト文字は8ビット(1バイト)で表わされるが、ユニコード文字は16ビット(2バイト)を必要とする。アスキーおよびユニコードテキストの両方をサポートするために、ディスクリプタクラスは、8ビットと16ビットの2つの変形を有する。例えば、TPtr8 およびTPtr16 の2つのポインタディスクリプタクラスがある。
・・・
typedef TPtr16 TPtr;
・・・
#else
・・・
typedef TPtr8 TPtr;
・・・
#endif
const TText*str=_S(“Hello”);
は、アスキーで作成された1バイト文字のストリングを生成するが、ユニコード作成では2バイト文字のストリングを生成する。
は、アスキーで作成された8ビットディスクリプタおよびユニコードで作成された16ビットディスクリプタを生成する。常に正しい変数のディスクリプタを作成するように、例えば、平文“abcdef”ではなく、常に_L(“abcdef”)を使用する。
長さおよびサイズ
E3232.ディスクリプタ長さおよびサイズ
ディスクリプタは、表わすデータをそのデータの長さで特徴付ける。ディスクリプタの長さは、データ項目の数である。8ビットの変数に対しては、ディスクリプタの長さはそれが表わす1バイトデータの数であり、16ビットの変数に対しては、ディスクリプタの長さはそれが表わす2バイトデータの数である。
テキストおよびバイナリデータ
E3232.ディスクリブタテキストおよびバイナリ
「C」では、ストリングスは、ストリングの終端を示すゼロターミネータを必要とすることによって特徴付けられる。これらは多数の問題を招く。特に、これらは(データがバイナリゼロを含む場合に)バイナリデータを中に含むことができず、それらに対する操作は一般的に効率的でない。「C」ストリングスは、ANSIの「C」ライブラリの関数グループ、memxxx()およびstrxxx()に反映されているように、バイナリデータとは異なった方法で扱う必要がある。ディスクリプタはストリングとバイナリデータを同じ方法で表わすことを可能とし、これは両方の場合に同じ関数を使用することを可能とする。バイナリデータに対しては、明示的に8ビットのディスクリプタを使用しなければならない。バイナリデータにとっては、ユニコードをアスキーの区別は意味がない。16ビットバイナリデータは事実上使用しないことに注意せよ。
メモリ割り当て
E3232.ディスクリプタ割り当て
ディスクリプタクラスは(HBufC を除いて)、組み込みタイプのように作用する。これらはメモリの割り当てを行わず、デストラクタを持たない。これは、ディスクリプタクラスが組み込みタイプと同様にスタック上で孤立化され得ることを意味する。これは特に、コードを残せる状況では重要である。(孤立化の影響については、E3232.例外トラップ.クリーンアップ.用件を参照せよ)
HBufCディスクリプタオブジェクトはヒープ上に割り当てられ、スタック上には作成されない。
例外
E3232.ディスクリプタ例外
ディスクリプタメンバ関数の全てのパラメータは、操作が正しく指定され、どのデータもディスクリプタのデータ領域外に書き込まれないことを保証するべく検査される。特定の結果は、どのメンバ関数も、可変ディスクリプタをその最大割り当て長を越えて拡張できないこととなる。元の割り当てを十分大きくするか、より大きいディスクリプタの必要性を見越して実行時により大きなディスクリプタを動的に割り当てるかによって、全てのディスクリプタがデータを収容できるように十分大きいことを保証するのは、プログラマの責任である。スタティックな手法は実施がより簡単であるが、これが無駄であると判明した特定の場合には、動的手法がより効果的であろう。例外の場合には、どんな認められていないメモリのアクセスも実行しないこと、およびどんなデータも移動または損傷されないことが安全であると考えられている。
ディスクリプタタイプ
E3232.ディスクリプタタイプ
ディスクリプタオブジェクトには3種類ある。
・ポインタディスクリプタ
ディスクリプタオブジェクトは、それが表わすデータとは別であるが、メモリ内の予め存在する領域に生成される。これには、
不変ポインタディスクリプタ、TPtrC
可変ポインタディスクリプタ、TPtr
の2つの形態がある。
データ領域はディスクリプタオブジェクトの一部である。これには、
不変バッファディスクリプタ、TBufC<;TlntS>;
可変バッファディスクリプタ、TBuf<;TlntS>;
の2つの形態がある。
データ領域はディスクリプタオブジェクトの一部であり、オブジェクト全体がヒープから割り当てられたセルを占有する。これは、
不変ヒープディスクリプタ、HBufC
の1つの形態だけである。
ポインタディスクリプタ−TPtrC
E3232.ディスクリプタポインタディスクリプタ.TPtrC
TPtrC は、それによってどのデータも変更されない、不変ディスクリプタである。そのメンバ関数の全ては(コンストラクタを除いて)不変(constant)である。図1にTPtrC が概略的に示されている。TPtrC は不変ストリングまたはデータを参照する、例えば、ROM常駐コード中に生成されたテキストをアクセスするとき、またはその参照によってデータが変更されてはならないRAM内のデータに参照を渡すときに有効である。TPtrC は、例えば、テキストまたはデータの抽出部分内の文字の位置決めなどの、その内容を操作する多くのメンバ関数を提供するTDesC から導出される。
ポインタディスクリプタ−TPtr
E3232.ディスクリプタ.ポインタディスクリプタ.TPtr
TPtr は、データが最大長を越えない範囲で、それによってデータを変更できるポインタディスクリプタである。最大長はコンストラクタによって設定される。
TPtr は、変更されているデータを含むメモリ内の領域を直接指し示す。TPtr は、図2Aおよび2Bに概略的に示されている。
バッファディスクリプタ−TBufC<;TInt S>;
E3232.ディスクリプタ.バッフアディスクリプタ.TBufC
TBufC は、データ領域が続く長さを有するバッファディスクリプタである。データは、生成時にまたは他のあらゆるときに割り当てられた演算子(演算子=)によって、ディスクリプタ内に設定される。ディスクリプタによって保持されたデータは不変である。TBufC は、図3に概略的に示されている。TBufC の長さは、例えば、TBufC<;40>;が40までのデータ項目を含むことができるTBufC を定義するように、整数テンプレートによって定義される。
バッファディスクリプタ−TBuf<;TInt S>;
E3232.ディスクリプタ.バッファディスクリプタ.TBuf
TBuf は、データが最大長を越えない範囲で、変更できるデータを含むバッファディスクリプタである。図5にTBuf が概略的に示されている。TBuf が内部のデータ領域に含むことができるデータ項目の数は、最大長によって定義される。
ヒープディスクリプタ−HBufC
E3232.ディスクリプタ.ヒ−プディスクリプタ.HBufC
HBufC は、データ領域が続く長さを有するディスクリプタである。スタティックメンバ関数、New()、NewL()またはNewLC()を使用してヒープ上に割り当てられる。ディスクリプタの長さはこれらスタティック関数へのパラメータとして渡される。図6にHBufC が概略的に示されている。データは、生成時にまたは他のあらゆるときに割り当てられた演算子(演算子=)によって、ディスクリプタ内に設定される。HBufC は、例えばテキストまたはデータの抽出部分内の文字の位置を決める、その内容物を操作する多くのメンバ関数を提供するTDesC から導出される。
ディスクリプタクラスの継承・派生関係
E32.ディスクリプタ.クラス
全てのディスクリプタクラス、TPtrC,TPtr,TBufC,TBufおよびHBufC は、抽象的基底クラス(abstract base class)TDesC およびTDes から導出される。
Claims (3)
- 単一のベースクラス(TDesC)から派生した、階層構造を有する5つのストリングクラスのオブジェクトを操作又はアクセスできるようにプログラムされたオブジェクト指向のオペレーティングシステムを使用するコンピュータ装置において、
リードオンリーメモリと、
ランダムアクセスメモリと、
(a)前記ベースクラス(TDesC)から派生し、リテラルテキストを扱うためのストリングクラスであって、前記リードオンリーメモリ又は前記ランダムアクセスメモリのうちヒープ領域以外のメモリ領域に該リテラルテキストを格納し、該テキストが格納されたオリジナルのメモリ領域にポインタを利用してアクセスするように定義された第1のストリングクラス(TPtrC)に属するオブジェクトを、該第1のストリングクラス(TPtrC)の定義にしたがって操作又はアクセスする手段と、
(b)データの追加及び変更を可能とするメンバ関数を定義した、前記ベースクラス(TDesC)から派生した他のクラス(TDes)からさらに派生し、予め設定された最大長を超えない長さのテキストを前記ランダムアクセスメモリのうちヒープ領域以外のメモリ領域に格納し、該テキストが格納されオリジナルのメモリ領域にポインタを利用してアクセスし、該最大長を超えない範囲で該テキストにデータを追加又は変更するように定義された第2のストリングクラス(TPtr)に属するオブジェクトを、該第2のストリングクラス(TPtr)の定義にしたがって操作又はアクセスする手段と、
(c)前記ベースクラス(TDesC)から派生し、長さが制限されたテキストを前記ランダムアクセスメモリのうちスタティックメモリ領域に格納してアクセスするように定義された第3のストリングクラス(TBufC)に属するオブジェクトを、該第3のストリングクラス(TBufC)の定義にしたがって操作又はアクセスする手段と、
(d)前記ベースクラス(TDesC)から派生した前記他のクラス(TDes)からさらに派生し、長さが制限されたテキストを前記ランダムアクセスメモリのうちスタティックメモリ領域に格納し、前記データの追加及び変更を可能とする複数のメンバ関数を利用してデータの追加及び変更をするように定義された第4のストリングクラス(TBuf)に属するオブジェクトを、該第4のストリングクラス(TBuf)の定義にしたがって操作又はアクセスする手段と、
(e)前記ベースクラス(TDesC)から派生し、長さが動的に変化し得るテキストを、前記ランダムアクセスメモリのうちのヒープ領域を使用するために必要となるすべてのメモリ管理関数を利用して該ヒープ領域に格納してアクセスするように定義された第5のストリングクラス(HBufC)に属するオブジェクトを、該第5のストリングクラス(HBufC)の定義にしたがって操作又はアクセスする手段と
を含むことを特徴とするコンピュータ装置。 - 単一のベースクラス(TDesC)から派生した、階層構造を有する5つのストリングクラスのオブジェクトを操作又はアクセスできるようにプログラムされたオブジェクト指向のオペレーティングシステムを使用する、リードオンリーメモリ、ランダムアクセスメモリおよびマイクロプロセッサを有するコンピュータ装置によって該オブジェクトについて操作又はアクセスする方法であって、
前記マイクロプロセッサが、
(a)前記ベースクラス(TDesC)から派生し、リテラルテキストを扱うためのストリングクラスであって、前記リードオンリーメモリ又は前記ランダムアクセスメモリのうちヒープ領域以外のメモリ領域に該リテラルテキストを格納し、該テキストが格納されたオリジナルのメモリ領域にポインタを利用してアクセスするように定義された第1のストリングクラス(TPtrC)に属するオブジェクトを、該第1のストリングクラス(TPtrC)の定義にしたがって操作又はアクセスし、
(b)データの追加及び変更を可能とするメンバ関数を定義した、前記ベースクラス(TDesC)から派生した他のクラス(TDes)からさらに派生し、予め設定された最大長を超えない長さのテキストを前記ランダムアクセスメモリのうちヒープ領域以外のメモリ領域に格納し、該テキストが格納されたオリジナルのメモリ領域にポインタを利用してアクセスし、該最大長を超えない範囲で該テキストにデータを追加又は変更するように定義された第2のストリングクラス(TPtr)に属するオブジェクトを、該第2のストリングクラス(TPtr)の定義にしたがって操作又はアクセスし、
(c)前記ベースクラス(TDesC)から派生し、長さが制限されたテキストを前記ランダムアクセスメモリのうちスタティックメモリ領域に格納してアクセスするように定義された第3のストリングクラス(TBufC)に属するオブジェクトを、該第3のストリングクラス(TBufC)の定義にしたがって操作又はアクセスし、
(d)前記ベースクラス(TDesC)から派生した前記他のクラス(TDes)からさらに派生し、長さが制限されたテキストを前記ランダムアクセスメモリのうちスタティックメモリ領域に格納し、前記データの追加及び変更を可能とする複数のメンバ関数を利用してデータの追加及び変更をするように定義された第4のストリングクラス(TBuf)に属するオブジェクトを、該第4のストリングクラス(TBuf)の定義にしたがって操作又はアクセスし、
(e)前記ベースクラス(TDesC)から派生し、長さが動的に変化し得るテキストを、前記ランダムアクセスメモリのうちのヒープ領域を使用するために必要となるすべてのメモリ管理関数を利用して該ヒープ領域に格納してアクセスするように定義された第5のストリングクラス(HBufC)に属するオブジェクトを、該第5のストリングクラス(HBufC)の定義にしたがって操作又はアクセスする
ことを特徴とする方法。 - 単一のベースクラス(TDesC)から派生した、階層構造を有する5つのストリングクラスのオブジェクトを、リードオンリーメモリ、ランダムアクセスメモリおよびマイクロプロセッサを有するコンピュータ装置によって操作又はアクセスできるようにプログラムされたオブジェクト指向のコンピュータプログラムを格納した記憶媒体であって、
前記コンピュータプログラムは、
(a)前記ベースクラス(TDesC)から派生し、リテラルテキストを扱うためのストリングクラスであって、前記リードオンリーメモリ又は前記ランダムアクセスメモリのうちヒープ領域以外のメモリ領域に該リテラルテキストを格納し、該テキストが格納されたオリジナルのメモリ領域にポインタを利用してアクセスするように定義された第1のストリングクラス(TPtrC)に属するオブジェクトを、該第1のストリングクラス(TPtrC)の定義にしたがって操作又はアクセスする手段と、
(b)データの追加及び変更を可能とするメンバ関数を定義した、前記ベースクラス(TDesC)から派生した他のクラス(TDes)からさらに派生し、予め設定された最大長を超えない長さのテキストを前記ランダムアクセスメモリのうちヒープ領域以外のメモリ領域に格納し、該テキストが格納されたオリジナルのメモリ領域にポインタを利用してアクセスし、該最大長を超えない範囲で該テキストにデータを追加又は変更するように定義された第2のストリングクラス(TPtr)に属するオブジェクトを、該第2のストリングクラス(TPtr)の定義にしたがって操作又はアクセスする手段と、
(c)前記ベースクラス(TDesC)から派生し、長さが制限されたテキストを前記ランダムアクセスメモリのうちスタティックメモリ領域に格納してアクセスするように定義された第3のストリングクラス(TBufC)に属するオブジェクトを、該第3のストリングクラス(TBufC)の定義にしたがって操作又はアクセスする手段と、
(d)前記ベースクラス(TDesC)から派生した前記他のクラス(TDes)からさらに派生し、長さが制限されたテキストを前記ランダムアクセスメモリのうちスタティックメモリ領域に格納し、前記データの追加及び変更を可能とする複数のメンバ関数を利用してデータの追加及び変更をするように定義された第4のストリングクラス(TBuf)に属するオブジェクトを、該第4のストリングクラス(TBuf)の定義にしたがって操作又はアクセスする手段と、
(e)前記ベースクラス(TDesC)から派生し、長さが動的に変化し得るテキストを、前記ランダムアクセスメモリのうちのヒープ領域を使用するために必要となるすべてのメモリ管理関数を利用して該ヒープ領域に格納してアクセスするように定義された第5のストリングクラス(HBufC)に属するオブジェクトを、該第5のストリングクラス(HBufC)の定義にしたがって操作又はアクセスする手段と
を前記コンピュータ装置に機能させることを特徴とする記憶媒体。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GBGB9712436.6A GB9712436D0 (en) | 1997-06-13 | 1997-06-13 | Operating system for a computer based on C++ programming techniques |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11501913A Division JP2000501873A (ja) | 1997-06-13 | 1998-06-12 | オブジェクト指向オペレーティングシステム |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008185277A Division JP2009059350A (ja) | 1997-06-13 | 2008-07-16 | 情報処理装置および情報処理方法、プログラム、記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2006302303A JP2006302303A (ja) | 2006-11-02 |
JP4611245B2 true JP4611245B2 (ja) | 2011-01-12 |
Family
ID=10814181
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11501913A Withdrawn JP2000501873A (ja) | 1997-06-13 | 1998-06-12 | オブジェクト指向オペレーティングシステム |
JP2006153915A Expired - Fee Related JP4611245B2 (ja) | 1997-06-13 | 2006-06-01 | コンピュータ装置およびストリングクラスのオブジェクトを操作又はアクセスする方法 |
JP2008185277A Pending JP2009059350A (ja) | 1997-06-13 | 2008-07-16 | 情報処理装置および情報処理方法、プログラム、記録媒体 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP11501913A Withdrawn JP2000501873A (ja) | 1997-06-13 | 1998-06-12 | オブジェクト指向オペレーティングシステム |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2008185277A Pending JP2009059350A (ja) | 1997-06-13 | 2008-07-16 | 情報処理装置および情報処理方法、プログラム、記録媒体 |
Country Status (3)
Country | Link |
---|---|
JP (3) | JP2000501873A (ja) |
GB (1) | GB9712436D0 (ja) |
WO (1) | WO1998057257A2 (ja) |
-
1997
- 1997-06-13 GB GBGB9712436.6A patent/GB9712436D0/en active Pending
-
1998
- 1998-06-12 WO PCT/GB1998/001716 patent/WO1998057257A2/en active Application Filing
- 1998-06-12 JP JP11501913A patent/JP2000501873A/ja not_active Withdrawn
-
2006
- 2006-06-01 JP JP2006153915A patent/JP4611245B2/ja not_active Expired - Fee Related
-
2008
- 2008-07-16 JP JP2008185277A patent/JP2009059350A/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
JP2006302303A (ja) | 2006-11-02 |
JP2009059350A (ja) | 2009-03-19 |
GB9712436D0 (en) | 1997-08-13 |
WO1998057257A3 (en) | 1999-03-04 |
JP2000501873A (ja) | 2000-02-15 |
WO1998057257A2 (en) | 1998-12-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Krall | Efficient JavaVM just-in-time compilation | |
JP4571710B2 (ja) | ディスパッチテーブル構造のための方法と装置 | |
US5481708A (en) | System and methods for optimizing object-oriented compilations | |
US5535390A (en) | Method for reusing temporaries and reclaiming shared memory | |
Stroustrup | Parameterized Types for C++. | |
US6049667A (en) | Computer system, method of compiling and method of accessing address space with pointer of different width therefrom | |
US7386843B2 (en) | Method and system for register allocation | |
US6738966B1 (en) | Compiling device, computer-readable recording medium on which a compiling program is recorded and a compiling method | |
US6334212B1 (en) | Compiler | |
US6901591B1 (en) | Frameworks for invoking methods in virtual machines | |
EP0922250B1 (en) | Object oriented operating system | |
JP4611245B2 (ja) | コンピュータ装置およびストリングクラスのオブジェクトを操作又はアクセスする方法 | |
Bergeron et al. | Systems programming languages | |
Ditzel | Reflections on the high-level language symbol computer system | |
JP2003256215A (ja) | プログラム変換方法、これを用いたデータ処理装置及びプログラム | |
US8468511B2 (en) | Use of name mangling techniques to encode cross procedure register assignment | |
Sagonas et al. | All you wanted to know about the HiPE compiler: (but might have been afraid to ask) | |
JPH11345127A (ja) | コンパイラ | |
Pennello | Compiler challenges with RISCs | |
JP3630086B2 (ja) | プログラム変換装置、プログラム変換方法及び記録媒体 | |
Sitton et al. | The PL/EXUS language and virtual machine | |
Luna et al. | HiPE on AMD64 | |
Hicks | Types and Intermdiate Representations | |
Sidnell et al. | Transputer common Object File Format | |
Hunter | Programming—An introduction |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20070727 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20071024 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20071029 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080125 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080317 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080716 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20080723 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20080815 |
|
RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20090309 |
|
A711 | Notification of change in applicant |
Free format text: JAPANESE INTERMEDIATE CODE: A711 Effective date: 20090319 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20090319 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20100922 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20101013 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131022 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |