// Invocation of a base ArFunctor pointer to a global functor. Because the // pointer is of type ArFunctor, the parameters can not be supplied. The // default parameters, which are supplied when the functor is constructed, // are used. void testGlobalReturnBase() { ArGlobalRetFunctor<bool> functor(retFunction); ArGlobalRetFunctor1<char*, int> functor1(retFunction, 1); ArGlobalRetFunctor2<double, bool, std::string> functor2(retFunction, false, "default arg"); ArRetFunctor<bool> *fBoolPtr; ArRetFunctor<char*> *fCharPtr; ArRetFunctor<double> *fDoublePtr; bool bret; char *cret; double dret; printf("\n****** Testing global base invocation with return\n"); fBoolPtr=&functor; puts("> bool retFunction() should return true..."); bret=fBoolPtr->invokeR(); printf("Returned: %d\n", bret); fCharPtr=&functor1; puts("> char* retFunction(1) should return \"Hello\"..."); cret=fCharPtr->invokeR(); printf("Returned: %s\n", cret); fDoublePtr=&functor2; puts("> double retFunction(false, \"default arg\") should return 4.62..."); dret=fDoublePtr->invokeR(); printf("Returned: %e\n", dret); }
void testReturnBase() { TestClass test; ArRetFunctorC<bool, TestClass> functor(test, &TestClass::retFunction); ArRetFunctor1C<char*, TestClass, int> functor1(test, &TestClass::retFunction, 1); ArRetFunctor2C<double, TestClass, bool, std::string> functor2(test, &TestClass::retFunction, false, "default arg"); ArRetFunctor<bool> *fBoolPtr; ArRetFunctor<char*> *fCharPtr; ArRetFunctor<double> *fDoublePtr; bool bret; char *cret; double dret; printf("\n****** Testing base invocation with return\n"); fBoolPtr=&functor; puts("> TestClass::retFunction() should return true"); bret=fBoolPtr->invokeR(); printf("Returned: %d\n", bret); fCharPtr=&functor1; puts("> TestClass::retFunction(1) should return \"Hello\""); cret=fCharPtr->invokeR(); printf("Returned: %s\n", cret); fDoublePtr=&functor2; puts("> TestClass::retFunction(false, \"default arg\" should return 4.62"); dret=fDoublePtr->invokeR(); printf("Returned: %e\n", dret); }
AREXPORT bool Aria::parseArgs(void) { std::multimap<int, ArRetFunctor<bool> *>::reverse_iterator it; ArRetFunctor<bool> *callback; ArLog::log(ourParseArgsLogLevel, "Aria: Parsing arguments"); for (it = ourParseArgCBs.rbegin(); it != ourParseArgCBs.rend(); it++) { callback = (*it).second; if (callback->getName() != NULL && callback->getName()[0] != '\0') ArLog::log(ourParseArgsLogLevel, "Aria: Calling parse arg functor '%s' (%d)", callback->getName(), (*it).first); else ArLog::log(ourParseArgsLogLevel, "Aria: Calling unnamed parse arg functor (%d)", (*it).first); if (!callback->invokeR()) { return false; } } return true; }