umsCodeGenerator
umsCodeGenerator とは?
umsCodeGenerator は、mappingSchema の処理系です。 mapping definition を入力として、 UMS の定義に従って書かれたデータとプログラミング言語とのマッピングを行い、 データをencode/decodeするためのソースコードを生成します。
このツールは、 mappingSchema の文法体系を曖昧さなく 策定する補助として UMS group 自身が開発を行っています。 mappingSchema の文法は、このツールの進化とともに、より汎用でシンプルなものに成長してきました。
umsCodeGenerator の処理系の全体像
対象とするデータ構造
tableToolsは、その名のとおり「テーブル構造のデータ」を扱うことを対象としています。 具体的には、テキストでテーブル構造を表す形式として、次のような","(カンマ)を区切り文字とした CSV構造が広く利用されています。
csvdata1,11,1.2345
また、XMLでテーブル構造を表すと、例えば次のようになるでしょう。
<Record>
<strData>xmldata1</strData>
<intData>11</intData>
<doubleData>1.2345</doubleData>
</Record>
以上のように、非常にシンプルな構造ですが、データ保存/交換など、多くの場面で利用されています。 tableToolsは、こうしたテーブル構造のデータと、各種プログラミング言語とのマッピング (将来的には、データ構造同士のマッピング)を行うことで、システム開発者が新たにプログラムを 実装する際の負荷を軽減し、システム全体で開発効率の向上をはかることを目標としています。
データ−プログラミング言語間のマッピング
現在サポートされているマッピングは以下のとおりです。
Java | C | C++ | Perl | |
---|---|---|---|---|
Text | ○ | ○ | -- | -- |
Binary | ○ | ○ | -- | -- |
XML | -- | -- | -- | -- |
上のマトリックスにおいて、「○」になっているものが、マッピングがサポートされている 組み合わせであることを示します。 また、「○」とある組み合わせは、双方向(decode:データ→プログラミング言語、 encode:プログラミング言語→データ)の変換を行うことが可能です。
利用可能なコンテナ−シーケンシャルデータ
Mapping definition で、 利用可能な要素のうちデータの空間に含まれるもの (コンテナ) は次のとおりです。
利用可能なコンテナ−プログラミング言語
プロトタイプ宣言では以下が利用可能です。
- Java
- class / function / arg / return / exception / array / var
- C
- package / function / arg / return / struct / array / var
- C++
- −
- Perl
- −
また、マッピングでは以下の利用可能なコンテナが言語によらず利用可能です。 今のところ言語固有なコンテナは実装されていません。
- 共通
-
- value-of
- callFunction
利用可能なコンテナ−共通部分
データ及び言語側から、共通に利用可能なコンテナは次のとおりです。
- data
- value (現バージョンでは、シーケンシャルデータ側のみ利用可能)
encodingLibrary
umsCodeGenerator では、以下の encode および W3C datatype の サブセットをサポートするライブラリ (encodingLibrary) がバンドルされています。
encode | W3C datatype |
Language | |||
---|---|---|---|---|---|
Java | C | C++ | Perl | ||
txt | string | String | char * | -- | -- |
token | String | char * | -- | -- | |
byte | byte | int8_t | -- | -- | |
short | short | int16_t | -- | -- | |
int | int | int32_t | -- | -- | |
long | long | int64_t | -- | -- | |
unsignedByte | short | uint32_t | -- | -- | |
unsignedShort | int | uint32_t | -- | -- | |
unsignedInt | long | uint32_t | -- | -- | |
unsignedLong | BigInteger | uint32_t | -- | -- | |
double | double | double | -- | -- | |
signed | byte | byte | int8_t | -- | -- |
short | short | int16_t | -- | -- | |
int | int | int32_t | -- | -- | |
long | long | int64_t | -- | -- | |
unsigned | unsignedByte | short | uint32_t | -- | -- |
unsignedShort | int | uint32_t | -- | -- | |
unsignedInt | long | uint32_t | -- | -- | |
unsignedLong | BigInteger | uint32_t | -- | -- | |
ieee754double | float | float | float | -- | -- |
double | double | double | -- | -- |
サンプルプログラム
サンプルプログラムやツールのソースコードは以下の標準に従うよう配慮しています。
- JAVA: JAVA2 1.4
- C言語: ISO9899 (C99)