17 if(
auto request = request_ptr.lock() ) {
19 auto token = request->token;
21 assert( token->node );
28 auto status = token->status;
29 auto data = *token->data;
30 auto globals = token->globals;
31 for (
auto& choice : extensionElements->choices ) {
33 if ( !choice->enumeration.empty() ) {
34 auto values = choice->getEnumeration(status,data,globals);
35 if ( values.size() ) {
36 std::uniform_int_distribution<> random_distribution(0,(
int)values.size()-1);
37 choices.push_back( values[ (
size_t)random_distribution(
randomGenerator) ] );
38 choice->attributeRegistry.setValue(choice->attribute, status, data, globals, choices.back());
45 else if ( choice->lowerBound.has_value() && choice->upperBound.has_value() ) {
46 auto [min,max] = choice->getBounds(status,data,globals);
51 if ( choice->attribute->type ==
DECIMAL ) {
52 std::uniform_real_distribution<> random_distribution((
double)min,(
double)max);
54 choice->attributeRegistry.setValue(choice->attribute, status, data, globals, choices.back());
57 std::uniform_int_distribution<> random_distribution((
int)min,(
int)max);
59 choice->attributeRegistry.setValue(choice->attribute, status, data, globals, choices.back());
67 if ( !choices.empty() ) {
68 return std::make_shared<ChoiceEvent>(token, std::move(choices));