開発

[binllion] 情報伝播用の構造体を定義する

編集用バッファとしてBinDataを作りましたが、アプリ全体として参照されたり、変更されたりしそうなのでコンテキストオブジェクトあるいはシングルトンパターンぽい状態管理用の構造体を作り、その中にBinDataを入れて、各処理に受け渡そうと思います。

ということで、Messageという管理用の構造体を作りました。

pub(crate) struct Message {
    bin_data: BinData,
}

impl Message {
    pub(crate) fn new() -> Self {
        Self { bin_data: BinData::new() }
    }

    pub(crate) fn bin_data(&self) -> &BinData{
        &self.bin_data
    }

    pub(crate) fn bin_data_mut(&mut self) -> &mut BinData{
        &mut self.bin_data
    }
}
Code language: PHP (php)

メインの中でこの構造体を各処理の引数として渡すように変更しました。

可変参照と不変参照を使い分けて変更が必要な箇所だけミュータブルに引き渡すようにしています。

mod message;
use crate::message::Message ;

fn main() {

    // 状態管理
    let mut message = Message::new();

    // 仮データ
    let bin_data = message.bin_data_mut();
    bin_data.push_back(vec![
        0x01, 0x02, 0x03, 0x00, 0x63, 0x71, 0x00, 0x61, 0x62, 0x0f, 0x01, 0x02, 0x03, 0x00, 0x63,
        0x71, 0x0f, 0x61, 0x62, 0x63, 0x01, 0xff, 0x03, 0x00, 0x63, 0x71, 0x0f, 0x61, 0x62, 0x63,
    ]);

// 省略

    // イベントループ
    while event_handler.is_looping() {
        // 描画処理
        let _ = render_main(& message);
        // イベント処理
        event_handler.run(&mut message);
    }
// 省略Code language: JavaScript (javascript)

テスト用に仮データをセットしています。後ほど削除予定です。

もっとスマートな方法がありそうです。1

テスト方法も検討していきたいと思います。


  1. Arc+Mutexなど ↩︎

GitHubにコードをアップロードしています。0.1.0バージョン

コードのコメントに書かれているfirst_stepなどをcargoコマンドに渡すと実行できます。

# Example
$ cargo run --example first_stepCode language: Bash (bash)
管理人

Recent Posts

情報セキュリティマネジメント試験取得への道

スキルアップを図るべく情報セキ…

2か月 ago

ファイナンシャルプランナー3級試験取得への道

スキルアップを図るべくファイナ…

2か月 ago

[rust] New Type Patternを使ってみる

DDDの考えを取り入れることで…

5か月 ago

RustでDDDの要素を取り入れてみる

前回SOLID原則というものを…

5か月 ago

期間限定!書籍無料キャンペーン2025

「mdBookではじめるKin…

5か月 ago