Example #1
0
void ReflectivePlot::appendValue(Request_ptr req,
        TypeDescriptor_ptr reflec,
        Holder hold)
{
    if (reflec->is_primitive())
    {
        m_plot->append(reflec->to_double(hold));
    }
    else if(reflec->is_repeated() &&
            reflec->get_slice()->is_primitive())
    {
        QVector< double > values;

        const unsigned int length = reflec->get_length(hold);
        core::reflective_base const * slice = reflec->get_slice();

        for (unsigned int i = 0; i < length; i++)
        {
            const core::holder h = reflec->get_child_value(hold, i);
            values.push_back(slice->to_double(h));
        }

        if (!values.isEmpty())
            m_plot->append(values);
    }
    // N-dimensional types
    else if(reflec->is_repeated() &&
            reflec->get_slice()->is_repeated())
    {
        unsigned int length = reflec->get_length(hold);

        for (unsigned int i = 0; i < length; i++)
        {
            core::holder h = reflec->get_child_value(hold, i);

            // Recursive
            appendValue(req, reflec->get_slice(), h);
        }
    }
}
Example #2
0
File: path.cpp Project: asenac/gsim
bool followPath(
    TypeDescriptor_ptr message,
    Holder holder,
    const ReflectivePath_t& path,
    TypeDescriptor_ptr& descriptor,
    Holder& value)
{
    value = holder;
    descriptor = message;

    ReflectivePath_t::const_iterator it = path.begin();

    for (; it != path.end() && descriptor; ++it)
    {
        if (descriptor->is_variable_length())
            return false;

        value = descriptor->get_child_value(value, *it);
        descriptor = descriptor->get_child(*it);
    }

    // valid if descriptor not null
    return (descriptor);
}