Giraffe+ 0.5.24.388
前リリースからの変化
- Rangeオブジェクトを、@begin, @endに保持したイテレータのコピーをbegin, endで返す仕組みにした
- Container.to_Rangeを定義
- Container.emptyを定義
- Container.pop_back, pop_frontを定義
- Container.car, cdrを定義
- Container.+を定義
- Method.closureを定義
- Array.insert(itr_pos, itr_begin, itr_end)が動作してなかったのを修正
- シェルコンテキストメニューを扱う際の開放し忘れを修正
- ShowMenu(2)を、動的にサブメニューを作れるようにした
- メインメニュー内のUnit Conversionを充実させた
Rangeオブジェクトを、@begin, @endに保持したイテレータのコピーをbegin, endで返す仕組みにした
beginやendはコピーを返す、ということが保証されていないと、常にコピーしてから使うことになり、大抵の用途である、インクリメントによるイテレーション時に、大抵の場合(selfがRange以外)で、無駄にコピーすることになります。
Container.to_Rangeを定義
self.begin...(self.end)を返します。Container.rangeがContainer.rrange等の一種としてすでに存在しますが、違いは一切ありません。
Container.emptyを定義
self.begin.== (self.end)を返します。
Container.pop_back, pop_frontを定義
効率は悪いですが、それぞれ、end.--とbeginをerase後、あらかじめコピーしておいたbackとfrontを返します。
Container.car, cdrを定義
carはContainer.frontの異名として定義してます。self.begin.derefを返します。cdrは、self.begin.++...(self.end)を返します。
Container.+を定義
selfのコピーを、self.insert(self.end arg.begin arg.end)を実行後に返します。+=はコピーしません。
Method.closureを定義
closureを実行したMethodは、どこで呼ばれても、closureを実行したコンテキストから呼び出されます。引数を渡した場合、それが呼び出されるコンテキストになります。
Array.insert(itr_pos, itr_begin, itr_end)が動作してなかったのを修正
追加後にitr_posがinvalidatedになるのを忘れてました。
シェルコンテキストメニューを扱う際の開放し忘れを修正
IContextMenu2, 3です。
ShowMenu(2)を、動的にサブメニューを作れるようにした
初めの文字が*(アスタリスク)だった場合に、その次の引数のブロックの戻り値をメニューアイテムの配列として扱う仕様にしました。ようするに、開かれたサブメニューのスクリプトだけを遅延ロードすることができるようになりました。配列を返すだけのスクリプトを作って、それを呼び出すようにすると、サブメニューを開いたときに、動的にそのスクリプトがメニューになるという仕組みです。
メインメニュー内のUnit Conversionを充実させた
以前から充実させたかったんですが、メニューアイテム数が増えると、どうしてもメニューを開くのが遅くなるので、動的にサブメニューを生成できるようにしてから、と考えてました。