清水様
安藤です
ポート周りは1.0でだいぶ構造を変えました。
詳しくは添付のクラス図をご覧ください。
以前は、InPort<>, OutPort<> というものはバッファを
主体としたクラスだったのですが、1.0からは、
Portそのものになり、バッファは、接続毎に生成されるConnector
オブジェクト毎に一つづつ割り当てられるようになっています。
これにより、以前問題になっていた複数のInPortへの出力ができない
といった問題が解決されました。
> OpenRTM-aist開発者の皆様
>
> ポートの名前について教えてください。
>
> 0.4系では、ポートに関連する名前として、
> バッファ自体の名前とRTC上のポートの名前、
> の二つがあって、
> バッファ名はInPort/OutPortのコンストラクタ引数、
> ポート名はregisterInPort/registerOutPortの
> 引数として指定するようになっていたと思います。
> そして、RTC/PortのCORBAインタフェースから
> 取得される名前は上記のポート名の方だったと思います。
>
> ところが、1.0.0では、
> registerInPort/registerOutPortで
> 指定する名前は特に利用されることも無く、
> RTC/PortのCORBAインタフェースで取得される名前は、
> InPort/OutPortのコンストラクタ引数の方と
> なっているように見受けられます。
>
> これは、ポート関連の名前の位置付けが
> 変わったと考えればよろしいのでしょうか?
> 0.4系ではバッファの名前とポートの名前が
> 分離されていましたが、
> 今後はそれらが統一されて、
> それぞれを独立して名前付けしない方針
> となるのでしょうか?
上記の理由により、InPort/OutPortについては、バッファにつけていた
名前をPortの名前とし、registerInPortなどで渡す名前は、InPortの
名前と同じであるという前提で、ポートのプロパティを取得するためだけに
使用しています。
本当は、どちらか一つにしたいところなのですが、0.4からのインターフェースの
互換性のためこのような仕様になっています。
rtc-templateやRTCBuilderでコードを生成する限りでは、これらの2つの名前は
必ず同じですので問題は起こりません。ただし、自分でregisterInPort
などを呼んで動的にポートを操作する場合には問題になるかもしれません。
void RTObject_impl::registerInPort(InPortBase& inport);
というシグニチャの関数も用意したいと思います。
さらに、以前のregisterInPort関数は
void RTObject_impl::registerInPort(const char* name, InPortBase& inport)
{
inport.setName(name);
registerInPort(inport);
}
のようにしようかと思いますが、いかがでしょうか?
> # ポート関連の名前で重要なのは、
> CORBAインタフェースから取得する名前の方なので、
> 0.4系での実装を変更する必要が出てきそうです。
>
> よろしくお願いいたします。
>
> 静岡大 清水
OpenRTM-aist開発者の皆様
ポートの名前について教えてください。
0.4系では、ポートに関連する名前として、
バッファ自体の名前とRTC上のポートの名前、
の二つがあって、
バッファ名はInPort/OutPortのコンストラクタ引数、
ポート名はregisterInPort/registerOutPortの
引数として指定するようになっていたと思います。
そして、RTC/PortのCORBAインタフェースから
取得される名前は上記のポート名の方だったと思います。
ところが、1.0.0では、
registerInPort/registerOutPortで
指定する名前は特に利用されることも無く、
RTC/PortのCORBAインタフェースで取得される名前は、
InPort/OutPortのコンストラクタ引数の方と
なっているように見受けられます。
これは、ポート関連の名前の位置付けが
変わったと考えればよろしいのでしょうか?
0.4系ではバッファの名前とポートの名前が
分離されていましたが、
今後はそれらが統一されて、
それぞれを独立して名前付けしない方針
となるのでしょうか?
# ポート関連の名前で重要なのは、
CORBAインタフェースから取得する名前の方なので、
0.4系での実装を変更する必要が出てきそうです。
よろしくお願いいたします。
静岡大 清水