ライセンス : Apache2.0
Windows | %USERPROFILE%\.astah\[astahのエディション名]\plugins\uml2c\header.vm |
Mac / Linux | $HOME/.astah/[astahのエディション名]/plugins/uml2c/header.vm |
~/plugins/astah-uml2c-plugin/sampleフォルダ内にあるサンプルファイル「uml2c-plugin-sample.asta」を使った出力例です。
<<SingleInstance>>ステレオタイプをもつクラスを、シングルインスタンスモジュールとしてコード生成します。
#include "Foo.h" static EnumSample enumSample[ /* TODO */ ]; static Bar bar; static Abstract *abstracts[ /* TODO */ ]; static Concrete concretes[ /* TODO */ ]; void Foo_Create(void) { /* TODO */ } void Foo_Destroy(void) { /* TODO */ } uint32_t Foo_Operation(const char *arg) { /* TODO */ }
#ifndef _FOO_H_ #define _FOO_H_ #ifdef __cplusplus extern "C" { /* } */ #endif void Foo_Create(void); void Foo_Destroy(void); uint32_t Foo_Operation(const char *arg); #ifdef __cplusplus } #endif #endif /* _FOO_H_ */
通常のクラスを、マルチインスタンスモジュールとしてコード生成します。
#include "Bar.h" void Bar_Create(Bar self, uint64_t id, const char *name) { /* TODO */ } void Bar_Destroy(Bar self) { /* TODO */ } uint16_t Bar_Operation(Bar self) { /* TODO */ }
#ifndef _BAR_H_ #define _BAR_H_ #ifdef __cplusplus extern "C" { /* } */ #endif typedef struct BarStruct *Bar; void Bar_Create(Bar self, uint64_t id, const char *name); void Bar_Destroy(Bar self); uint16_t Bar_Operation(Bar self); #include "BarPrivate.h" #ifdef __cplusplus } #endif #endif /* _BAR_H_ */
#ifndef _BAR_PRIVATE_H_ #define _BAR_PRIVATE_H_ #ifdef __cplusplus extern "C" { /* } */ #endif struct BarStruct { uint64_t id; char *name; }; #ifdef __cplusplus } #endif #endif /* _BAR_PRIVATE_H_ */
Abstractなクラスを、型による動的インターフェイスとしてコード生成します。
#include "Abstract.h" void Abstract_Destroy(Abstract self) { /* TODO */ } uint8_t Abstract_Operation(Abstract self) { /* TODO */ }
#ifndef _ABSTRACT_H_ #define _ABSTRACT_H_ #ifdef __cplusplus extern "C" { /* } */ #endif typedef struct AbstractStruct *Abstract; void Abstract_Destroy(Abstract self); uint8_t Abstract_Operation(Abstract self); #include "AbstractPrivate.h" #ifdef __cplusplus } #endif #endif /* _ABSTRACT_H_ */
#ifndef _ABSTRACT_PRIVATE_H_ #define _ABSTRACT_PRIVATE_H_ #ifdef __cplusplus extern "C" { /* } */ #endif typedef struct AbstractInterfaceStruct *AbstractInterface; struct AbstractStruct { AbstractInterface vtable; uint64_t id; char *type; }; typedef struct AbstractInterfaceStruct { void (*Destroy)(Abstract self); uint8_t (*Operation)(Abstract self); }; #ifdef __cplusplus } #endif #endif /* _ABSTRACT_PRIVATE_H_ */