エンコード文字列 更新

エンコード文字列のUTF-32に、codeunit_size()codeunit_at()codeunit_substr()、およびイテレータを実装しました。

#include <iostream>
#include <shand/encoding_string.hpp>

int main()
{
    using namespace shand;

    encoding_string<encoding::utf32> s = U"あいうえお";

    // 文字数を取得
    std::cout << s.codeunit_size() << std::endl; // 5

    // i番目の文字を取得
    std::cout << s.codeunit_at(2) << std::endl; // U"う"

    // 部分文字列を取得
    std::cout << s.codeunit_substr(2, 3) << std::endl; // U"うえお"
    std::cout << s.codeunit_substr(2) << std::endl; // U"うえお"

    // 1文字ずつ出力
    for (decltype(s)::value_type x : s) {
        std::cout << x << std::endl;
    }
}
5
う
うえお
うえお
あ
い
う
え
お

UTF-32はサロゲートペアもないので、BOMを無視してる以外はとくに何もしていません。

今後の予定

  • エンディアンやBOMの扱いはファイルの読み書き側がやるべきで、文字列側ではシステムのエンディアンを使うだけ、BOMは無視するだけ、という方針にしようと思っています。
  • その代わり、encoding_fileみたいなクラスを、追々作ろうかと思っています。
  • とりあえず自分が使う分には十分な機能がそろったつもりなので、当面はドキュメント整理をしようと思います。