Skip to content
Snippets Groups Projects
Recursive.cpp 1.68 KiB
Newer Older
#include "Recursive.h"
#include "RobotAPI/libraries/skills/core/SkillDescription.h"

namespace armarx::skills::provider
{

    Recursive::Recursive() : SimpleSpecializedSkill<skills::Example::RecursiveSkillParams>(GetSkillDescription())
    {
    }

    SkillDescription
    Recursive::GetSkillDescription()
    {
        armarx::skills::Example::RecursiveSkillParams root_profile_params;
        root_profile_params.n = 10;

        return SkillDescription{.skillId = skills::SkillID{.skillName = "Recursive"},
                                .description = "This skill calls itself recursively {n} times",
                                .rootProfileDefaults = root_profile_params.toAron(),
                                .timeout = armarx::core::time::Duration::MilliSeconds(10000),
                                .parametersType =
                                    armarx::skills::Example::RecursiveSkillParams::ToAronType(),
                                .resultType = armarx::skills::Example::RecursiveSkillParams::ToAronType()};
    }

    Skill::MainResult
    Recursive::main(const SpecializedMainInput& in)
    {
        const int n = in.parameters.n;

        if (n > 0)
        {
            SkillProxy prx(manager,
                           skills::SkillID{.providerId = *getSkillId().providerId, .skillName = "Recursive"});

            armarx::skills::Example::RecursiveSkillParams params;
            params.n = n - 1;

            std::this_thread::sleep_for(std::chrono::milliseconds(100));

            callSubskill(prx, params.toAron());
        }

        throwIfSkillShouldTerminate();

        return {TerminatedSkillStatus::Succeeded, nullptr};
    }
} // namespace armarx::skills::provider