昨日のやつの現状把握

訳が分からなくなってきたのでまとめてみる。以下、登場する識別子は、特に明記されていない限りnewtype名前空間中に定義されている。

  • 全体的にETで実装。
  • 2項演算のとき、各項の要素の型は違っていてもよい。detail::binary_promoteメタ関数で適当に型計算して戻り値の型を決める。
  • ベクトルとは、このライブラリ的にはvector_baseクラステンプレートの実体を継承している型のこと。
  • ただしユーザー定義型lが要素の型だった場合、detail::binary_promoteを自分で特殊化する必要がある。
  • vector型のオブジェクトを作って使う。
  • ベクトルオブジェクトができる演算は、
    • 反転
    • ノルム
    • ベクトル同士の加減乗
    • 外積
    • 内積
    • スカラとの乗算
    • 3x3行列との乗算(rotate関数)
    • 4x4行列との乗算
    • その他代入色々
  • ノルムに関しては浮動小数点数に変換できなければ使えない。
  • 4x4行列との乗算のときは、第四成分を1として計算する。
  • operator[](size_t)を公開メンバ関数に持つオブジェクトと +=, -= ができる。
  • operator[](size_t)を公開メンバ関数に持つオブジェクトはmake_adaptor_vector関数でこのライブラリでいうベクトル相当のものとして扱うことができる。ただし読み出し専用。
  • dupメンバ関数で、等価な(演算による誤差は生じる可能性がある)vectorオブジェクトを生成できる。
  • 行列とは、このライブラリ的にはmatrix_baseクラステンプレートの実体を継承している型のこと。
  • matrix型のオブジェクトを作って使う。
  • 行列オブジェクトができる演算は、
    • ベクトルとの演算
    • 転置(transpose関数)
    • 乗算
    • その他色々代入
  • operator[](size_t)でのアクセスの順番は、0行0列、0行1列、0行2列... 1行0列、1行1列... の順番で要素にアクセスできる(これって行優先だっけ?列優先だっけ?)。
  • operator[](size_t)を公開メンバ関数に持つオブジェクトと +=, -= ができる。
  • operator()(size_t i, size_t j)で、i 行 j 列の要素にアクセスできる。
  • row(size_t), col(size_t)メンバ関数で、ある行または列をベクトルと見立てて扱うことができる。
  • dupメンバ関数で、等価な(演算による誤差は生じる可能性がある)matrixオブジェクトを生成できる。

こんなもんかな。