void Wire::SetValue(void* value, AgilartDataTypes valueType) { list<ConnectionPoint*>::iterator i; for ( i = this->connectionPoints->begin(); i != this->connectionPoints->end(); i++ ) { if ( ( *i )->Direction() == DIRECTION_OUT ) continue; AgilartDataTypes receiverType = (*i)->DataType(); InConnectionPoint* receiver = (InConnectionPoint *) ( *i ); if( receiverType == ANY ) { receiver->SetDataType( valueType ); receiver->SetValue( value ); } else { void* targetValue = Convert::ToTypeInstance( value, valueType, receiverType ); receiver->SetValue( targetValue ); } } }
Program* ProgramManager::CreateFromDescriptor( ProgramDescriptor* descriptor ) { int id; string name; string description; DescriptorsUtil::GetIntProperty( descriptor->Properties, "Id", &id ); DescriptorsUtil::GetStringProperty( descriptor->Properties, "Name", &name ); DescriptorsUtil::GetStringProperty( descriptor->Properties, "Description", &description ); Program* program = new Program( id, name, description ); string deviceType; // ------ Initialize Devices: list<DeviceDescriptor>::iterator deviceIt; for ( deviceIt = descriptor->Devices.begin(); deviceIt != descriptor->Devices.end(); deviceIt++ ) { BaseDevice* device = DeviceManager::Instance()->CreateFromDescriptor( *deviceIt ); if( device == NULL ) return NULL; program->AddDevice( device ); } // ------- Initialize Wires: list<WireDescriptor>::iterator wireIt; list<WireConnectionPointDescriptor>::iterator cpIt; //connectionPointsIt for ( wireIt = descriptor->Wires.begin(); wireIt != descriptor->Wires.end(); wireIt++ ) { Wire* wire = new Wire(); for ( cpIt = ( *wireIt ).WireConnectionPoints.begin(); cpIt != ( *wireIt ).WireConnectionPoints.end(); cpIt++ ) { BaseDevice* device = program->GetDevice( ( *cpIt ).DeviceDescriptorId ); ConnectionPoint* cp = device->GetConnectionPoint( ( *cpIt ).ConnectionPointDescriptorId ); wire->Attach( cp ); } program->AddWire( wire ); } // ------ Initialize the program's Power Wire: list<WireConnectionPointDescriptor>* stratupPoints = &descriptor->PowerWire.WireConnectionPoints; for ( cpIt = stratupPoints->begin(); cpIt != stratupPoints->end(); cpIt++ ) { int* startUpValue = new int( 1 ); BaseDevice* device = program->GetDevice( ( *cpIt ).DeviceDescriptorId ); ConnectionPoint* cp = device->GetConnectionPoint( ( *cpIt ).ConnectionPointDescriptorId ); InConnectionPoint* inConnectionPoint = (InConnectionPoint*) cp; inConnectionPoint->SetValue( startUpValue ); program->PowerWire()->Attach( inConnectionPoint ); } return program; }