31 namespace RobotRaconteur
67 template <
typename Return,
typename Param>
80 virtual Return
Next(
const Param& v) = 0;
92 virtual bool TryNext(
const Param& v, Return& ret)
115 const Param& v, boost::function<
void(
const Return&,
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
133 virtual void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
152 virtual void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
163 template <
typename Return>
164 class Generator<Return, void> :
private boost::noncopyable
208 boost::function<
void(
const Return&,
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
213 virtual void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
218 virtual void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
227 std::vector<Return> ret;
232 ret.push_back(
Next());
248 template <
typename Param>
249 class Generator<void, Param> :
private boost::noncopyable
260 virtual void Next(
const Param& v) = 0;
294 boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
299 virtual void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
304 virtual void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
309 class ROBOTRACONTEUR_CORE_API GeneratorClientBase
314 RR_WEAK_PTR<ServiceStub> stub;
315 RR_WEAK_PTR<RobotRaconteurNode> node;
317 std::string service_path;
319 GeneratorClientBase(boost::string_ref name, int32_t
id,
const RR_SHARED_PTR<ServiceStub>& stub);
321 virtual RR_INTRUSIVE_PTR<MessageElement> NextBase(
const RR_INTRUSIVE_PTR<MessageElement>& v);
322 virtual void AsyncNextBase(
323 const RR_INTRUSIVE_PTR<MessageElement>& v,
324 boost::function<
void(
const RR_INTRUSIVE_PTR<MessageElement>&,
const RR_SHARED_PTR<RobotRaconteurException>&,
325 const RR_SHARED_PTR<RobotRaconteurNode>&)>
329 static void AsyncNextBase1(
330 const RR_INTRUSIVE_PTR<MessageEntry>& ret,
const RR_SHARED_PTR<RobotRaconteurException>& err,
331 boost::function<
void(
const RR_INTRUSIVE_PTR<MessageElement>&,
const RR_SHARED_PTR<RobotRaconteurException>&,
332 const RR_SHARED_PTR<RobotRaconteurNode>&)>
334 const RR_WEAK_PTR<RobotRaconteurNode>& node);
337 RR_SHARED_PTR<ServiceStub> GetStub();
339 virtual void Abort();
340 virtual void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
342 virtual void Close();
343 virtual void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
345 std::string GetMemberName();
347 virtual ~GeneratorClientBase() {}
352 template <
typename Return>
353 static void GeneratorClient_AsyncNext1(
354 const RR_INTRUSIVE_PTR<MessageElement>& v2,
const RR_SHARED_PTR<RobotRaconteurException>& err,
355 const RR_SHARED_PTR<RobotRaconteurNode>& node,
356 boost::function<
void(
const Return&,
const RR_SHARED_PTR<RobotRaconteurException>&)> handler)
360 detail::InvokeHandlerWithException(node, handler, err);
366 ret = RRPrimUtil<Return>::PreUnpack(node->UnpackAnyType<
typename RRPrimUtil<Return>::BoxedType>(v2));
368 catch (std::exception& e)
370 detail::InvokeHandlerWithException(node, handler, e);
373 detail::InvokeHandler<Return>(node, handler, ret);
376 ROBOTRACONTEUR_CORE_API
void GeneratorClient_AsyncNext2(
377 const RR_INTRUSIVE_PTR<MessageElement>& v2,
const RR_SHARED_PTR<RobotRaconteurException>& err,
378 const RR_SHARED_PTR<RobotRaconteurNode>& node,
379 boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler);
382 template <
typename Return,
typename Param>
383 class GeneratorClient :
public Generator<Return, Param>,
public GeneratorClientBase
386 GeneratorClient(boost::string_ref name, int32_t
id,
const RR_SHARED_PTR<ServiceStub>& stub)
387 : GeneratorClientBase(name, id, stub)
390 RR_OVIRTUAL Return Next(
const Param& v) RR_OVERRIDE
392 RR_INTRUSIVE_PTR<MessageElement> v1 = CreateMessageElement(
393 "", GetStub()->RRGetNode()->
template PackAnyType<
typename RRPrimUtil<Param>::BoxedType>(
394 RRPrimUtil<Param>::PrePack(v)));
395 RR_INTRUSIVE_PTR<MessageElement> v2 = NextBase(v1);
396 return RRPrimUtil<Return>::PreUnpack(
397 GetStub()->RRGetNode()->
template UnpackAnyType<
typename RRPrimUtil<Return>::BoxedType>(v2));
400 const Param& v, boost::function<
void(
const Return&,
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
403 RR_INTRUSIVE_PTR<MessageElement> v1 = CreateMessageElement(
404 "", GetStub()->RRGetNode()->
template PackAnyType<
typename RRPrimUtil<Param>::BoxedType>(
405 RRPrimUtil<Param>::PrePack(v)));
407 boost::bind<void>(&detail::GeneratorClient_AsyncNext1<Return>, RR_BOOST_PLACEHOLDERS(_1),
408 RR_BOOST_PLACEHOLDERS(_2), RR_BOOST_PLACEHOLDERS(_3), handler),
411 RR_OVIRTUAL
void Abort() RR_OVERRIDE { GeneratorClientBase::Abort(); }
412 RR_OVIRTUAL
void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
415 GeneratorClientBase::AsyncAbort(handler, timeout);
417 RR_OVIRTUAL
void Close() RR_OVERRIDE { GeneratorClientBase::Close(); }
418 RR_OVIRTUAL
void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
421 GeneratorClientBase::AsyncAbort(handler, timeout);
425 template <
typename Return>
426 class GeneratorClient<Return, void> :
public Generator<Return, void>,
public GeneratorClientBase
429 GeneratorClient(boost::string_ref name, int32_t
id,
const RR_SHARED_PTR<ServiceStub>& stub)
430 : GeneratorClientBase(name, id, stub)
433 RR_OVIRTUAL Return Next() RR_OVERRIDE
435 RR_INTRUSIVE_PTR<MessageElement> v2 = NextBase(RR_INTRUSIVE_PTR<MessageElement>());
436 return RRPrimUtil<Return>::PreUnpack(
437 GetStub()->RRGetNode()->
template UnpackAnyType<
typename RRPrimUtil<Return>::BoxedType>(v2));
440 boost::function<
void(
const Return&,
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
443 AsyncNextBase(RR_INTRUSIVE_PTR<MessageElement>(),
444 boost::bind<void>(&detail::GeneratorClient_AsyncNext1<Return>, RR_BOOST_PLACEHOLDERS(_1),
445 RR_BOOST_PLACEHOLDERS(_2), RR_BOOST_PLACEHOLDERS(_3), handler),
448 RR_OVIRTUAL
void Abort() RR_OVERRIDE { GeneratorClientBase::Abort(); }
449 RR_OVIRTUAL
void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
452 GeneratorClientBase::AsyncAbort(handler, timeout);
454 RR_OVIRTUAL
void Close() RR_OVERRIDE { GeneratorClientBase::Close(); }
455 RR_OVIRTUAL
void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
458 GeneratorClientBase::AsyncAbort(handler, timeout);
462 template <
typename Param>
463 class GeneratorClient<void, Param> :
public Generator<void, Param>,
public GeneratorClientBase
466 GeneratorClient(boost::string_ref name, int32_t
id,
const RR_SHARED_PTR<ServiceStub>& stub)
467 : GeneratorClientBase(name, id, stub)
470 RR_OVIRTUAL
void Next(
const Param& v) RR_OVERRIDE
472 RR_INTRUSIVE_PTR<MessageElement> v1 = CreateMessageElement(
473 "", GetStub()->RRGetNode()->
template PackAnyType<
typename RRPrimUtil<Param>::BoxedType>(
474 RRPrimUtil<Param>::PrePack(v)));
477 RR_OVIRTUAL
void AsyncNext(
const Param& v,
478 boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
481 RR_INTRUSIVE_PTR<MessageElement> v1 = CreateMessageElement(
482 "", GetStub()->RRGetNode()->
template PackAnyType<
typename RRPrimUtil<Param>::BoxedType>(
483 RRPrimUtil<Param>::PrePack(v)));
485 boost::bind<void>(&detail::GeneratorClient_AsyncNext2, RR_BOOST_PLACEHOLDERS(_1),
486 RR_BOOST_PLACEHOLDERS(_2), RR_BOOST_PLACEHOLDERS(_3), RR_MOVE(handler)),
489 RR_OVIRTUAL
void Abort() RR_OVERRIDE { GeneratorClientBase::Abort(); }
490 RR_OVIRTUAL
void AsyncAbort(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
493 GeneratorClientBase::AsyncAbort(handler, timeout);
495 RR_OVIRTUAL
void Close() RR_OVERRIDE { GeneratorClientBase::Close(); }
496 RR_OVIRTUAL
void AsyncClose(boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
499 GeneratorClientBase::AsyncAbort(handler, timeout);
503 class ServerEndpoint;
505 class ROBOTRACONTEUR_CORE_API GeneratorServerBase :
private boost::noncopyable
510 RR_WEAK_PTR<ServiceSkel> skel;
511 RR_INTRUSIVE_PTR<MessageElement> m;
512 RR_SHARED_PTR<ServerEndpoint> ep;
513 RR_WEAK_PTR<RobotRaconteurNode> node;
514 std::string service_path;
516 boost::posix_time::ptime last_access_time;
518 GeneratorServerBase(boost::string_ref name, int32_t index,
const RR_SHARED_PTR<ServiceSkel>& skel,
519 const RR_SHARED_PTR<ServerEndpoint>& ep);
522 friend class ServiceSkel;
524 virtual void CallNext(
const RR_INTRUSIVE_PTR<MessageEntry>& m) = 0;
526 virtual uint32_t GetEndpoint();
528 virtual ~GeneratorServerBase() {}
531 static void EndAsyncCallNext(
const RR_WEAK_PTR<ServiceSkel>& skel,
const RR_INTRUSIVE_PTR<MessageElement>& ret,
532 const RR_SHARED_PTR<RobotRaconteurException>& err, int32_t index,
533 const RR_INTRUSIVE_PTR<MessageEntry>& m,
const RR_SHARED_PTR<ServerEndpoint>& ep);
535 template <
typename Return>
536 static void CallNext1(Return v2,
const RR_SHARED_PTR<RobotRaconteurException>& err, int32_t index,
537 const RR_WEAK_PTR<ServiceSkel>& skel,
const RR_INTRUSIVE_PTR<MessageEntry>& m,
538 const RR_SHARED_PTR<ServerEndpoint>& ep)
540 RR_SHARED_PTR<ServiceSkel> skel1 = skel.lock();
541 RR_SHARED_PTR<RobotRaconteurException> err2 = err;
545 err2 = RR_MAKE_SHARED<InvalidOperationException>(
"Service skel released");
549 GeneratorServerBase::EndAsyncCallNext(skel, RR_INTRUSIVE_PTR<MessageElement>(), err2, index, m, ep);
552 RR_INTRUSIVE_PTR<MessageElement> v3 =
553 CreateMessageElement(
"", skel1->RRGetNode()->template PackAnyType<
typename RRPrimUtil<Return>::BoxedType>(
554 RRPrimUtil<Return>::PrePack(v2)));
555 GeneratorServerBase::EndAsyncCallNext(skel, v3, err, index, m, ep);
558 static void CallNext2(
const RR_SHARED_PTR<RobotRaconteurException>& err, int32_t index,
559 const RR_WEAK_PTR<ServiceSkel>& skel,
const RR_INTRUSIVE_PTR<MessageEntry>& m,
560 const RR_SHARED_PTR<ServerEndpoint>& ep)
562 RR_SHARED_PTR<ServiceSkel> skel1 = skel.lock();
563 RR_SHARED_PTR<RobotRaconteurException> err2 = err;
567 err2 = RR_MAKE_SHARED<InvalidOperationException>(
"Service skel released");
571 GeneratorServerBase::EndAsyncCallNext(skel, RR_INTRUSIVE_PTR<MessageElement>(), err2, index, m, ep);
574 RR_INTRUSIVE_PTR<MessageElement> v3;
575 GeneratorServerBase::EndAsyncCallNext(skel, v3, err2, index, m, ep);
579 template <
typename Return,
typename Param>
580 class GeneratorServer :
public GeneratorServerBase
583 RR_SHARED_PTR<Generator<Return, Param> > generator;
586 GeneratorServer(
const RR_SHARED_PTR<Generator<Return, Param> >& generator, boost::string_ref name, int32_t
id,
587 const RR_SHARED_PTR<ServiceSkel>& skel,
const RR_SHARED_PTR<ServerEndpoint>& ep)
588 : GeneratorServerBase(name, id, skel, ep)
591 throw InvalidOperationException(
"Generator must not be null");
592 this->generator = generator;
595 RR_OVIRTUAL
void CallNext(
const RR_INTRUSIVE_PTR<MessageEntry>& m) RR_OVERRIDE
597 ROBOTRACONTEUR_LOG_TRACE_COMPONENT_PATH(node, Service, ep->GetLocalEndpoint(), service_path, name,
598 "Generator CallNext with id " << index);
599 RR_SHARED_PTR<ServiceSkel> skel1 = skel.lock();
602 throw InvalidOperationException(
"Skel has been released");
605 if (m->Error != MessageErrorType_None)
607 if (m->Error == MessageErrorType_StopIteration)
609 generator->AsyncClose(boost::bind<void>(&GeneratorServerBase::CallNext1<int32_t>, 0,
610 RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
614 generator->AsyncAbort(boost::bind<void>(&GeneratorServerBase::CallNext1<int32_t>, 0,
615 RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
620 Param v = RRPrimUtil<Param>::PreUnpack(
621 skel1->RRGetNode()->template UnpackAnyType<
typename RRPrimUtil<Param>::BoxedType>(
622 m->FindElement(
"parameter")));
623 generator->AsyncNext(v,
624 boost::bind<void>(&GeneratorServerBase::CallNext1<Return>, RR_BOOST_PLACEHOLDERS(_1),
625 RR_BOOST_PLACEHOLDERS(_2), index, skel, m, ep));
629 RR_OVIRTUAL ~GeneratorServer() RR_OVERRIDE {}
632 template <
typename Return>
633 class GeneratorServer<Return, void> :
public GeneratorServerBase
636 RR_SHARED_PTR<Generator<Return, void> > generator;
639 GeneratorServer(RR_SHARED_PTR<Generator<Return, void> > generator, boost::string_ref name, int32_t
id,
640 const RR_SHARED_PTR<ServiceSkel>& skel,
const RR_SHARED_PTR<ServerEndpoint>& ep)
641 : GeneratorServerBase(name, id, skel, ep)
644 throw InvalidOperationException(
"Generator must not be null");
645 this->generator = generator;
648 RR_OVIRTUAL
void CallNext(
const RR_INTRUSIVE_PTR<MessageEntry>& m) RR_OVERRIDE
650 RR_SHARED_PTR<ServiceSkel> skel1 = skel.lock();
653 throw InvalidOperationException(
"Skel has been released");
656 if (m->Error != MessageErrorType_None)
658 if (m->Error == MessageErrorType_StopIteration)
660 generator->AsyncClose(boost::bind<void>(&GeneratorServerBase::CallNext1<int32_t>, 0,
661 RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
665 generator->AsyncAbort(boost::bind<void>(&GeneratorServerBase::CallNext1<int32_t>, 0,
666 RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
671 generator->AsyncNext(boost::bind<void>(&GeneratorServerBase::CallNext1<Return>, RR_BOOST_PLACEHOLDERS(_1),
672 RR_BOOST_PLACEHOLDERS(_2), index, skel, m, ep));
675 RR_OVIRTUAL ~GeneratorServer() RR_OVERRIDE {}
678 template <
typename Param>
679 class GeneratorServer<void, Param> :
public GeneratorServerBase
682 RR_SHARED_PTR<Generator<void, Param> > generator;
685 GeneratorServer(RR_SHARED_PTR<Generator<void, Param> > generator, boost::string_ref name, int32_t
id,
686 const RR_SHARED_PTR<ServiceSkel>& skel,
const RR_SHARED_PTR<ServerEndpoint>& ep)
687 : GeneratorServerBase(name, id, skel, ep)
690 throw InvalidOperationException(
"Generator must not be null");
691 this->generator = generator;
694 RR_OVIRTUAL
void CallNext(
const RR_INTRUSIVE_PTR<MessageEntry>& m) RR_OVERRIDE
696 RR_SHARED_PTR<ServiceSkel> skel1 = skel.lock();
699 throw InvalidOperationException(
"Skel has been released");
702 if (m->Error != MessageErrorType_None)
704 if (m->Error == MessageErrorType_StopIteration)
706 generator->AsyncClose(boost::bind<void>(&GeneratorServerBase::CallNext1<int32_t>, 0,
707 RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
711 generator->AsyncAbort(boost::bind<void>(&GeneratorServerBase::CallNext1<int32_t>, 0,
712 RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
717 Param v = RRPrimUtil<Param>::PreUnpack(
718 skel1->RRGetNode()->template UnpackAnyType<
typename RRPrimUtil<Param>::BoxedType>(
719 m->FindElement(
"parameter")));
720 generator->AsyncNext(
721 v, boost::bind<void>(&GeneratorServerBase::CallNext2, RR_BOOST_PLACEHOLDERS(_1), index, skel, m, ep));
724 RR_OVIRTUAL ~GeneratorServer() RR_OVERRIDE {}
737 template <
typename Return,
typename Param>
742 RR_OVIRTUAL Return
Next(
const Param& v) RR_OVERRIDE = 0;
745 const Param& v, boost::function<
void(
const Return&,
const RR_SHARED_PTR<RobotRaconteurException>& err)> handler,
750 RR_WEAK_PTR<RobotRaconteurNode> node;
755 catch (std::exception& exp)
757 detail::InvokeHandlerWithException(node, handler, exp);
760 detail::InvokeHandler(node, handler, r);
763 RR_OVIRTUAL
void Abort() RR_OVERRIDE = 0;
769 RR_WEAK_PTR<RobotRaconteurNode> node;
774 catch (std::exception& exp)
776 detail::InvokeHandlerWithException(node, handler, exp);
779 detail::InvokeHandler(node, handler);
782 RR_OVIRTUAL
void Close() RR_OVERRIDE = 0;
788 RR_WEAK_PTR<RobotRaconteurNode> node;
793 catch (std::exception& exp)
795 detail::InvokeHandlerWithException(node, handler, exp);
798 detail::InvokeHandler(node, handler);
804 template <
typename Return>
809 RR_OVIRTUAL Return
Next() RR_OVERRIDE = 0;
817 RR_WEAK_PTR<RobotRaconteurNode> node;
822 catch (std::exception& exp)
824 detail::InvokeHandlerWithException(node, handler, exp);
827 detail::InvokeHandler(node, handler, r);
830 RR_OVIRTUAL
void Abort() RR_OVERRIDE = 0;
836 RR_WEAK_PTR<RobotRaconteurNode> node;
841 catch (std::exception& exp)
843 detail::InvokeHandlerWithException(node, handler, exp);
846 detail::InvokeHandler(node, handler);
849 RR_OVIRTUAL
void Close() RR_OVERRIDE = 0;
855 RR_WEAK_PTR<RobotRaconteurNode> node;
860 catch (std::exception& exp)
862 detail::InvokeHandlerWithException(node, handler, exp);
865 detail::InvokeHandler(node, handler);
871 template <
typename Param>
876 RR_OVIRTUAL
void Next(
const Param& v) RR_OVERRIDE = 0;
879 boost::function<
void(
const RR_SHARED_PTR<RobotRaconteurException>&)> handler,
883 RR_WEAK_PTR<RobotRaconteurNode> node;
888 catch (std::exception& exp)
890 detail::InvokeHandlerWithException(node, handler, exp);
893 detail::InvokeHandler(node, handler);
896 RR_OVIRTUAL
void Abort() RR_OVERRIDE = 0;
902 RR_WEAK_PTR<RobotRaconteurNode> node;
907 catch (std::exception& exp)
909 detail::InvokeHandlerWithException(node, handler, exp);
912 detail::InvokeHandler(node, handler);
915 RR_OVIRTUAL
void Close() RR_OVERRIDE = 0;
921 RR_WEAK_PTR<RobotRaconteurNode> node;
926 catch (std::exception& exp)
928 detail::InvokeHandlerWithException(node, handler, exp);
931 detail::InvokeHandler(node, handler);
947 template <
typename T>
952 typename T::iterator iter;
953 boost::mutex range_lock;
961 this->iter = this->range.begin();
965 RR_OVIRTUAL
typename T::value_type
Next() RR_OVERRIDE
967 boost::mutex::scoped_lock lock(range_lock);
974 if (iter == range.end())
982 RR_OVIRTUAL
void Abort() RR_OVERRIDE
984 boost::mutex::scoped_lock lock(range_lock);
989 RR_OVIRTUAL
void Close() RR_OVERRIDE
991 boost::mutex::scoped_lock lock(range_lock);
1004 template <
typename T>
1007 return RR_MAKE_SHARED<RangeGenerator<T> >(range);
1010 #ifndef ROBOTRACONTEUR_NO_CXX11_TEMPLATE_ALIASES
1011 template <
typename Return,
typename Param>
1012 using GeneratorPtr = RR_SHARED_PTR<Generator<Return, Param> >;
1013 template <
typename Return,
typename Param>
1014 using GeneratorConstPtr = RR_SHARED_PTR<const Generator<Return, Param> >;
1015 template <
typename T>
1016 using RangeGeneratorPtr = RR_SHARED_PTR<RangeGenerator<T> >;
1017 template <
typename T>
1018 using RangeGeneratorConstPtr = RR_SHARED_PTR<const RangeGenerator<T> >;
boost::shared_ptr< RangeGenerator< T > > CreateRangeGenerator(const T &range)
Create a RangeGenerator from a range.
Definition: Generator.h:1005
#define RR_TIMEOUT_INFINITE
Disable timeout for asynchronous operations.
Definition: RobotRaconteurConstants.h:566
virtual bool TryNext(Return &ret)
Try to advance the generator. Return false if no more values are available.
Definition: Generator.h:187
virtual void AsyncClose(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously closes the generator.
virtual std::vector< Return > NextAll()
Automatically call Next() repeatedly and return std::vector of results.
Definition: Generator.h:225
virtual void Close()=0
Close the generator.
virtual void AsyncNext(boost::function< void(const Return &, const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously advance the generator.
virtual void AsyncAbort(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously abort the generator.
virtual Return Next()=0
Advance the generator.
virtual void Abort()=0
Abort the generator.
virtual void AsyncClose(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously closes the generator.
virtual void AsyncNext(const Param &v, boost::function< void(const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously advance the generator.
virtual void Close()=0
Close the generator.
virtual void AsyncAbort(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously abort the generator.
virtual void Next(const Param &v)=0
Advance the generator.
virtual void Abort()=0
Abort the generator.
virtual bool TryNext(const Param &v)
Try to advance the generator. Return false if no more values are available.
Definition: Generator.h:272
Generator type for use with generator functions, with parameter and return.
Definition: Generator.h:69
virtual void Abort()=0
Abort the generator.
virtual void Close()=0
Close the generator.
virtual bool TryNext(const Param &v, Return &ret)
Try to advance the generator. Return false if no more values are available.
Definition: Generator.h:92
virtual void AsyncAbort(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously abort the generator.
virtual void AsyncNext(const Param &v, boost::function< void(const Return &, const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously advance the generator.
virtual void AsyncClose(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE)=0
Asynchronously closes the generator.
virtual Return Next(const Param &v)=0
Advance the generator.
Exception thrown when an operation is aborted.
Definition: Error.h:1194
Utility class to use a C++ range with Generator<Return,void>.
Definition: Generator.h:949
RR_OVIRTUAL void Close() RR_OVERRIDE
Close the generator.
Definition: Generator.h:989
RR_OVIRTUAL T::value_type Next() RR_OVERRIDE
Advance the generator.
Definition: Generator.h:965
RR_OVIRTUAL void Abort() RR_OVERRIDE
Abort the generator.
Definition: Generator.h:982
Base class for Robot Raconteur exceptions.
Definition: Error.h:50
Exception thrown when a generator has finished sending results.
Definition: Error.h:1219
Helper class for synchronous service generators.
Definition: Generator.h:739
RR_OVIRTUAL void AsyncClose(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &)> handler, int32_t timeout=RR_TIMEOUT_INFINITE) RR_OVERRIDE
Asynchronously closes the generator.
Definition: Generator.h:784
RR_OVIRTUAL void Close() RR_OVERRIDE=0
Close the generator.
RR_OVIRTUAL void AsyncNext(const Param &v, boost::function< void(const Return &, const boost::shared_ptr< RobotRaconteurException > &err)> handler, int32_t timeout=RR_TIMEOUT_INFINITE) RR_OVERRIDE
Asynchronously advance the generator.
Definition: Generator.h:744
RR_OVIRTUAL Return Next(const Param &v) RR_OVERRIDE=0
Advance the generator.
RR_OVIRTUAL void Abort() RR_OVERRIDE=0
Abort the generator.
RR_OVIRTUAL void AsyncAbort(boost::function< void(const boost::shared_ptr< RobotRaconteurException > &)> handler, int32_t timeout=RR_TIMEOUT_INFINITE) RR_OVERRIDE
Asynchronously abort the generator.
Definition: Generator.h:765