END_TEST START_TEST(setup_from_test) { job pjob; char *str; memset(&pjob, 0, sizeof(pjob)); strcpy(pjob.ji_qs.ji_fileprefix, "bob"); str = setup_from(&pjob, "by"); fail_unless(!strcmp(str, "bobby")); }
//--------------------------------------------------------------------------------------- // ActorComponent@from_tag() static void mthd_from_tag(SkInvokedMethod * scope_p, SkInstance ** result_pp) { if (result_pp) // Do nothing if result not desired { SkInstance * result_p = nullptr; AActor * actor_p = nullptr; SkClass * sk_class_p = nullptr; UClass * ue_class_p = nullptr; SkClass * known_sk_class_p = nullptr; if (setup_from(scope_p, &actor_p, &sk_class_p, &known_sk_class_p, &ue_class_p)) { FName tag = scope_p->get_arg<SkUEName>(SkArg_2); const TSet<UActorComponent *> & components = actor_p->GetComponents(); for (UActorComponent * component_p : components) { if (component_p && component_p->IsA(ue_class_p) && component_p->ComponentHasTag(tag)) { // Is this a SkookumScriptBehaviorComponent? if (known_sk_class_p->is_component_class()) { // Yes, check class of its instance SkInstance * instance_p = static_cast<USkookumScriptBehaviorComponent *>(component_p)->get_sk_component_instance(); if (instance_p->get_class()->is_class(*sk_class_p)) { result_p = instance_p; result_p->reference(); break; } } else { result_p = SkUEActorComponent::new_instance(component_p); break; } } } } *result_pp = result_p ? result_p : SkBrain::ms_nil_p; } }
//--------------------------------------------------------------------------------------- // ActorComponent@list_from_tag() static void mthd_list_from_tag(SkInvokedMethod * scope_p, SkInstance ** result_pp) { if (result_pp) // Do nothing if result not desired { SkInstance * result_p = SkList::new_instance(); AActor * actor_p = nullptr; SkClass * sk_class_p = nullptr; UClass * ue_class_p = nullptr; SkClass * known_sk_class_p = nullptr; if (setup_from(scope_p, &actor_p, &sk_class_p, &known_sk_class_p, &ue_class_p)) { FName tag = scope_p->get_arg<SkUEName>(SkArg_2); const TSet<UActorComponent *> & components = actor_p->GetComponents(); SkInstanceList & list = result_p->as<SkList>(); list.ensure_size(components.Num()); // Safe bet, it's only pointers, so a few more won't hurt at all compared to reallocation performance hit for (UActorComponent * component_p : components) { if (component_p && component_p->IsA(ue_class_p) && component_p->ComponentHasTag(tag)) { // Is this a SkookumScriptBehaviorComponent? if (known_sk_class_p->is_component_class()) { // Yes, check class of its instance SkInstance * elem_p = static_cast<USkookumScriptBehaviorComponent *>(component_p)->get_sk_component_instance(); if (elem_p->get_class()->is_class(*sk_class_p)) { list.append(*elem_p, true); } } else { list.append(*SkUEActorComponent::new_instance(component_p), false); } } } } *result_pp = result_p; } }