[Rock-dev] Modifying a complex properties from ruby
Ajish Babu
ajish.babu at dfki.de
Fri Sep 5 18:24:18 CEST 2014
On 09/05/2014 03:48 PM, Sylvain Joyeux wrote:
> Could you be more specific as to the type of property.
I have the following types, in effect four nested std::vector types
namespace ndlcom_device_driver
{
struct ConfigureRegisterBit {
std::string name;
int bit;
bool value;t
};
typedef std::vector< ConfigureRegisterBit > ConfigureRegisterBits;
struct ConfigureRegister {
std::string name;
representations::RegisterId id;
double value;
ConfigureRegisterBits bits;
std::string valueString;
};
typedef std::vector< ConfigureRegister > ConfigureRegisters;
struct DeviceClassRegister {
std::string deviceclass;
ConfigureRegisters registers;
};
typedef std::vector< DeviceClassRegister > DeviceClassRegisters;
struct JointConfig {
std::string jointName;
DeviceClassRegisters configureRegisters;
};
typedef std::vector< JointConfig > JointsConfig;
}
The task property is of type JointsConfig. In the ruby script I do
joints_config = task.joints_config.to_a
joints_config.each do | joint_config |
configureRegisters = joint_config.configureRegisters.to_a
configureRegisters.push(
Types::NdlcomDeviceDriver::DeviceClassRegister.new )
joint_config.configureRegisters = configureRegisters
end
task.joints_config = joints_config # This is where it crashes
I also tried something like.
joints_config.each do | joint |
joint.configureRegisters.push(
Types::NdlcomDeviceDriver::DeviceClassRegister.new )
joint.configureRegisters.each do | dc |
dc.registers.push(
Types::NdlcomDeviceDriver::ConfigureRegister.new )
dc.registers.each do | reg |
reg.bits.push(
Types::NdlcomDeviceDriver::ConfigureRegisterBit.new )
end
end
end
The difference is that then the problem is changing from crash to
following error message.
install/lib/ruby/1.9.1/typelib/compound_type.rb:23:in `set':
invalidated object for
/ndlcom_device_driver/DeviceClassRegister.registers for
/ndlcom_device_driver/JointConfig.configureRegisters (TypeError)
Let me know if you need more info.
>
> Moreover, do you try to change the property while the component is running ?
No the task is not running.
Best
Ajish
>
> Sylvain
>
> On Thu, Sep 4, 2014 at 3:19 PM, Ajish Babu <ajish.babu at dfki.de> wrote:
>> Hi all,
>>
>> I have a complex property with std::vector (sub-configs) inside std:vector
>> (configs). I am trying to modify the property from ruby script.
>>
>> Changing any already existing value works fine. But once I try to push a new
>> element to the sub-configs and then write it back like
>>
>> configs = task.configs.to_a
>>
>> configs.each do | config |
>> sub_configs = config.sub_configs.to_a
>> sub_configs.push( Types::SubConfig.new )
>> config.sub_configs = sub_configs
>> end
>>
>> task.configs = configs
>>
>> it crashes. Does anybody know how this can be achieved?
>>
>> Best
>> Ajish
>>
>>
>>
>>
>> _______________________________________________
>> Rock-dev mailing list
>> Rock-dev at dfki.de
>> http://www.dfki.de/mailman/cgi-bin/listinfo/rock-dev
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.dfki.de/pipermail/rock-dev/attachments/20140905/20021402/attachment-0001.htm
More information about the Rock-dev
mailing list