next up previous
Next: 4.4.3 命令データの作成 Up: 4.4 命令データの作成 Previous: 4.4.1 RCRegion

4.4.2 OCommandVectorData

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日