OSASKのフォーマット統合計画の素案

  • (by K, 2008.12.18)

(0)

  • 結局neriさんのCOM64plusに影響されて、前に考えていたやつを少し進めることにした。まだ思いつきレベルなのでOsaskWikiに書ける段階じゃない。

(1)

  • 大きく分けて2つの分類
    • 何らかの複数の情報を持っている全てのデータが対象
    • 1.フォーマット情報とデータが混在しているタイプ。
    • 2.フォーマット情報とデータが分離しているタイプ。
  • 混在しているものは.g01形式に統合していい気がする。ファイルフォーマットとしてはsarやtekがこれに該当。でも固定長ならgh4はかえってオーバーヘッドが大きいから要検討。
  • 2.は既存のファイル構造を記述するのに向いている。パラメータを指定してインクルードっぽいことを許せば、似たような形式を記述するのは楽になる。各フィールドを名前(もしくはタグ番号に相当する番号)で参照できるようになるし、未知のフィールドを無視できるようになる。型情報もあるので、拡張性も高い。これはkhabaで採用予定だったもの。

(2)

  • 任意の1.は2.の形式に変換できるべきだし(変換というか全く加工せずにフォーマット情報を抽出する)、2.は1.の形式に(条件を満たせば)変換できるべき。

(3)

  • 2.にはtypedefが必要。そうすれば頻出する型をまとめられる。フィールドには名前か番号がつく。それはアクセス方法ということ。配列という考え方はなく、単に繰り返しである。つまり、添え字0から10までは長さ3で、添え字11は長さ5で、添え字12から19までは長さ3ということができないといけない。添え字だって順番に増えている保証はない。同じ差分が繰り返されているだけ。
  • シーク性能は保証しない。固定長の繰り返しならシーク性能はよくなるだろう。シーク性能を改善したければ、内容はそのままでフォーマットを固定長ベースに変えればいい。そんなことは瑣末なこと。
  • フォーマット情報とは、実際のデータを見ることなく、与えられたラベルのオフセットを算出できなければいけない。
  • フィールドは絶対に長さ情報がある。そしてそれはビット列で定義される。それには低級の意味と高級な意味がある。低級な意味は整数か小数か自然数か、のような区別。高級なのは「数値」。もっと高級なのは座標とか時刻とか。

(9)

  • 瑣末な備忘録:
    • ファイル入出力はエラーなしモードがあるべき。
    • エンディアンに関する演算法則
      • A+Bの結果と、bswap(bswap(A)+bswap(B))の結果は等しいか?
      • A<<Bの結果と、bswap(bswap(A)<<bswap(B))の結果は等しいか?
      • 繰り上がりの方向が違う?だから等しくない。
      • 00FF0000に00010000を足すと、01000000になる。
      • 0000FF00に00000100を足すと、00010000になる。
      • だから本来の値で読んで演算して、指定したエンディアンで書かないとおかしくなる。というか、char a[4]をint iと見なして演算するようなことはすべきじゃない。そんなことするからおかしくなる。

こめんと欄


コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2008-12-18 (木) 14:44:05 (4941d)