BREW vector

どうやら、vectorを使ってもあまり容量を増やさないように出来るみたいなので、vectorを実装してみようと思います。


とりあえず容量のことは考えずに、BREW用にimportしてみます。

  • allocatorを消す。
  • reverce_iteratorを(使わないだろうから)消す。
  • allocatorが無いので、allocate, deallocate, Construct, Destroyを自分で実装。
  • XUTILITYから持ってきている、copy, fill, copy_backward, swapを実装。
  • あとはtypedefとかthrowとかを書き換えるだけ。

これはそんなに難しくないので、2,3時間あれば出来ます。


↓ソース
id:melpon:20000102


で、問題はここから。
このままだと、新しいvectorを宣言するたびに、かなりの容量を取ります。
えんらさん(id:enra)曰く、

# enra 『コンテナクラスって、型の中身を知る必要がある関数がほとんど無いので、privateでstatic関数でも作ってそこに委譲すればいいと思うですよ。』
# enra 『「型の中身を知る必要がある関数がほとんど無い」=「最低、型のサイズさえ分かればよい」』

ということらしいです。
自分はてっきり、全てのメソッドで、

void insert( iterator _P , size_type _M , const _Ty& _X ){
    switch( sizeof( _Ty ) ){
    case 1:
        vector_helper::insert_1( _P , _M , _X );
        break;
    case 2:
        vector_helper::insert_2( _P , _M , _X );
        break;
    case 4:
        vector_helper::insert_4( _P , _M , _X );
        break;
    }
}

こんな感じにするのかなぁとか思ってたのですが、実装する段階で自分のアホさ加減に気が付きました。
iterator自体がテンプレートなのにそれを渡してどうする(;´Д`)


どう見てもへたれプログラマです。本当にありがとう御座いました。