セクションの複数ページをまとめています。 印刷またはPDF形式で保存...

もとのページに戻る

2024-11-14 現在

stream_helper

ヘルパーオブジェクト
    stream_helperは、mwx::streamインタフェースを付与するヘルパーオブジェクトです。データクラスを参照するヘルパーオブジェクトを生成し、ヘルパーオブジェクト経由でデータの入出力を行います。

    以下にはsmplbufの配列bからヘルパーオブジェクトbsを生成しmwx::stream::operator <<()演算子によるデータ入力を行っています。

    smplbuf_u8<32> b;
    auto&& bs = b.get_stream_helper(); // ヘルパーオブジェクト
    
    // データ列の生成
    uint8_t FOURCHARS[]={'A', 'B', 'C', 'D'};
    bs << FOURCHARS;
    bs << ';';
    bs << uint32_t(0x30313233); // "0123"
    bs << format(";%d", 99);
    
    Serial << b << crlf; // Serialへの出力は smplbuf_u8<32> クラス経由で
    
    //結果: ABCD;0123;99
    

    概要

    stream_helper はデータ配列をストリームに見立てて振舞います。

    内部にはデータ配列中の読み書き位置を保持しています。次のようにふるまいます。

    • 読み出しまたは書き込みをすると次の読み書き位置に移動します。
    • 最期のデータを読み出した後、またはデータを末尾に追記した後には、読み書き位置は終端となります。
    • 読み書き位置が終端の場合、
      • available()falseになります。
      • 読み出しは出来ません。
      • 書き込みは書き込み可能範囲であれば追記します。

    stream_helperの生成

    stream_helper は、データクラス (smplbuf, EEPROM) のメンバー関数より生成します。

    auto&& obj_helper = obj.get_stream_helper()
    // obj はデータクラスのオブジェクト、obj_helperの型は長くなるのでauto&&で受けています。
    

    メソッド

    rewind()

    void rewind()

    読み書き位置を先頭に移動します。

    seek()

    int seek(int offset, int whence = MWX_SEEK_SET)

    読み書き位置を設定します。

    whence設定位置
    MWX_SEEK_SET先頭位置から設定します。offset0を指定するとrewind()と同じ意味になります。
    MWX_SEEK_CUR現在位置を基準にoffset分移動しまします。
    MWX_SEEK_END終端位置にします。offset0にすると終端に設定します。-1を設定すると最後の文字に移動します。

    tell()

    int tell()

    読み書き位置を返します。終端位置の場合は-1を返します。

    available()

    int available()

    読み書き位置が終端であれば0を返します。終端でなければそれ以外の値を返します。