相変わらず脱線しまくって、予定外のことばかりやってます。
プラグインにArray.map()とArray.grep()を追加しました。それぞれPerlのmap関数、grep関数そのまんま(+α)です。Array.map()の引数には関数オブジェクトを渡します。場合によっては、for文による配列イテレーションの代わりになります。Array.grep()の引数にはPerl同様、正規表現オブジェクトか関数オブジェクトを渡せるようにしたほか、判定条件を逆転させるフラグも追加しました。
相変わらず脱線(以下略)
XHTML1.1への変換時に、A要素やMAP要素のNAME属性をid属性に変換する処理を追加しました。重複して指定された属性を削除する処理も追加しました。同一属性の重複指定はSGML的にダメです。
プラグイン。配列から重複する要素を取り除く関数Array.uniqueを実装しました。同一判定には"==="演算子と"=="演算子から選択することができます。
配列関係の仕様はこの辺でフィックスします。
プラグイン。SQLiteインターフェースを、本体2.25beta9用に書き直しました。似非ネイティブクラス実装だったのが、まっとうなネイティブクラスになりました。これで後ろ暗いところはなくなりました(←後ろ暗かったのか)。
さて、ドキュメントを整備しないと…
INFERNO「灼熱」でアイテム稼ぎをして、イズナーFFゲット。これでペイルウィングの武器は全て揃いました。残るは陸戦兵の武器ですが、ちっとも出ません。超級が殺虫スプレーのみというのは悲しすぎます。
プラグイン。SQLiteインターフェースの書き直しに伴って、仕様が一部変更になりました。なるべく仕様を変えないつもりだったのですが、アレな部分が気に入らなかったので。もし使ってる人がいたらごめんなさい。
と書いてる矢先に2.25beta10がリリースされていることに気づきました。
プラグインでバグ発見。引数で受け取ったコールバック関数を実行する場合は、クロージャで実行してやらないとダメですね。iTJSDispatch2::FuncCallで実行する場合は、objthisをきちんと指定しないと、明示的にコンテキスト指定された関数が期待通りに実行されません。以後気をつけよう。
ほか、global.getClassInstanceInfo()を追加しました。使い道は…ない?
プラグイン。ネイティブクラスだけでなく、通常の関数も半自動生成させるようにしました。これで関数やクラスメンバの記述方法をほぼ統一することができました。
ついでに、TJS2オブジェクトのコンテナ(?)となる、C++のクラス名も自動生成させるようにしました。これでプログラマ(私)はC++のクラス名を意識せずに済みます。
ついでについでに、マクロ、メッセージ、例外処理周りを強化しました。作業中に、Layer.colorEllipse()でメモリリークするバグが見つかったり…orz
ついでについでについでに、ドキュメント自動生成ツールを、関数だけでなくプロパティにも対応できるようにしました。その過程で、Layer.equalize()とLayer.equalizeColor()のドキュメントを書き忘れていたことに気づいたり。なんだかなあ、もう。
よって、このケースでは
3.4×1038÷(1.0×1010×1.0×1010×3.2×107) ≒ 1.1×1011
ですから、わずか一千億年 *1 程度で全てのUUIDを使い尽くしてしまうことになります。