« OpenTypeフォントの続き(9)・・・インストラクション | トップページ | もう既に今年も5月か »

2009年4月28日 (火)

コンテナ

前回の投稿から随分と日がたってしまったが・・・今回はDelphiネタ。

Delphiでプログラミングをしているとデータやオブジェクトのコレクションを扱う時に希望のコンテナクラスが標準で用意されていなくて、自分で実装するか公開されている既存のクラスをどっかのサイトから落としてくるはめになるのだが、今回は自分で実装してみた。公開されている既存のクラスを利用するのもいいのだが、GPLだのMPLだのライセンス絡みで面倒なので、正直そのようなものは使いたくないので・・・wobbly。ちなみに、DelphiではDelphi6当たり?のContnrs.pasで、色々なコンテナクラスが追加されているので、それらを利用すればだいたい事が足りるのであるが・・

今回必要になったのは、順序付き連想コンテナ順序無し連想コンテナはキーと値のペアのデータ構造で表現され、キーを使って検索できるが、順序付き連想コンテナとは、これに、更に、単純なリストのようにインデックスを使って先頭からシーケンシャルにアクセスできるようにしたもの。つまり、順序無し連想コンテナではデータの登録順序などは意味を持たないが、データの登録順序などの順序を同時に表現したものとでも言えばいいのか?。うーんwobbly。.NETでいうとOrderedDictionaryクラスかな?。

とういうことでDelphiでこのクラスを実装してみた。Delphiでは、前述のContnrs.pasに順序無し連想コンテナとして、TBucketListクラスが用意され、内部ではキーのハッシュを使いデータを登録するバケットを分散させているのでので、キーを使って高速に検索できるだろう?とのことで、これを利用して、TOrderedBucketList、TObjectOrderedBucketList,TIntegerOrderedBucketListを作ってみた。

キーと値のペアでデータを登録するAddメソッド、指定の位置(インデックス)に挿入するInsertメソッド、指定のキーの値を取得するDataプロパティ(デフォルト)、指定の位置(インデックス)のキーや値を取得するDataAt、ItemAtプロパティ(TBucketListクラスでキーの事をItem、値をDataと呼んでいるのでここでもそれを踏襲しました)があります。命名規則やクラス設計のスタイルはなるべくDelphiに合わせてあるであしからず。SkyDriveからもContnrsEx.pasでダウンロードできます。先ほども書いたようにライセンスとか面倒な事は言いません。ご自身の責任でご自由に。300行そこらのコードですがbearing

« OpenTypeフォントの続き(9)・・・インストラクション | トップページ | もう既に今年も5月か »

Delphi」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651731

この記事へのトラックバック一覧です: コンテナ:

« OpenTypeフォントの続き(9)・・・インストラクション | トップページ | もう既に今年も5月か »

自作ソフトウェア

無料ブログはココログ

メモ