void cLibsvmSink::fetchConfig() { cDataSink::fetchConfig(); filename = getStr("filename"); SMILE_DBG(3,"filename = '%s'",filename); lag = getInt("lag"); SMILE_DBG(3,"lag = %i",lag); append = getInt("append"); if (append) { SMILE_DBG(3,"append to file is enabled"); } timestamp = getInt("timestamp"); if (append) { SMILE_DBG(3,"printing timestamp attribute (index 1) enabled"); } instanceBase = getStr("instanceBase"); SMILE_DBG(3,"instanceBase = '%s'",instanceBase); instanceName = getStr("instanceName"); SMILE_DBG(3,"instanceName = '%s'",instanceName); int i; nClasses = getArraySize("class"); classname = (char**)calloc(1,sizeof(char*)*nClasses); for (i=0; i<nClasses; i++) { const char *tmp = getStr_f(myvprint("class[%i]",i)); if (tmp!=NULL) classname[i] = strdup(tmp); } if (isSet("targetNumAll")) { targetNumAll = getInt("targetNumAll"); } if (isSet("targetStrAll")) { if (nClasses <=0) COMP_ERR("cannt have 'targetStrAll' option if no class names have been defined using the 'class' option! (inst '%s')",getInstName()); targetNumAll = getClassIndex(getStr("targetStrAll")); } nInst = getArraySize("targetNum"); if (nInst > 0) { target = (int *)calloc(1,sizeof(int)*nInst); for (i=0; i<nInst; i++) { target[i] = getInt_f(myvprint("targetNum[%i]",i)); if (target[i] < 0) COMP_ERR("invalid class index %i for instance %i (in 'targetNum' option of instance '%s')",target[i],i,getInstName()); } } else { nInst = getArraySize("targetStr"); if (nInst > 0) { if (nClasses <=0) COMP_ERR("cannt have 'targetStr' option if no class names have been defined using the 'class' option! (inst '%s')",getInstName()); target = (int *)calloc(1,sizeof(int)*nInst); for (i=0; i<nInst; i++) { target[i] = getClassIndex(getStr_f(myvprint("targetStr[%i]",i))); if (target[i] < 0) COMP_ERR("invalid class index %i for instance %i (from class '%s' in 'targetStr' option of instance '%s')",target[i],i,getStr_f(myvprint("targetStr[%i]",i)),getInstName()); } } else { nInst = 0; } } }
void createIndex() { int& index = getClassIndex(); if(index == -1) // assign new index { index = getMaxCurrentlyUsedClassIndex()+1; // so that other dispatchers will not fall in conflict with this index incrementMaxCurrentlyUsedClassIndex(); } }
//------------------------------------------------------------------------------ // entityStateManager() -- (Output support) // -- Update the entity object for this NIB(Player) //------------------------------------------------------------------------------ bool Nib::entityStateManager(const double curExecTime) { bool ok = true; if (getPlayer()->isMode(simulation::Player::ACTIVE) && isPlayerStateUpdateRequired(curExecTime)) { // Need to update this entity object ... NetIO* netIO = static_cast<NetIO*>(getNetIO()); RTI::RTIambassador* rtiAmb = netIO->getRTIambassador(); // --- // First, make sure this entity has been registered // --- if (!isRegistered()) { try { RTI::ObjectClassHandle theClassHandle = netIO->getObjectClassHandle( getClassIndex() ); makeObjectName(); setObjectHandle( rtiAmb->registerObjectInstance( theClassHandle, getObjectName() ) ); netIO->addNibToObjectTables(this, simulation::NetIO::OUTPUT_NIB); std::cout << "rprfom::Nib::updateEntity(): Register entity: " << getObjectName() << " handle = " << getObjectHandle() << std::endl; } catch (RTI::Exception& e) { std::cerr << &e << std::endl; ok = false; } } // --- // Next, update the entity's attribute values ... // --- if ( ok && isRegistered()) { try { // Create the attribute-value pair set RTI::AttributeHandleValuePairSet* attrs = nullptr; attrs = RTI::AttributeSetFactory::create( NetIO::NUM_OBJECT_ATTRIBUTES ); // Load the set with updated attribute values updateBasicEntity(attrs,curExecTime); updatePhysicalEntity(attrs,curExecTime); updatePlatform(attrs,curExecTime); // Send attributes to the RTI //std::cout << "RprFom::Nib::updateEntity(): Update entity: " << getObjectName() << " handle = " << getObjectHandle() << std::endl; ok = netIO->updateAttributeValues(getObjectHandle(), attrs); delete attrs; } catch (RTI::Exception& e) { std::cerr << &e << std::endl; ok = false; } } } // end -- if active player needs an update return ok; }