An Embedded Engineer’s Blog

とある組み込みエンジニアの備忘録的なブログです。

C++で任意のデータ型をシリアライズ - その4 使い方編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 今回は前回に引き続き任意のデータ型(クラス/構造体)に対してシリアライズできるようにする方法について説明します。 ソース一式はGitHubで公開しています。 前提条件 今…

C++で任意のデータ型をシリアライズ - その3 テキスト形式シリアライズ編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 今回は前回に引き続きテキスト形式でのシリアライズ処理の実装について説明します。 ソース一式はGitHubで公開しています。 前提条件 今回実装したソースは以下の環境で…

C++で任意のデータ型をシリアライズ - その2 バイナリ形式シリアライズ編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 今回は前回に引き続きバイナリ形式でのシリアライズ処理の実装について説明します。 ソース一式はGitHubで公開しています。 前提条件 今回実装したソースは以下の環境で…

C++で任意のデータ型をシリアライズ - その1 インタフェース定義編

まえがき C++で任意のデータをシリアライズするためのクラスの実装方法を紹介します。 プログラムで扱っているデータをネットワーク経由で送受信する場合や、ファイルに保存する場合にはシリアライズ(直列化)してバイナリ配列や文字列などに変換する必要があ…

C++でログ出力

まえがき 今回は、以下のような機能を持ったログ出力クラス(Logger)を実装します。 Infomation / Warning / Errorのログを使い分けられる 各ログは分かりやすいように色付きで表示 文字列フォーマッティング対応 マルチスレッド時の排他処理 同時にファイル…

C++でスタックトレース(関数コール履歴)の取得

まえがき 今回は、前回に引き続き、C++で例外発生箇所と状況を特定するために、スタックトレースを取得する方法を実装します。 前提条件 今回実装したソースは以下の環境でビルド、動作確認しています。 OS Ver Compiler Remarks Windows 10 Visual Studio 2…

C++で例外発生箇所(ファイルパス/ファイル行番号/関数名)の特定

まえがき 今回は、C++で例外発生箇所を特定する方法についてです。 C++やC#といったオブジェクト指向言語では、エラー処理は例外(Exception)という機構を使うことが一般的です。 C++では、例外をthrowするときにエラー情報を文字列として渡すことで、例外をc…

C++で文字列フォーマッティング(書式付き文字列生成)

まえがき C++でprintfライクな文字列フォーマッティングの実現方法です。 C++で文字列フォーマットをする方法はいくつかあります。 標準では、std::coutなどのiostreamを使った方法ですが、個人的にはちょっと使いづらいです。 C++20では、formatライブラリ…

C++でソケット通信 (UDPマルチキャスト/ブロードキャスト編)

まえがき ソケットを使ったEthernet通信の実装方法メモです。 今回は、前回に引き続きC++でUDPマルチキャスト/ブロードキャスト通信を行うための機能を実装します。 ソケット通信は、OSによって実装方法が異なるので、Windows / Mac / Linuxそれぞれの実装を…

C++でソケット通信 (UDPユニキャスト編)

まえがき ソケットを使ったEthernet通信の実装方法メモです。 今回は、C++でUDPユニキャスト通信を行うための機能を実装します。 ソケット通信は、OSによって実装方法が異なるので、Windows / Mac / Linuxそれぞれの実装を行い、環境によって自動的に切り替…

ClangNet(libclang)で構文解析サンプル - その1 (関数コールツリー、関数クロスリファレンス)

まえがき 今回はClangNet(libclangの.NET(C#) Binding)を使った実用的な構文解析のサンプルを作成してみます。 今回作成するサンプルでは、以下の2つの情報を出力する機能を実装します。 関数コールツリー 関数クロスリファレンス(宣言/定義/コール)情報 Cla…

ClangNet(libclangの.NET(C#) Binding) Ver.1.1.0リリース

リリースノート ClangNetのVer1.1.0をリリースしました。 変更点: 1. LLVM/Clang Ver.9.0.0に対応 2. いくつかの不具合を修正 ダウンロード先&インストール方法 libclang.dllやClangNetは以下からダウンロードしてください。 LLVM/Clang Ver.9.0.0 : Link Gi…

ClangNet(libclangの.NET(C#) Binding)によるC/C++ソースコードの解析 - その1

まえがき LLVM/Clangに同梱されているlibclangの.NET(C#) Bindingライブラリ(ClangNet)を作成しました。 libclangはC/C++/Objective-Cソースコードの解析や自動補完機能を提供する高レベルのAPIで、オリジナルはC言語ベースのAPIが提供されています。 C言語…

Python学習メモ - その8

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はディクショナリ(Dictionary)についてです。 ディクショナリ(Dictionary) ディクショナリはユニーク(一意)なキーとそれに対応する値を格納するコレクションです。 例えば、IDとそれに対…

Python学習メモ - その7

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はセット(Set)についてです。 セット(Set) セットはタプルやリストと同様、複数のデータをまとめて扱う場合に使用しますが、ユニーク(一意)な値を格納する順序なしのコレクションです。 …

Python学習メモ - その6

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はリスト(List)についてです。 リスト(List) リストは前回説明したタプルと同様、複数のデータをまとめて扱う場合に使用しますが、タプルとの違いは要素の追加や挿入、削除などが可能なこ…

Python学習メモ - その5

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はタプル(Tuple)についてです。 タプル(Tuple) プログラミングをしていると、複数のデータをまとめて扱いたいときがあります。 例えば、座標などがそうです。 座標は、x軸とy軸(3次元の場…

Python学習メモ - その4

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回はビット演算、比較演算、論理演算についてです。 ビット演算 ビット演算はC言語などとほぼ変わらないので、特別異なる点のみ説明します。 シフト演算 print(2 << 3) print(4 >> 2) 実行…

Python学習メモ - その3

まえがき 最近、Python を勉強し始めたので、その学習メモです。 今回は基数についてです。 基数 基数は、各桁を構成する数値や記号の数を表し、簡単に言うと桁が繰り上がる数です。 この基数を使った数の表現方法を記数法と言います。 例えば、普段生活で使…

Python学習メモ - その2

まえがき 最近、Pythonを勉強し始めたので、その学習メモです。 今回は数値演算、数学関数についてです。 数値演算 まずは、数値演算です。 Pythonでは、標準で整数、浮動小数点数、複素数を取り扱うことができます。 整数や浮動小数点は、C / C++ / C#など…

Python学習メモ - その1

まえがき 最近、Pythonを勉強し始めたので、その学習メモです。 Hello, World まずは、おなじみの「Hello, World」から。 print('Hello, World') 実行結果 Hello, World 余計なものは何もいらない。そうPythonならね。 文字列処理 続いてはよく使う文字列処…

Excelの列名 <—> 列番号相互変換

まえがき Excelの列名(A, B, ..., AA, AB)と列番号(1, 2, ...)を相互変換する方法のメモです。 ついでに、相互変換するWindows用アプリケーションも作成しました。 列名 <--> 列番号相互変換 共通定数 まずは、共通で使用する定数を定義します。 // アルファ…

UMLのステートマシン図を実装する for C# - まとめ

まとめ 「UMLのステートマシン図を実装する for C#」のまとめ記事です。 次のようなステートマシンをC#で実装する方法について紹介しています。 エアコンステートマシン No. 内容 Link 備考 その1 ステートマシンベースクラス実装 Link その2 ステートマシン…

UMLのステートマシン図を実装する for C# - その7

まえがき ステートマシンをGUI(WPF)で動作させるアプリケーションを実装していきます。 エアコンステートマシン 事前準備 今回は、WPF + MVVM + リアクティブプログラミングでGUIアプリケーションを実装しようと思います。 MVVMのフレームワークにはLivet…

UMLのステートマシン図を実装する for C# - その6

まえがき ステートマシンをCUI(コマンドライン)で動作させるアプリケーションを実装していきます。 エアコンステートマシン Messenger クラス 状態遷移など、ステートマシンの内部状態を把握しやすくするために、任意の文字列(ログなど)をアプリケーションに…

UMLのステートマシン図を実装する for C# - その5

まえがき 今回は、エアコンモデル(AirConditionerクラス)を実装していきます。 エアコンモデルは、今回のテーマである「ステートマシン図の実装」からは離れてしまうので、それっぽく動作するものに留めておきます。 エアコンステートマシン StainLevel 列挙…

UMLのステートマシン図を実装する for C# - その4

まえがき 今回は、前回に引き続きサンプルのエアコンステートマシンを実装していきます。 エアコンステートマシン State クラス State クラスを継承した各状態を実装します。 エアコンステートマシンでは、4 つのメイン状態と、6つのサブ状態を実装する必…

UMLのステートマシン図を実装する for C# - その3

まえがき 今回は、前回説明したサンプルのエアコンステートマシンを実装していきます。 エアコンステートマシン StateMachine クラス StateMachine クラスを継承したステートマシンを実装します。 エアコンステートマシンでは、3 つのステートマシンを実装す…

UMLのステートマシン図を実装する for C# - その2

まえがき 今回は、前回作成したベースクラスを使って実装するステートマシンのサンプルについて説明します。 エアコンステートマシン 上記ステートマシンは、エアコンの状態遷移を表したものになります。 なお、今回作成するステートマシンはサンプルのため…

UMLのステートマシン図を実装する for C# - その1

まえがき ステートマシン(状態機械)の実装方法にはいくつか方法があり、有名なものとして GoF デザインパターンのState パターンがありますが、UML で表記されるステートマシン図の実装方法について書かれた Web ページなどをあまり見かけないので、State パ…