Next: 4.4.3 命令データの作成
Up: 4.4 命令データの作成
Previous: 4.4.1 RCRegion
OVirtualRobotCommへの命令は,構造体OCommandVectorDataで指定する.
OCommandVectorDataは,関数OPENR::NewCommandVectorData()を使って共有メ
モリ上に作成する.第1引数は一度に動かすCPCプリミティブの数を指定する.
第3引数には,作成されたOCommandVectorDataへのポインタが返る.
第2引数には,共有メモリに振られたIDが返る.最後に一度に動かすCPCプ
リミティブの数は,SetNumData()を使って改めて指定しなくてはならない.
OCommandVectorDataのポインタをRCRegionに格納する時は,RCRegionのコンス
トラクタの引数に,vectorInfoのメンバ関数とOCommandVectorDataそれ自体の
ポインタを指定する.
以下の例では,7つのCPCプリミティブを使うので,第1引数を7で指定する.
RCRegion* region;
MemoryRegionID cmdVecDataID;
OCommandVectorData* cmdVecData;
OPENR::NewCommandVectorData(7,
&cmdVecDataID, &cmdVecData);
region = new RCRegion(
cmdVecData->vectorInfo.memRegionID,
cmdVecData->vectorInfo.offset,
(void*)cmdVecData,
cmdVecData->vectorInfo.totalSize);
cmdVecData->SetNumData(7);
OCommandVectorDataは,次のように定義されている.
ODataVectorInfoは,OCommandVectorData全体に関する情報を含む.OComm
andInfoは,OCommandVectorDataに格納された複数のOCommandDataのそれぞれ
に対する情報を含む.
struct OCommandVectorData {
ODataVectorInfo vectorInfo;
OCommandInfo info[1];
void SetNumData(size_t ndata) {
vectorInfo.numData = ndata;
}
OCommandInfo* GetInfo(int index) {
return &info[index];
}
OCommandData* GetData(int index) {
return (OCommandData*)((byte*)&vectorInfo +
info[index].dataOffset);
}
};
メモリ上のOCommandVectorDataからOCommandInfoやOCommandDataを取り出すに
は,GetInfo()やGetData()に配列のインデックス番号を指定する.
for(int i=0; i<numOfData; i++){
OCommandInfo* info = cmdVecData->GetInfo();
OCommandData* data = cmdVecData->GetData();
}
generated through LaTeX2HTML. M.Inaba 平成18年5月6日