both-byte orders
iso9660_file_sourceを作成中ですが、出来上がらなかったので構造体のヘッダだけアップしました。
hamigaki/archivers/iso9660/
ISO 9660で扱うデータはリトルエンディアンとビッグエンディアンのハイブリッド構造になっています。
例えば、16ビットの0x1234という値は、
34 12 12 34
のような形で格納されていて、リトルエンディアンなら前の2バイトを、ビッグエンディアンなら後ろの2バイトを使用します。(both-byte ordersと呼ばれます。)
Hamigakiライブラリのバイナリ入出力機構では、構造体のフィールドの順序や位置がバイナリーオフセットと異なってもよいので、
struct foo { boost::uint16_t bar; }; namespace hamigaki { template<> struct struct_traits<foo> { typedef boost::mpl::list< member<foo, boost::uint16_t, &foo::bar, little>, member<foo, boost::uint16_t, &foo::bar, big> > members; }; }
のように、構造体のフィールドは一つでも、入出力は2通りにすることで対応できます。
入力で2つとも読んでしまうのは無駄ですけどね。
名前空間は「iso」にするか、「iso9660」にするか悩みましたが、「iso」だと意味が広すぎるので「iso9660」にしました。
それにしても「.iso」なんて大胆な拡張子を考えたのは誰なんでしょう?