4 データ型

本章では,FlowDesigner と HARK  のノード群で使用するデータ型について述べる. HARK  でデータ型を意識する必要があるのは,以下の 2 つのケースである.

ノードのプロパティ設定で用いるデータ型

ノードのプロパティとして現状で指定できるデータ型は, 以下の 5 種類である.

意味

データ型レベル

int 

整数型

基本型

float 

単精度浮動小数点型

基本型

string 

文字列型

基本型

bool 

論理型

基本型

Object 

オブジェクト型

FlowDesigner 固有型

subnet_param 

サブネットパラメータ型

FlowDesigner 固有型

int , float , string , bool , については,C++ の基本データ型をそのまま 利用しているので,仕様は C++ に準じる.Object ,subnet_param について は,FlowDesigner 固有のデータ型である.Object は, FlowDesigner 内部 の Object 型を継承しているクラスとして定義されるデータ型の総称となって いる.HARK  では,プロパティとして指定できる Object は,Vector もしく は Matrix であるが,後述のように基本型以外は Object 型を継承している ため,Vector や Matrix のようにテキスト形式での記述が実装されていればプロパティとして指定することができる. 基本型であっても,Object 型を継承したオブジェクトを利用することで(例えば $<$Int 1 $>$など), Object として指定することも可能である.subnet_param は, 複数のノード間で一つのパラメータをラベルを用いて共有する際に用いら れる特殊なデータ型である.

ノード同士の接続の際に用いるデータ型

ノードの接続(ノード間通信)は, 異なるノードのターミナル(ノードの左右に黒点として表示される)を FlowDesigner の GUI 上で線で 結ぶことによって,実現される.この際に用いられるデータ型は,以下の通りである.

意味

データ型レベル

any 

Any 型

FlowDesigner 固有型

int 

整数型

基本型

float 

単精度浮動小数点実数型

基本型

double 

倍精度浮動小数点実数型

基本型

complex<float> 

単精度浮動小数点複素数型

基本型

complex<double> 

倍精度浮動小数点複素数型

基本型

char 

文字型

基本型

string 

文字列型

基本型

bool 

論理型

基本型

Vector 

配列型

FlowDesigner オブジェクト型

Matrix 

行列型

FlowDesigner オブジェクト型

Int 

整数型

FlowDesigner オブジェクト型

Float 

単精度浮動小数点実数型

FlowDesigner オブジェクト型

String 

文字列型

FlowDesigner オブジェクト型

Complex 

複素数型

FlowDesigner オブジェクト型

TrueObject 

論理型(真)

FlowDesigner オブジェクト型

FalseObject 

論理型(偽)

FlowDesigner オブジェクト型

nilObject 

オブジェクト型(nil)

FlowDesigner オブジェクト型

ObjectRef 

オブジェクト参照型

FlowDesigner 固有型

Map 

マップ型

HARK  固有型

Source 

音源情報型

HARK  固有型

any はあらゆるデータ型を含む抽象的なデータ型であり,FlowDesigner 固有 で定義されている. int , float , double , complex<float> , complex<double> , char , string , bool は,C++ の基本データ型を利用している.これらの仕様は対応する C++のデータ 型の仕様に準ずる.基本型を,Object のコンテキストで使おうとすると自動 的に GenericType<T>  に変換され,Int , Float のよう に,Object を継承した先頭が大文字になったクラスとして扱うことができる. ただし,String , Complex は,GenericType ではなく,それぞ れ std:string, std:complex に対するデファインとして定義されているが,同 様にstring , complex をObject 型として使う際に用いられる.このように基 本型に対して,FlowDesigner の Object を継承する形で定義されているデー タ型をFlowDesigner オブジェクト型と呼ぶものとする.TrueObject , FalseObject , nilObject もそれぞれ,true, false, nil に対応する Object とし て定義されている.FlowDesigner オブジェクト型で最もよく使われるもの は,Vector , Matrix であろう.これらは,C++ の STL を継承し た FlowDesigner オブジェクト型であり,基本的には C++ の STL の対応する データ型の仕様に準ずる.

ObjectRef は,オブジェクト型へのスマートポインタとして実現されてい る FlowDesigner 固有のデータ型であり,Vector , Matrix , Map の要素とし て用いられることが多い.

Map も,C++ の STL を継承しているが FlowDesigner ではなく,HARK  固有の データ型である.Source は,音源情報型として定義される HARK  固有のデー タ型である.

4.1 ノードのターミナルの型

は,FlowDesigner 上で 型を知りたいノードのターミナルにカーソルをフォーカスする と, FlowDesigner の最下部に表示される.図 4.1 に,AudioStreamFromMic ノードの AUDIO ターミナルにマウスをフォーカ スした例を示す.FlowDesigner の最下部にAUDIO (Matrix<float> Windowed multi-channel sound data. A row index is a channel, and a column index is time. が表示さ れ,AUDIO ポートが Matrix<float> をサポートしていること,窓掛けされた音声波 形を出力すること,行列の行がチャネルを表し,列が時刻を表していること がわかる.

\includegraphics[width=120mm]{fig/types/MessageBar}
Figure 4.1: メッセージバーの表示例

一般的に,ノードのターミナル同士は,データ型が同じである,もしくは 受け側のターミナルが,送り側のターミナルのデータ型を包含していれば, 正常に接続することができ,黒矢印で表示される.この条件を満たさないターミナル同士を 接続した場合は,警告の意味で 赤矢印で表示される.

以降の節では,上述について基本型,FlowDesigner オブジェクト型, FlowDesigner 固有型 HARK  固有型に分けて説明を行う.