",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width
i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,m=-2*e.offset[1];0>c?(s=t.top+p+f+m+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+m)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+m-h,(i>0||u>a(i))&&(t.top+=p+f+m))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}}),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var n=!1;t(document).on("mouseup",function(){n=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!n){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,o="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),n=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,n=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("
").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t(""),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth
t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("
"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element
+},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,m=s.maxWidth&&p>s.maxWidth,g=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),m&&(p-=l),g&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable});/**
+ * Copyright (c) 2007 Ariel Flesler - aflesler ○ gmail • com | https://github.com/flesler
+ * Licensed under MIT
+ * @author Ariel Flesler
+ * @version 2.1.2
+ */
+;(function(f){"use strict";"function"===typeof define&&define.amd?define(["jquery"],f):"undefined"!==typeof module&&module.exports?module.exports=f(require("jquery")):f(jQuery)})(function($){"use strict";function n(a){return!a.nodeName||-1!==$.inArray(a.nodeName.toLowerCase(),["iframe","#document","html","body"])}function h(a){return $.isFunction(a)||$.isPlainObject(a)?a:{top:a,left:a}}var p=$.scrollTo=function(a,d,b){return $(window).scrollTo(a,d,b)};p.defaults={axis:"xy",duration:0,limit:!0};$.fn.scrollTo=function(a,d,b){"object"=== typeof d&&(b=d,d=0);"function"===typeof b&&(b={onAfter:b});"max"===a&&(a=9E9);b=$.extend({},p.defaults,b);d=d||b.duration;var u=b.queue&&1=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference ",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017
+ * http://www.smartmenus.org/
+ * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$(" ").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$(' ')[0],$(' ')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$});
\ No newline at end of file
diff --git a/docs/md_doc_client_rpc_cheat_sheet.html b/docs/md_doc_client_rpc_cheat_sheet.html
new file mode 100644
index 00000000..8df7bb33
--- /dev/null
+++ b/docs/md_doc_client_rpc_cheat_sheet.html
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+asio-grpc: Client rpc cheat sheet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The code below is based on example.proto .
+
A single-threaded gRPC client:
+
+
example::v1::Example::Stub stub(grpc::CreateChannel("localhost:50051" , grpc::InsecureChannelCredentials()));
+
asio::co_spawn(
+
grpc_context,
+
[&]() -> asio::awaitable<void>
+
{
+
+
co_return ;
+
},
+
asio::detached);
+
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
bool run()
Run ready completion handlers and grpc::CompletionQueue
Definition: grpc_context.ipp:79
+
+Unary rpc
+
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
RPC::Request request;
+
RPC::Response response;
+
const grpc::Status status =
+
co_await RPC::request(grpc_context, stub, client_context, request, response);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+
Primary ClientRPC template.
Definition: forward.hpp:56
+
+Client-streaming rpc
+
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Response response;
+
if (!co_await rpc.start(stub, response))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
RPC::Request request;
+
request.set_integer(1);
+
while (co_await rpc.write(request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
std::cout << "Response: " << response.integer();
+
}
+
+Server-streaming rpc
+
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Request request;
+
request.set_integer(42);
+
if (!co_await rpc.start(stub, request))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
RPC::Response response;
+
while (co_await rpc.read(response))
+
{
+
std::cout << "Response: " << response.integer() << '\n' ;
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
}
+
+Bidirectional-streaming rpc
+
asio::awaitable<void> client_rpc_bidirectional_streaming(
agrpc::GrpcContext & grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming>>;
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
if (!co_await rpc.start(stub))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
RPC::Request request;
+
request.set_integer(42);
+
+
bool write_ok{true };
+
RPC::Response response;
+
while (co_await rpc.read(response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await rpc.write(request);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
}
+
+
+
+
+
+
+
diff --git a/docs/md_doc_cmake_protobuf_generate.html b/docs/md_doc_cmake_protobuf_generate.html
new file mode 100644
index 00000000..eb655cdc
--- /dev/null
+++ b/docs/md_doc_cmake_protobuf_generate.html
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+asio-grpc: CMake protobuf generate
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
In the same directory that called find_package(asio-grpc)
the following CMake function will be made available. It can be used to generate Protobuf/gRPC source files from .proto
schemas.
+If you are using cmake-format then you can copy the asio_grpc_protobuf_generate
section from cmake-format.yaml to get proper formatting.
asio_grpc_protobuf_generate(PROTOS <proto_file1> [<proto_file2>...]
+
[OUT_DIR <output_directory>]
+
[OUT_VAR <output_variable>]
+
[TARGET <target>]
+
[USAGE_REQUIREMENT PRIVATE|PUBLIC|INTERFACE]
+
[IMPORT_DIRS <directories>...]
+
[EXTRA_ARGS <arguments>...]
+
[GENERATE_GRPC]
+
[GENERATE_DESCRIPTORS]
+
[GENERATE_MOCK_CODE])
+
PROTOS : Input
.proto
schema files.
+
+
OUT_DIR : Generated files output directory. Default:
CMAKE_CURRENT_BINARY_DIR
.
+
+
OUT_VAR : Variable to define with generated source files.
+
+
TARGET : Add generated source files to target.
+
+
USAGE_REQUIREMENT : How to add sources to
<target>
:
PRIVATE
,
PUBLIC
,
INTERFACE
. Default:
PRIVATE
.
+
+
IMPORT_DIRS : Import directories to be added to the protoc command line. If unspecified then the directory of each .proto file will be used.
+
+
EXTRA_ARGS : Additional protoc command line arguments.
+
+
GENERATE_GRPC : Generate gRPC files (.grpc.pb.h and .grpc.pb.cc).
+
+
GENERATE_DESCRIPTORS : Generate descriptor files named
<proto_file_base_name>.desc
.
+
+
GENERATE_MOCK_CODE : Generate gRPC client stub mock files named
_mock.grpc.pb.h
.
+
+Example
+
Given a CMake target called target-option
:
+
asio_grpc_protobuf_generate(
+
GENERATE_GRPC GENERATE_MOCK_CODE
+
TARGET target-option
+
OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}/target"
+
PROTOS "${CMAKE_CURRENT_SOURCE_DIR}/proto/target.proto" )
+
Compiling target-option
will cause the generation and compilation of:
+
+${CMAKE_CURRENT_BINARY_DIR}/target/target.pb.h
+${CMAKE_CURRENT_BINARY_DIR}/target/target.pb.cc
+${CMAKE_CURRENT_BINARY_DIR}/target/target.grpc.pb.h
+${CMAKE_CURRENT_BINARY_DIR}/target/target.grpc.pb.cc
+${CMAKE_CURRENT_BINARY_DIR}/target/target_mock.grpc.pb.h
+
+
whenever ${CMAKE_CURRENT_SOURCE_DIR}/proto/target.proto
has been modified.
+
+
+
+
+
+
+
diff --git a/docs/md_doc_completion_token.html b/docs/md_doc_completion_token.html
new file mode 100644
index 00000000..54b53b48
--- /dev/null
+++ b/docs/md_doc_completion_token.html
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+asio-grpc: Completion token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The last argument to all async functions in this library is a CompletionToken . It can be used to customize how to receive notification of the completion of the asynchronous operation. Some examples:
+
+Callback
+
alarm.wait(deadline, [&](bool ) {});
+
+Boost.Coroutine
+
asio::spawn(
+
io_context,
+
[&](const asio::yield_context& yield)
+
{
+
+
alarm.
wait (deadline, yield);
+
},
+
asio::detached);
+
I/O object for grpc::Alarm
Definition: alarm.hpp:46
+
auto wait(const Deadline &deadline, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) &
Wait until a specified deadline has been reached (lvalue overload)
Definition: alarm.hpp:82
+
+use_sender
+
agrpc::use_sender
causes free functions in this library to return a Sender . They can for example be combined with unifex::task
to asynchronously process RPCs using co_await
. Note when using libunifex or stdexec exclusively then agrpc::use_sender
is already the default completion token:
+
unifex::task<void> server_streaming_example(
agrpc::GrpcContext & grpc_context, example::v1::Example::Stub& stub)
+
{
+
+
grpc::ClientContext client_context;
+
RPC::Request request;
+
RPC rpc{grpc_context};
+
+
RPC::Response response;
+
+
+
}
+
Primary ClientRPC template.
Definition: forward.hpp:56
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
constexpr agrpc::UseSender use_sender
Instance and factory for sender completion tokens.
Definition: use_sender.hpp:57
+
+Custom allocator
+
Asio-grpc attempts to get the completion handler's associated allocator by calling asio::get_associated_allocator and uses to allocate intermediate storage, typically for the completion handler itself. Prior to invocation of the completion handler all storage is deallocated.
+
The associated allocator can be customized using asio::bind_allocator
(since Boost.Asio 1.79):
+
co_await alarm.wait(deadline, asio::bind_allocator(my_allocator, asio::use_awaitable));
+
+
+
+
+
+
+
diff --git a/docs/md_doc_server_rpc_cheat_sheet.html b/docs/md_doc_server_rpc_cheat_sheet.html
new file mode 100644
index 00000000..8a624fc9
--- /dev/null
+++ b/docs/md_doc_server_rpc_cheat_sheet.html
@@ -0,0 +1,225 @@
+
+
+
+
+
+
+
+
+asio-grpc: Server rpc cheat sheet
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The code below is based on example.proto .
+
A single-threaded gRPC server:
+
example::v1::Example::AsyncService service;
+
std::unique_ptr<grpc::Server> server;
+
grpc::ServerBuilder builder;
+
+
builder.AddListeningPort("0.0.0.0:50051" , grpc::InsecureServerCredentials());
+
builder.RegisterService(&service);
+
server = builder.BuildAndStart();
+
example::ServerShutdown shutdown{*server, grpc_context};
+
register_handlers(grpc_context, service);
+
grpc_context.run();
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
+Unary rpc
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
Primary ServerRPC template.
Definition: forward.hpp:75
+
+Client-streaming rpc
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
while (co_await rpc.read(request))
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
RPC::Response response;
+
response.set_integer(42);
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
+Server-streaming rpc
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+Bidirectional-streaming rpc
+
+
example::v1::Example::AsyncService& service)
+
{
+
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming>>;
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
RPC::Response response;
+
while (co_await rpc.read(request))
+
{
+
response.set_integer(request.integer());
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
response.set_integer(42);
+
co_await rpc.write(response, grpc::WriteOptions{}.set_last_message());
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+
+
+
+
+
+
diff --git a/docs/md_doc_using_asio_io_context.html b/docs/md_doc_using_asio_io_context.html
new file mode 100644
index 00000000..7efe014c
--- /dev/null
+++ b/docs/md_doc_using_asio_io_context.html
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+asio-grpc: Using Asio io_context
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Note Due to limitations of the gRPC CompletionQueue and Callback API an asio::io_context cannot be used to handle RPCs directly. See the end of this document for a detailed explanation.
+
This article describes how to interoperate between a GrpcContext and an asio::io_context .
+
+Implicitly constructed io_context
+
Since a GrpcContext is also an asio::execution_context it supports Asio's Service mechanism. The following code will therefore implicitly create an io_context, a background thread, run the io_context on that thread and post the completion of async_wait
onto the GrpcContext where the lambda is being invoked.
+
+
asio::signal_set signals{grpc_context, SIGINT, SIGTERM};
+
signals.async_wait(
+
[](const std::error_code&, int )
+
{
+
+
});
+
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
bool run()
Run ready completion handlers and grpc::CompletionQueue
Definition: grpc_context.ipp:79
+
Signal_set is just used as an example, it could be any Asio I/O object like ip::tcp::socket
.
+
While this is the most convenient approach is also has some downsides:
+
+The io_context cannot be run on more than one thread.
+There is runtime overhead due to non-customizable thread switching.
+
+
+Explicitly constructed io_context
+
GrpcContext and io_context can also be created directly and used as usual: submit work and run. It is often convenient to utilize one of them as the "main" context. For an example, a gRPC server might use the io_context only for HTTP client operations and the GrpcContext for everything else.
+
In the following example the io_context is used as the "main" context. When its main coroutine runs to completion, it will signal the GrpcContext to stop (by releasing the work guard):
+
asio::io_context io_context{1};
+
+
+
grpc_context;
+
+
asio::co_spawn(
+
io_context,
+
+
+
[&, grpc_context_work_guard = asio::make_work_guard(grpc_context)]() mutable -> asio::awaitable<void>
+
{
+
using namespace asio::experimental::awaitable_operators;
+
co_await (make_grpc_request(grpc_context, stub) && make_tcp_request(tcp_port));
+
grpc_context_work_guard.reset();
+
},
+
example::RethrowFirstArg{});
+
For running the contexts there are two choices:
+
Run on separate threads
+
std::thread grpc_context_thread{[&]
+
{
+
+
}};
+
io_context.run();
+
grpc_context_thread.join();
+
Run on same thread
+
Until the GrpcContext stops:
+
+
+
asio::post(io_context,
+
[&]
+
{
+
+
[&]
+
{
+
+
});
+
});
+
io_context.run();
+
bool is_stopped() const noexcept
Is the GrpcContext in the stopped state?
Definition: grpc_context.ipp:156
+
void run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)
(experimental) Run an execution context in the same thread as a GrpcContext
Definition: run.hpp:287
+
Or until both contexts stop:
+
+
+
+
+
+
asio::post(io_context,
+
[&]
+
{
+
io_context.get_executor().on_work_finished();
+
+
io_context.get_executor().on_work_started();
+
});
+
io_context.run();
+
+Conclusion
+
Both approaches come with their own different kind of overheads. Running on two threads might require additional synchronization in the user code while running on the same thread reduces peak performance. In the Performance section of the README you can find results for using an idle io_context with a busy GrpcContext running on the same thread (look for cpp_asio_grpc_io_context_coro
).
+
+Why can an io_context not be used for gRPC directly?
+
Event loops like the ones used in Asio and gRPC typically utilize system APIs (epoll, IOCompletionPorts, kqueue, ...) in the following order:
+
+Create file descriptors for network operations (e.g. sockets and pipes).
+Initiate some operations on those descriptors (e.g. read and write).
+Perform a system call (e.g. poll
) to sleep on ALL descriptors until one or more are ready (e.g. received data).
+Notify some part of the application, typically by invoking a function pointer.
+
+
The important part is to wait on ALL descriptors at once. Which means, for Asio and gRPC to interoperate nicely we would need to collect the descriptors first and then perform the system call to wait. However, file descriptors are created deep in the implementation details of those libraries and the sleep is performed even deeper. GRPC is working on an EventEngine which should make it possible to use Asio sockets for gRPC. Whether it will be enough to fully use Asio for all gRPC network operations remains to be seen.
+
+
+
+
+
+
+
diff --git a/docs/md_doc_v3_migration.html b/docs/md_doc_v3_migration.html
new file mode 100644
index 00000000..7fb66d3a
--- /dev/null
+++ b/docs/md_doc_v3_migration.html
@@ -0,0 +1,652 @@
+
+
+
+
+
+
+
+
+asio-grpc: V3 migration guide
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
The following headers have been removed:
+
bind_allocator.hpp
, cancel_safe.hpp
, default_completion_token.hpp
, get_completion_queue.hpp
, grpc_initiate.hpp
, grpc_stream.hpp
, notify_when_done.hpp
, repeatedly_request_context.hpp
, repeatedly_request.hpp
, rpc.hpp
, use_awaitable.hpp
, wait.hpp
+
+CMake
+
asio-grpc
targets now link with gRPC::grpc++
instead of gRPC::grpc++_unsecure
. To restore the old behavior use:
+
set(ASIO_GRPC_DISABLE_AUTOLINK on)
+
find_package(asio-grpc)
+
find_package(gRPC)
+
+
target_link_libraries(your_app PUBLIC asio-grpc::asio-grpc gRPC::grpc++_unsecure)
+
asio-grpcConfig.cmake
no longer finds and links backend libraries (like Boost.Asio and unifex) to their respective asio-grpc::asio-grpc
targets. Example on how to restore the old behavior for the Boost.Asio backend:
+
find_package(asio-grpc)
+
# New in v3:
+
find_package(Boost)
+
+
target_link_libraries(your_app PUBLIC
+
asio-grpc::asio-grpc
+
# New in v3:
+
Boost::headers
+
)
+
+Alarms
+
The free function agrpc::wait
has been replaced with a new I/O-object like class called agrpc::Alarm
:
+
+
+V2 V3
+
+asio::awaitable<void> agrpc_wait()
+
{
+
grpc::Alarm alarm;
+
+
bool wait_ok = co_await agrpc::wait(
+
alarm, std::chrono::system_clock::now() + std::chrono::seconds(1));
+
(void)wait_ok;
+
}
+
+
{
+
+
bool wait_ok = co_await alarm.wait(
+
std::chrono::system_clock::now() + std::chrono::seconds(1), asio::use_awaitable);
+
(void)wait_ok;
+
}
+
I/O object for grpc::Alarm
Definition: alarm.hpp:46
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
+
+
+Client RPCs
+
Migration of client rpc types based on example.proto :
+
+Unary
+
+
+V2 V3
+
+
+
example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
example::v1::Request request;
+
std::unique_ptr<grpc::ClientAsyncResponseReader<example::v1::Response>> reader =
+
agrpc::request(&example::v1::Example::Stub::AsyncUnary, stub, client_context,
+
request, grpc_context);
+
example::v1::Response response;
+
grpc::Status status;
+
co_await agrpc::finish(reader, response, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
RPC::Request request;
+
RPC::Response response;
+
const grpc::Status status =
+
co_await RPC::request(grpc_context, stub, client_context, request, response);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
std::cout << "Response: " << response.integer();
+
}
+
Primary ClientRPC template.
Definition: forward.hpp:56
+
+
+
+Client-streaming
+
+
+V2 V3
+
+asio::awaitable<void> client_streaming_rpc(example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
example::v1::Response response;
+
+
std::unique_ptr<grpc::ClientAsyncWriter<example::v1::Request>> writer;
+
if (!co_await agrpc::request(&example::v1::Example::Stub::PrepareAsyncClientStreaming,
+
stub, client_context, writer, response))
+
{
+
grpc::Status status;
+
co_await agrpc::finish(writer, status);
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
example::v1::Request request;
+
request.set_integer(1);
+
while (co_await agrpc::write(writer, request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
co_await agrpc::writes_done(writer);
+
+
grpc::Status status;
+
co_await agrpc::finish(writer, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
std::cout << "Response: " << response.integer();
+
}
+
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Response response;
+
if (!co_await rpc.start(stub, response))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
RPC::Request request;
+
request.set_integer(1);
+
while (co_await rpc.write(request) && request.integer() < 42)
+
{
+
request.set_integer(request.integer() + 1);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
std::cout << "Response: " << response.integer();
+
}
+
+
+
+Server-streaming
+
+
+V2 V3
+
+asio::awaitable<void> server_streaming_rpc(example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
example::v1::Request request;
+
request.set_integer(42);
+
std::unique_ptr<grpc::ClientAsyncReader<example::v1::Response>> reader;
+
if (!co_await agrpc::request(&example::v1::Example::Stub::PrepareAsyncServerStreaming,
+
stub, client_context, request, reader))
+
{
+
grpc::Status status;
+
co_await agrpc::finish(reader, status);
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
example::v1::Response response;
+
+
{
+
std::cout << "Response: " << response.integer() << '\n' ;
+
}
+
+
grpc::Status status;
+
co_await agrpc::finish(reader, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
}
+
constexpr detail::ReadFn read
Read from a streaming RPC.
Definition: read.hpp:73
+
+
example::v1::Example::Stub& stub)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
RPC::Request request;
+
request.set_integer(42);
+
if (!co_await rpc.start(stub, request))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
RPC::Response response;
+
while (co_await rpc.read(response))
+
{
+
std::cout << "Response: " << response.integer() << '\n' ;
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
}
+
+
+
+Bidirectional-streaming
+
+
+V2 V3
+
+asio::awaitable<void> bidirectional_streaming_rpc(example::v1::Example::Stub& stub)
+
{
+
grpc::ClientContext client_context;
+
client_context.set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
std::unique_ptr<
+
grpc::ClientAsyncReaderWriter<example::v1::Request, example::v1::Response>>
+
reader_writer;
+
if (!co_await agrpc::request(
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming, stub,
+
client_context, reader_writer))
+
{
+
grpc::Status status;
+
co_await agrpc::finish(reader_writer, status);
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
example::v1::Request request;
+
+
bool write_ok{true };
+
example::v1::Response response;
+
while (
co_await agrpc::read (reader_writer, response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await agrpc::write(reader_writer, request);
+
}
+
co_await agrpc::writes_done(reader_writer);
+
+
grpc::Status status;
+
co_await agrpc::finish(reader_writer, status);
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
}
+
asio::awaitable<void> client_rpc_bidirectional_streaming(
agrpc::GrpcContext & grpc_context,
+
example::v1::Example::Stub& stub)
+
{
+
+
&example::v1::Example::Stub::PrepareAsyncBidirectionalStreaming>>;
+
+
RPC rpc{grpc_context};
+
rpc.context().set_deadline(std::chrono::system_clock::now() +
+
std::chrono::seconds(5));
+
+
if (!co_await rpc.start(stub))
+
{
+
const grpc::Status status = co_await rpc.finish();
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
+
RPC::Request request;
+
request.set_integer(42);
+
+
bool write_ok{true };
+
RPC::Response response;
+
while (co_await rpc.read(response) && write_ok)
+
{
+
request.set_integer(response.integer() + 1);
+
write_ok = co_await rpc.write(request);
+
}
+
+
const grpc::Status status = co_await rpc.finish();
+
if (!status.ok())
+
{
+
std::cerr << "Rpc failed: " << status.error_message();
+
co_return ;
+
}
+
}
+
+
+
+Server RPCs
+
Migration of server rpc types based on example.proto :
+
+Unary
+
+
+V2 V3
+
+
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestUnary, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& , example::v1::Request& ,
+
grpc::ServerAsyncResponseWriter<example::v1::Response>& writer)
+
-> asio::awaitable<void>
+
{
+
example::v1::Response response;
+
co_await agrpc::finish(writer, response, grpc::Status::OK);
+
+
+
co_await agrpc::finish_with_error(writer, grpc::Status::CANCELLED);
+
}));
+
}
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
Primary ServerRPC template.
Definition: forward.hpp:75
+
+
+
+Client-streaming
+
+
+V2 V3
+
+
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestClientStreaming, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& ,
+
grpc::ServerAsyncReader<example::v1::Response, example::v1::Request>&
+
reader) -> asio::awaitable<void>
+
{
+
example::v1::Request request;
+
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
example::v1::Response response;
+
response.set_integer(42);
+
co_await agrpc::finish(reader, response, grpc::Status::OK);
+
+
+
co_await agrpc::finish_with_error(reader, grpc::Status::CANCELLED);
+
}));
+
}
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
while (co_await rpc.read(request))
+
{
+
std::cout << "Request: " << request.integer() << std::endl;
+
}
+
RPC::Response response;
+
response.set_integer(42);
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
+
+
+Server-streaming
+
+
+V2 V3
+
+
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestServerStreaming, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& , example::v1::Request& request,
+
grpc::ServerAsyncWriter<example::v1::Response>& writer)
+
-> asio::awaitable<void>
+
{
+
example::v1::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await agrpc::write(writer, response))
+
{
+
co_return ;
+
}
+
}
+
co_await agrpc::finish(writer, grpc::Status::OK);
+
}));
+
}
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
for (int i{}; i != request.integer(); ++i)
+
{
+
response.set_integer(i);
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+
+
+Bidirectional-streaming
+
+
+V2 V3
+
+
+
example::v1::Example::AsyncService& service)
+
{
+
agrpc::repeatedly_request(
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming, service,
+
asio::bind_executor(
+
grpc_context,
+
[](grpc::ServerContext& ,
+
grpc::ServerAsyncReaderWriter<example::v1::Response, example::v1::Request>&
+
reader_writer) -> asio::awaitable<void>
+
{
+
example::v1::Request request;
+
example::v1::Response response;
+
+
{
+
response.set_integer(request.integer());
+
if (!co_await agrpc::write(reader_writer, response))
+
{
+
co_return ;
+
}
+
}
+
response.set_integer(42);
+
co_await agrpc::write_last(reader_writer, response, grpc::WriteOptions{});
+
co_await agrpc::finish(reader_writer, grpc::Status::OK);
+
}));
+
}
+
+
example::v1::Example::AsyncService& service)
+
{
+
+
&example::v1::Example::AsyncService::RequestBidirectionalStreaming>>;
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc) -> asio::awaitable<void>
+
{
+
RPC::Request request;
+
RPC::Response response;
+
while (co_await rpc.read(request))
+
{
+
response.set_integer(request.integer());
+
if (!co_await rpc.write(response))
+
{
+
co_return;
+
}
+
}
+
response.set_integer(42);
+
co_await rpc.write(response, grpc::WriteOptions{}.set_last_message());
+
co_await rpc.finish(grpc::Status::OK);
+
},
+
asio::detached);
+
}
+
+
+
+
+
+
+
+
+
diff --git a/docs/menu.js b/docs/menu.js
new file mode 100644
index 00000000..818b859b
--- /dev/null
+++ b/docs/menu.js
@@ -0,0 +1,135 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function initMenu(relPath,searchEnabled,serverSide,searchPage,search) {
+ function makeTree(data,relPath) {
+ var result='';
+ if ('children' in data) {
+ result+='';
+ for (var i in data.children) {
+ var url;
+ var link;
+ link = data.children[i].url;
+ if (link.substring(0,1)=='^') {
+ url = link.substring(1);
+ } else {
+ url = relPath+link;
+ }
+ result+=''+
+ data.children[i].text+' '+
+ makeTree(data.children[i],relPath)+' ';
+ }
+ result+=' ';
+ }
+ return result;
+ }
+ var searchBox;
+ if (searchEnabled) {
+ if (serverSide) {
+ searchBox='';
+ } else {
+ searchBox=''+
+ '
'+
+ ' '+
+ ' '+
+ ' '+
+ '
'+
+ ' '
+ ''
+ '
';
+ }
+ }
+
+ $('#main-nav').before(' '+
+ ''+
+ ' '+
+ 'Toggle main menu visibility '+
+ ' '+
+ '
');
+ $('#main-nav').append(makeTree(menudata,relPath));
+ $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu');
+ if (searchBox) {
+ $('#main-menu').append(' ');
+ }
+ var $mainMenuState = $('#main-menu-state');
+ var prevWidth = 0;
+ if ($mainMenuState.length) {
+ function initResizableIfExists() {
+ if (typeof initResizable==='function') initResizable();
+ }
+ // animate mobile menu
+ $mainMenuState.change(function(e) {
+ var $menu = $('#main-menu');
+ var options = { duration: 250, step: initResizableIfExists };
+ if (this.checked) {
+ options['complete'] = function() { $menu.css('display', 'block') };
+ $menu.hide().slideDown(options);
+ } else {
+ options['complete'] = function() { $menu.css('display', 'none') };
+ $menu.show().slideUp(options);
+ }
+ });
+ // set default menu visibility
+ function resetState() {
+ var $menu = $('#main-menu');
+ var $mainMenuState = $('#main-menu-state');
+ var newWidth = $(window).outerWidth();
+ if (newWidth!=prevWidth) {
+ if ($(window).outerWidth()<768) {
+ $mainMenuState.prop('checked',false); $menu.hide();
+ $('#searchBoxPos1').html(searchBox);
+ $('#searchBoxPos2').hide();
+ } else {
+ $menu.show();
+ $('#searchBoxPos1').empty();
+ $('#searchBoxPos2').html(searchBox);
+ $('#searchBoxPos2').show();
+ }
+ prevWidth = newWidth;
+ }
+ }
+ $(window).ready(function() { resetState(); initResizableIfExists(); });
+ $(window).resize(resetState);
+ }
+ $('#main-menu').smartmenus();
+}
+/* @license-end */
diff --git a/docs/menudata.js b/docs/menudata.js
new file mode 100644
index 00000000..27e1a833
--- /dev/null
+++ b/docs/menudata.js
@@ -0,0 +1,85 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+*/
+var menudata={children:[
+{text:"Main Page",url:"index.html"},
+{text:"Related Pages",url:"pages.html"},
+{text:"Namespaces",url:"namespaces.html",children:[
+{text:"Namespace List",url:"namespaces.html"},
+{text:"Namespace Members",url:"namespacemembers.html",children:[
+{text:"All",url:"namespacemembers.html"},
+{text:"Functions",url:"namespacemembers_func.html"},
+{text:"Variables",url:"namespacemembers_vars.html"},
+{text:"Typedefs",url:"namespacemembers_type.html"},
+{text:"Enumerations",url:"namespacemembers_enum.html"}]}]},
+{text:"Classes",url:"annotated.html",children:[
+{text:"Class List",url:"annotated.html"},
+{text:"Class Index",url:"classes.html"},
+{text:"Class Hierarchy",url:"inherits.html"},
+{text:"Class Members",url:"functions.html",children:[
+{text:"All",url:"functions.html",children:[
+{text:"a",url:"functions.html#index_a"},
+{text:"b",url:"functions_b.html#index_b"},
+{text:"c",url:"functions_c.html#index_c"},
+{text:"d",url:"functions_d.html#index_d"},
+{text:"e",url:"functions_e.html#index_e"},
+{text:"f",url:"functions_f.html#index_f"},
+{text:"g",url:"functions_g.html#index_g"},
+{text:"i",url:"functions_i.html#index_i"},
+{text:"m",url:"functions_m.html#index_m"},
+{text:"o",url:"functions_o.html#index_o"},
+{text:"p",url:"functions_p.html#index_p"},
+{text:"q",url:"functions_q.html#index_q"},
+{text:"r",url:"functions_r.html#index_r"},
+{text:"s",url:"functions_s.html#index_s"},
+{text:"t",url:"functions_t.html#index_t"},
+{text:"w",url:"functions_w.html#index_w"},
+{text:"~",url:"functions_~.html#index__7E"}]},
+{text:"Functions",url:"functions_func.html",children:[
+{text:"a",url:"functions_func.html#index_a"},
+{text:"b",url:"functions_func.html#index_b"},
+{text:"c",url:"functions_func.html#index_c"},
+{text:"d",url:"functions_func.html#index_d"},
+{text:"e",url:"functions_func.html#index_e"},
+{text:"f",url:"functions_func.html#index_f"},
+{text:"g",url:"functions_func.html#index_g"},
+{text:"i",url:"functions_func.html#index_i"},
+{text:"m",url:"functions_func.html#index_m"},
+{text:"o",url:"functions_func.html#index_o"},
+{text:"p",url:"functions_func.html#index_p"},
+{text:"q",url:"functions_func.html#index_q"},
+{text:"r",url:"functions_func.html#index_r"},
+{text:"s",url:"functions_func.html#index_s"},
+{text:"w",url:"functions_func.html#index_w"},
+{text:"~",url:"functions_func.html#index__7E"}]},
+{text:"Variables",url:"functions_vars.html"},
+{text:"Typedefs",url:"functions_type.html",children:[
+{text:"a",url:"functions_type.html#index_a"},
+{text:"e",url:"functions_type.html#index_e"},
+{text:"o",url:"functions_type.html#index_o"},
+{text:"p",url:"functions_type.html#index_p"},
+{text:"r",url:"functions_type.html#index_r"},
+{text:"s",url:"functions_type.html#index_s"},
+{text:"t",url:"functions_type.html#index_t"}]},
+{text:"Related Functions",url:"functions_rela.html"}]}]}]}
diff --git a/docs/namespaceagrpc.html b/docs/namespaceagrpc.html
new file mode 100644
index 00000000..34f4b6d7
--- /dev/null
+++ b/docs/namespaceagrpc.html
@@ -0,0 +1,1233 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc Namespace Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Public namespace.
+More...
+
+
+class BasicAlarm
+ I/O object for grpc::Alarm
More...
+
+class BasicGrpcExecutor
+ GrpcContext 's executor. More...
+
+class ClientRPC
+ Primary ClientRPC template. More...
+
+class ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >
+ I/O object for client-side, generic, streaming rpcs. More...
+
+class ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >
+ I/O object for client-side, generic, unary rpcs. More...
+
+class ClientRPC< PrepareAsyncBidiStreaming, Executor >
+ I/O object for client-side, bidirectional-streaming rpcs. More...
+
+class ClientRPC< PrepareAsyncClientStreaming, Executor >
+ I/O object for client-side, client-streaming rpcs. More...
+
+class ClientRPC< PrepareAsyncServerStreaming, Executor >
+ I/O object for client-side, server-streaming rpcs. More...
+
+class ClientRPC< PrepareAsyncUnary, Executor >
+ I/O object for client-side, unary rpcs. More...
+
+struct DefaultRunTraits
+ (experimental) Default run traits More...
+
+class GrpcContext
+ Execution context based on grpc::CompletionQueue
More...
+
+class HealthCheckService
+ CompletionQueue-based implementation of grpc::HealthCheckServiceInterface. More...
+
+class ServerRPC
+ Primary ServerRPC template. More...
+
+class ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >
+ I/O object for server-side, generic rpcs. More...
+
+class ServerRPC< RequestBidiStreaming, TraitsT, Executor >
+ I/O object for server-side, bidirectional-streaming rpcs. More...
+
+class ServerRPC< RequestClientStreaming, TraitsT, Executor >
+ I/O object for server-side, client-streaming rpcs. More...
+
+class ServerRPC< RequestServerStreaming, TraitsT, Executor >
+ I/O object for server-side, server-streaming rpcs. More...
+
+class ServerRPC< RequestUnary, TraitsT, Executor >
+ I/O object for server-side, unary rpcs. More...
+
+class ServerRPCPtr
+ Allocated ServerRPC created by register_callback_rpc_handler. More...
+
+struct UseSender
+ Sender completion token. More...
+
+class Waiter
+ (experimental) Utility class for uncancelable operations More...
+
+
+
+template<class ServerRPC , class RPCHandler , class CompletionToken >
+auto register_awaitable_rpc_handler (const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)
+ Register an awaitable rpc handler for the given method. More...
+
+template<class ServerRPC , class RPCHandler , class CompletionToken >
+auto register_awaitable_rpc_handler (agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
+ Register an awaitable rpc handler for the given method (GrpcContext overload) More...
+
+template<class ServerRPC , class RPCHandler , class CompletionToken >
+auto register_callback_rpc_handler (const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)
+ Register a callback rpc handler for the given method. More...
+
+template<class ServerRPC , class RPCHandler , class CompletionToken >
+auto register_callback_rpc_handler (agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
+ Register a callback rpc handler for the given method (GrpcContext overload) More...
+
+template<class ServerRPC , class RPCHandler >
+detail::RPCHandlerSender< ServerRPC , RPCHandler > register_sender_rpc_handler (agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler)
+ Register an sender rpc handler for the given method. More...
+
+template<class ServerRPC , class RPCHandler , class CompletionToken >
+auto register_yield_rpc_handler (const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)
+ Register a Boost.Coroutine rpc handler for the given method. More...
+
+template<class ServerRPC , class RPCHandler , class CompletionToken >
+auto register_yield_rpc_handler (agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)
+ Register a rpc handler for the given method (GrpcContext overload) More...
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
+void run (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)
+ (experimental) Run an execution context in the same thread as a GrpcContext More...
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
+void run (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)
+ (experimental) Run an execution context in the same thread as a GrpcContext More...
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
+void run_completion_queue (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)
+ (experimental) Run an execution context in the same thread as a GrpcContext 's completion queue More...
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
+void run_completion_queue (agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)
+ (experimental) Run an execution context in the same thread as a GrpcContext 's completion queue More...
+
+void process_grpc_tag (agrpc::GrpcContext &grpc_context, void *tag, bool ok)
+ Test utility to manually process gRPC tags. More...
+
+
+
+
+
+
◆ Alarm
+
+
+
+
◆ GenericUnaryClientRPC
+
+
+
+
◆ GenericStreamingClientRPC
+
+
+
+
◆ GrpcExecutor
+
+
+
+
+
Default GrpcExecutor.
+
The default GrpcExecutor does not track outstanding work, has the relationship.fork and blocking.never properties and uses the default allocator (std::allocator<void>
).
+
+
+
+
+
◆ GenericServerRPC
+
+
+
+
+
◆ ClientRPCType
+
+
+
+
+
The type of a ClientRPC .
+
Since 2.1.0
+
+Enumerator UNARY Client-side unary rpc.
+
+ GENERIC_UNARY Client-side generic unary rpc.
+
+ SERVER_STREAMING Client-side server-streaming rpc.
+
+ CLIENT_STREAMING Client-side client-streaming rpc.
+
+ BIDIRECTIONAL_STREAMING Client-side bidirectional-streaming rpc.
+
+ GENERIC_STREAMING Client-side generic streaming rpc.
+
+
+
+
+
+
+
◆ ServerRPCType
+
+
+
+
+
The type of a ServerRPC .
+
Since 2.7.0
+
+Enumerator UNARY Server-side unary rpc.
+
+ SERVER_STREAMING Server-side server-streaming rpc.
+
+ CLIENT_STREAMING Server-side client-streaming rpc.
+
+ BIDIRECTIONAL_STREAMING Server-side bidirectional-streaming rpc.
+
+ GENERIC Server-side generic streaming rpc.
+
+
+
+
+
+
+
+
◆ register_awaitable_rpc_handler() [1/2]
+
+
+
+
+template<class
ServerRPC , class RPCHandler , class CompletionToken >
+
+
+ auto agrpc::register_awaitable_rpc_handler
+ (
+ const typename ServerRPC::executor_type &
+ executor ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler
+ rpc_handler ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+
+
+
+
+
+
Register an awaitable rpc handler for the given method.
+
The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC &
as first argument and ServerRPC::Request&
as second argument (only for unary and server-streaming rpcs). The ServerRPC is automatically cancelled at the end of the rpc handler if finish()
was not called earlier. The return value of the rpc handler is co_spawn
ed in a manner similar to: asio::co_spawn(asio::get_associated_executor(completion_handler, executor), rpc_handler())
, where completion_handler
is created from token
and executor
the first argument passed to this function.
+
This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the completion handler (passing forward the exception thrown by the request handler, if any) after all awaitables produced by invoking the rpc handler complete.
+
Example:
+
+
example::v1::Example::AsyncService& service)
+
{
+
using RPC = asio::use_awaitable_t<>::as_default_on_t<
+
+
agrpc::register_awaitable_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request) -> asio::awaitable<void>
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
co_await rpc.finish(response, grpc::Status::OK);
+
+
+
co_await rpc.finish_with_error(grpc::Status::CANCELLED);
+
},
+
asio::detached);
+
}
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
Primary ServerRPC template.
Definition: forward.hpp:75
+
Template Parameters
+
+
+
+
Parameters
+
+ executor The executor used to handle each rpc
+ service The service associated with the gRPC method of the ServerRPC
+ rpc_handler A callable that produces an asio::awaitable<void, Executor>
. The awaitable's return value is ignored. The Executor must be constructible from asio::get_associated_executor(completion_handler,
+executor)
, where completion_handler
is obtained from token
and executor
the first argument passed to this function.
+ token A completion token for signature void(std::exception_ptr)
.
+
+
+
+
Since 2.7.0
+
+
+
+
+
◆ register_awaitable_rpc_handler() [2/2]
+
+
+
+
+template<class
ServerRPC , class RPCHandler , class CompletionToken >
+
+
+ auto agrpc::register_awaitable_rpc_handler
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler &&
+ rpc_handler ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+
+
+
+
+
+
Register an awaitable rpc handler for the given method (GrpcContext overload)
+
Since 2.7.0
+
+
+
+
+
◆ register_callback_rpc_handler() [1/2]
+
+
+
+
+template<class
ServerRPC , class RPCHandler , class CompletionToken >
+
+
+ auto agrpc::register_callback_rpc_handler
+ (
+ const typename ServerRPC::executor_type &
+ executor ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler
+ rpc_handler ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+
+
+
+
+
+
Register a callback rpc handler for the given method.
+
The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC::Ptr
as first and ServerRPC::Request&
as second (only for unary and server-streaming rpcs) argument. The ServerRPC is automatically cancelled during destruction of the ServerRPC::Ptr
if finish()
was not called earlier.
+
This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the completion handler (passing forward the exception thrown by the request handler, if any) after all ServerRPC::Ptr
s have been destructed.
+
Example:
+
void server_rpc_unary_callback(
agrpc::GrpcContext & grpc_context, example::v1::Example::AsyncService& service)
+
{
+
+
agrpc::register_callback_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC::Ptr ptr, RPC::Request& request)
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
auto & rpc = *ptr;
+
rpc.finish(response, grpc::Status::OK, [p = std::move(ptr)](bool ) {});
+
},
+
asio::detached);
+
}
+
Template Parameters
+
+
+
+
Parameters
+
+ executor The executor used to handle each rpc
+ service The service associated with the gRPC method of the ServerRPC
+ rpc_handler A callable that handles the client's request
+ token A completion token for signature void(std::exception_ptr)
.
+
+
+
+
Since 2.8.0
+
+
+
+
+
◆ register_callback_rpc_handler() [2/2]
+
+
+
+
+template<class
ServerRPC , class RPCHandler , class CompletionToken >
+
+
+ auto agrpc::register_callback_rpc_handler
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler &&
+ rpc_handler ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+
+
+
+
+
+
Register a callback rpc handler for the given method (GrpcContext overload)
+
Since 2.8.0
+
+
+
+
+
◆ register_sender_rpc_handler()
+
+
+
+
+template<class
ServerRPC , class RPCHandler >
+
+
+ detail::RPCHandlerSender< ServerRPC , RPCHandler > agrpc::register_sender_rpc_handler
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler
+ rpc_handler
+
+
+
+ )
+
+
+
+
+
+
Register an sender rpc handler for the given method.
+
The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC &
as first argument and ServerRPC::Request&
as second argument (only for unary and server-streaming rpcs). The ServerRPC is automatically cancelled at the end of the rpc handler's sender if finish()
was not called earlier.
+
This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the receiver (passing forward the exception thrown by the request handler, if any) after all sender produced by invoking the rpc handler complete.
+
Example:
+
auto server_rpc_unary_sender(
agrpc::GrpcContext & grpc_context, example::v1::Example::AsyncService& service)
+
{
+
+
return agrpc::register_sender_rpc_handler<RPC>(grpc_context, service,
+
[](RPC& rpc, RPC::Request& request)
+
{
+
return unifex::let_value_with(
+
[]
+
{
+
return RPC::Response{};
+
},
+
[&](auto & response)
+
{
+
response.set_integer(request.integer());
+
return rpc.finish(response, grpc::Status::OK);
+
});
+
});
+
}
+
Template Parameters
+
+
+
+
Parameters
+
+ grpc_context The GrpcContext used to handle each rpc
+ service The service associated with the gRPC method of the ServerRPC
+ rpc_handler A callable that produces a sender
+
+
+
+
Since 2.7.0
+
+
+
+
+
◆ register_yield_rpc_handler() [1/2]
+
+
+
+
+template<class
ServerRPC , class RPCHandler , class CompletionToken >
+
+
+ auto agrpc::register_yield_rpc_handler
+ (
+ const typename ServerRPC::executor_type &
+ executor ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler
+ rpc_handler ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+
+
+
+
+
+
Register a Boost.Coroutine rpc handler for the given method.
+
The rpc handler will be invoked for every incoming request of this gRPC method. It must take ServerRPC &
as first, ServerRPC::Request&
as second (only for unary and server-streaming rpcs) and asio::basic_yield_context<Executor>
as third argument. The Executor is obtained by calling asio::get_associated_executor(completion_handler, executor)
, where completion_handler
is created from token
and executor
the first argument passed to this function. The ServerRPC is automatically cancelled at the end of the rpc handler if finish()
was not called earlier.
+
This asynchronous operation runs forever unless it is cancelled, the rpc handler throws an exception or the server is shutdown (grpc::Server::Shutdown is called). At which point it invokes the completion handler (passing forward the exception thrown by the request handler, if any) after all invocations of the rpc handler return.
+
Example:
+
void server_rpc_unary_yield(
agrpc::GrpcContext & grpc_context, example::v1::Example::AsyncService& service)
+
{
+
+
agrpc::register_yield_rpc_handler<RPC>(
+
grpc_context, service,
+
[](RPC& rpc, RPC::Request& request, const asio::yield_context& yield)
+
{
+
RPC::Response response;
+
response.set_integer(request.integer());
+
rpc.finish(response, grpc::Status::OK, yield);
+
},
+
asio::detached);
+
}
+
Template Parameters
+
+
+
+
Parameters
+
+ executor The executor used to handle each rpc
+ service The service associated with the gRPC method of the ServerRPC
+ rpc_handler A callable that takes an asio::basic_yield_context<Executor>
as last argument. The return value is ignored. The Executor must be constructible from asio::get_associated_executor(completion_handler,
+executor)
, where completion_handler
is obtained from token
and executor
the first argument passed to this function.
+ token A completion token for signature void(std::exception_ptr)
.
+
+
+
+
Since 2.7.0
+
+
+
+
+
◆ register_yield_rpc_handler() [2/2]
+
+
+
+
+template<class
ServerRPC , class RPCHandler , class CompletionToken >
+
+
+ auto agrpc::register_yield_rpc_handler
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ detail::GetServerRPCServiceT< ServerRPC > &
+ service ,
+
+
+
+
+ RPCHandler &&
+ rpc_handler ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+
+
+
+
+
+
Register a rpc handler for the given method (GrpcContext overload)
+
Since 2.7.0
+
+
+
+
+
◆ run() [1/2]
+
+
+
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
+
+
+ void agrpc::run
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ ExecutionContext &
+ execution_context
+
+
+
+ )
+
+
+
+
+
+
(experimental) Run an execution context in the same thread as a GrpcContext
+
The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run() . This function ends when the GrpcContext is stopped, e.g. because it ran out of work.
+
Template Parameters
+
+
+
+
Since 1.7.0
+
+
+
+
+
◆ run() [2/2]
+
+
+
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
+
+
+ void agrpc::run
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ ExecutionContext &
+ execution_context ,
+
+
+
+
+ StopCondition
+ stop_condition
+
+
+
+ )
+
+
+
+
+
+
(experimental) Run an execution context in the same thread as a GrpcContext
+
The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run() . This function ends when the stop_condition
returns true
.
+
Template Parameters
+
+
+
+
Since 1.7.0
+
+
+
+
+
◆ run_completion_queue() [1/2]
+
+
+
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void>
+
+
+ void agrpc::run_completion_queue
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ ExecutionContext &
+ execution_context
+
+
+
+ )
+
+
+
+
+
+
(experimental) Run an execution context in the same thread as a GrpcContext 's completion queue
+
The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run_completion_queue() . This function ends when the GrpcContext is stopped, e.g. because it ran out of work.
+
Template Parameters
+
+
+
+
Since 2.0.0
+
+
+
+
+
◆ run_completion_queue() [2/2]
+
+
+
+
+template<class Traits = agrpc::DefaultRunTraits, class ExecutionContext = void, class StopCondition = void>
+
+
+ void agrpc::run_completion_queue
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ ExecutionContext &
+ execution_context ,
+
+
+
+
+ StopCondition
+ stop_condition
+
+
+
+ )
+
+
+
+
+
+
(experimental) Run an execution context in the same thread as a GrpcContext 's completion queue
+
The GrpcContext should be in the ready state when this function is invoked, other than that semantically identical to GrpcContext::run_completion_queue() . This function ends when the stop_condition
returns true
.
+
Template Parameters
+
+
+
+
Since 2.0.0
+
+
+
+
+
◆ process_grpc_tag()
+
+
+
+
+
+
+
+
+ void agrpc::process_grpc_tag
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ void *
+ tag ,
+
+
+
+
+ bool
+ ok
+
+
+
+ )
+
+
+
+
+
+inline
+
+
+
+
+
Test utility to manually process gRPC tags.
+
This function can be used to process gRPC tags in places where the tag does not go through the grpc::CompletionQueue
, for example in mocked stubs. It processes the tag in a manner equivalent to asio::post
.
+
Example using Google Mock:
+
+
struct MockResponseReader : grpc::ClientAsyncResponseReaderInterface<example::v1::Response>
+
{
+
MOCK_METHOD0(StartCall, void ());
+
MOCK_METHOD1(ReadInitialMetadata, void (void *));
+
MOCK_METHOD3(Finish, void (example::v1::Response*, grpc::Status*, void *));
+
};
+
testing::NiceMock<example::v1::MockExampleStub> mock_stub;
+
testing::NiceMock<MockResponseReader> mock_reader;
+
EXPECT_CALL(mock_reader, Finish)
+
.WillOnce(
+
[&](example::v1::Response* response, grpc::Status* status, void * tag)
+
{
+
*status = grpc::Status::OK;
+
response->set_integer(42);
+
+
});
+
EXPECT_CALL(mock_stub, AsyncUnaryRaw).WillOnce(testing::Return(&mock_reader));
+
+
+
+
grpc::ClientContext client_context;
+
example::v1::Response response;
+
example::v1::Request request;
+
const grpc::Status status =
+
co_await RPC::request(grpc_context, mock_stub, client_context, request, response, asio::use_awaitable);
+
+
assert(status.ok());
+
assert(42 == response.integer());
+
Primary ClientRPC template.
Definition: forward.hpp:56
+
void process_grpc_tag(agrpc::GrpcContext &grpc_context, void *tag, bool ok)
Test utility to manually process gRPC tags.
Definition: test.hpp:38
+
Since 1.7.0
+
+
+
+
+
+
◆ notify_on_state_change
+
+
+
+
+
+
+
+
+
+inline constexpr
+
+
+
+
+
+
◆ read
+
+
+
+
+
+
+
+
+
+inline constexpr
+
+
+
+
+
+
◆ use_sender
+
+
+
+
+
+
+
+
+
+inline constexpr
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/namespaceagrpc.js b/docs/namespaceagrpc.js
new file mode 100644
index 00000000..0c2d6f76
--- /dev/null
+++ b/docs/namespaceagrpc.js
@@ -0,0 +1,59 @@
+var namespaceagrpc =
+[
+ [ "BasicAlarm", "classagrpc_1_1_basic_alarm.html", "classagrpc_1_1_basic_alarm" ],
+ [ "BasicGrpcExecutor", "classagrpc_1_1_basic_grpc_executor.html", "classagrpc_1_1_basic_grpc_executor" ],
+ [ "ClientRPC", "classagrpc_1_1_client_r_p_c.html", null ],
+ [ "ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4" ],
+ [ "ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4" ],
+ [ "ClientRPC< PrepareAsyncBidiStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4" ],
+ [ "ClientRPC< PrepareAsyncClientStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4" ],
+ [ "ClientRPC< PrepareAsyncServerStreaming, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4" ],
+ [ "ClientRPC< PrepareAsyncUnary, Executor >", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html", "classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4" ],
+ [ "DefaultRunTraits", "structagrpc_1_1_default_run_traits.html", "structagrpc_1_1_default_run_traits" ],
+ [ "GrpcContext", "classagrpc_1_1_grpc_context.html", "classagrpc_1_1_grpc_context" ],
+ [ "HealthCheckService", "classagrpc_1_1_health_check_service.html", "classagrpc_1_1_health_check_service" ],
+ [ "ServerRPC", "classagrpc_1_1_server_r_p_c.html", null ],
+ [ "ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4" ],
+ [ "ServerRPC< RequestBidiStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4" ],
+ [ "ServerRPC< RequestClientStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4" ],
+ [ "ServerRPC< RequestServerStreaming, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4" ],
+ [ "ServerRPC< RequestUnary, TraitsT, Executor >", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html", "classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4" ],
+ [ "ServerRPCPtr", "classagrpc_1_1_server_r_p_c_ptr.html", "classagrpc_1_1_server_r_p_c_ptr" ],
+ [ "UseSender", "structagrpc_1_1_use_sender.html", "structagrpc_1_1_use_sender" ],
+ [ "Waiter", "classagrpc_1_1_waiter.html", "classagrpc_1_1_waiter" ],
+ [ "Alarm", "namespaceagrpc.html#a86621c3633e8ae502a630b20bc5ec995", null ],
+ [ "GenericUnaryClientRPC", "namespaceagrpc.html#a566bc0105d5528ff6c8bec826429609c", null ],
+ [ "GenericStreamingClientRPC", "namespaceagrpc.html#a1ad87ac82291c4c9428970e18c59b6e8", null ],
+ [ "GrpcExecutor", "namespaceagrpc.html#aebdc4a27625d789667c7d54985157d28", null ],
+ [ "GenericServerRPC", "namespaceagrpc.html#ad57f1d103299e55351ebbfce7653d535", null ],
+ [ "ClientRPCType", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36e", [
+ [ "UNARY", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea8ca44f46ef1f04b2113678603c3800b4", null ],
+ [ "GENERIC_UNARY", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea2a1be6738d2573a3eecd21f772e11756", null ],
+ [ "SERVER_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaeb1bcff53747fbcc6c2ded49b5724257", null ],
+ [ "CLIENT_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea1350d72153c5dd5e5cbaffc22da1cfdc", null ],
+ [ "BIDIRECTIONAL_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaf92e0d805b776fa75c63d16707f99111", null ],
+ [ "GENERIC_STREAMING", "namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eadf49273525fcac45f0fe3afd8c7a5454", null ]
+ ] ],
+ [ "ServerRPCType", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216", [
+ [ "UNARY", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a8ca44f46ef1f04b2113678603c3800b4", null ],
+ [ "SERVER_STREAMING", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216aeb1bcff53747fbcc6c2ded49b5724257", null ],
+ [ "CLIENT_STREAMING", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a1350d72153c5dd5e5cbaffc22da1cfdc", null ],
+ [ "BIDIRECTIONAL_STREAMING", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216af92e0d805b776fa75c63d16707f99111", null ],
+ [ "GENERIC", "namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216ac942dc2a9f958acddc67e11472d3ca0b", null ]
+ ] ],
+ [ "register_awaitable_rpc_handler", "namespaceagrpc.html#a2f1dcfb4b6d0111e640416b1d42bee3d", null ],
+ [ "register_awaitable_rpc_handler", "namespaceagrpc.html#a78ac79843f9432d01bb150416ade53b7", null ],
+ [ "register_callback_rpc_handler", "namespaceagrpc.html#a7226596382b2075d1634468c504f39a9", null ],
+ [ "register_callback_rpc_handler", "namespaceagrpc.html#a278fe747978485cb9117fbd94cad5f3b", null ],
+ [ "register_sender_rpc_handler", "namespaceagrpc.html#a87283536759419ab67987115551675c2", null ],
+ [ "register_yield_rpc_handler", "namespaceagrpc.html#a5799e0d272e088ee755ebc3b54f6bde1", null ],
+ [ "register_yield_rpc_handler", "namespaceagrpc.html#aa099d7d7ee8bf6ed6b57bd413027f391", null ],
+ [ "run", "namespaceagrpc.html#ab52a5b6f6ce90d1bc9faa5baa96a39fa", null ],
+ [ "run", "namespaceagrpc.html#a075e15728ee3eac5531f3202cfaf6c38", null ],
+ [ "run_completion_queue", "namespaceagrpc.html#a7c08e9c2d581c89024ba71489fc5aaf3", null ],
+ [ "run_completion_queue", "namespaceagrpc.html#a32f6562885c161c318d08f83e48468e8", null ],
+ [ "process_grpc_tag", "namespaceagrpc.html#accc81e3886098f4472dbe3e528594e3e", null ],
+ [ "notify_on_state_change", "namespaceagrpc.html#a3f3ac92b1e47fe65b8bbef1b3af97c60", null ],
+ [ "read", "namespaceagrpc.html#a685510388ab87c9a90c44f880e9de9cd", null ],
+ [ "use_sender", "namespaceagrpc.html#aa9c38be6a3d7d59a78007bc4fff311a4", null ]
+];
\ No newline at end of file
diff --git a/docs/namespacemembers.html b/docs/namespacemembers.html
new file mode 100644
index 00000000..d63508f2
--- /dev/null
+++ b/docs/namespacemembers.html
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+asio-grpc: Namespace Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all documented namespace members with links to the namespaces they belong to:
+Alarm : agrpc
+ClientRPCType : agrpc
+GenericServerRPC : agrpc
+GenericStreamingClientRPC : agrpc
+GenericUnaryClientRPC : agrpc
+GrpcExecutor : agrpc
+notify_on_state_change : agrpc
+process_grpc_tag() : agrpc
+read : agrpc
+register_awaitable_rpc_handler() : agrpc
+register_callback_rpc_handler() : agrpc
+register_sender_rpc_handler() : agrpc
+register_yield_rpc_handler() : agrpc
+run() : agrpc
+run_completion_queue() : agrpc
+ServerRPCType : agrpc
+use_sender : agrpc
+
+
+
+
+
+
+
diff --git a/docs/namespacemembers_enum.html b/docs/namespacemembers_enum.html
new file mode 100644
index 00000000..7d308fb9
--- /dev/null
+++ b/docs/namespacemembers_enum.html
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+asio-grpc: Namespace Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/namespacemembers_func.html b/docs/namespacemembers_func.html
new file mode 100644
index 00000000..961c11ce
--- /dev/null
+++ b/docs/namespacemembers_func.html
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+asio-grpc: Namespace Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+process_grpc_tag() : agrpc
+register_awaitable_rpc_handler() : agrpc
+register_callback_rpc_handler() : agrpc
+register_sender_rpc_handler() : agrpc
+register_yield_rpc_handler() : agrpc
+run() : agrpc
+run_completion_queue() : agrpc
+
+
+
+
+
+
+
diff --git a/docs/namespacemembers_type.html b/docs/namespacemembers_type.html
new file mode 100644
index 00000000..ddcc8b3b
--- /dev/null
+++ b/docs/namespacemembers_type.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Namespace Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Alarm : agrpc
+GenericServerRPC : agrpc
+GenericStreamingClientRPC : agrpc
+GenericUnaryClientRPC : agrpc
+GrpcExecutor : agrpc
+
+
+
+
+
+
+
diff --git a/docs/namespacemembers_vars.html b/docs/namespacemembers_vars.html
new file mode 100644
index 00000000..fb0e98e3
--- /dev/null
+++ b/docs/namespacemembers_vars.html
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+asio-grpc: Namespace Members
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/namespaces.html b/docs/namespaces.html
new file mode 100644
index 00000000..8a243c0e
--- /dev/null
+++ b/docs/namespaces.html
@@ -0,0 +1,143 @@
+
+
+
+
+
+
+
+
+asio-grpc: Namespace List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all documented namespaces with brief descriptions:
+
[detail level 1 2 3 ]
+ ▼ N agrpc Public namespace
+ C BasicAlarm I/O object for grpc::Alarm
+ C BasicGrpcExecutor GrpcContext 's executor
+ C ClientRPC Primary ClientRPC template
+ ▼ C ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor > I/O object for client-side, generic, streaming rpcs
+ C rebind_executor Rebind the ClientRPC to another executor
+ ▼ C ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor > I/O object for client-side, generic, unary rpcs
+ C rebind_executor Rebind the ClientRPC to another executor
+ ▼ C ClientRPC< PrepareAsyncBidiStreaming, Executor > I/O object for client-side, bidirectional-streaming rpcs
+ C rebind_executor Rebind the ClientRPC to another executor
+ ▼ C ClientRPC< PrepareAsyncClientStreaming, Executor > I/O object for client-side, client-streaming rpcs
+ C rebind_executor Rebind the ClientRPC to another executor
+ C ClientRPC< PrepareAsyncServerStreaming, Executor > I/O object for client-side, server-streaming rpcs
+ C ClientRPC< PrepareAsyncUnary, Executor > I/O object for client-side, unary rpcs
+ C DefaultRunTraits (experimental) Default run traits
+ C GrpcContext Execution context based on grpc::CompletionQueue
+ C HealthCheckService CompletionQueue-based implementation of grpc::HealthCheckServiceInterface
+ C ServerRPC Primary ServerRPC template
+ ▼ C ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor > I/O object for server-side, generic rpcs
+ C rebind_executor Rebind the ServerRPC to another executor
+ ▼ C ServerRPC< RequestBidiStreaming, TraitsT, Executor > I/O object for server-side, bidirectional-streaming rpcs
+ C rebind_executor Rebind the ServerRPC to another executor
+ ▼ C ServerRPC< RequestClientStreaming, TraitsT, Executor > I/O object for server-side, client-streaming rpcs
+ C rebind_executor Rebind the ServerRPC to another executor
+ ▼ C ServerRPC< RequestServerStreaming, TraitsT, Executor > I/O object for server-side, server-streaming rpcs
+ C rebind_executor Rebind the ServerRPC to another executor
+ ▼ C ServerRPC< RequestUnary, TraitsT, Executor > I/O object for server-side, unary rpcs
+ C rebind_executor Rebind the ServerRPC to another executor
+ C ServerRPCPtr Allocated ServerRPC created by register_callback_rpc_handler
+ C UseSender Sender completion token
+ ▼ C Waiter (experimental) Utility class for uncancelable operations
+ C rebind_executor Rebind the Waiter to another executor
+
+
+
+
+
+
+
+
diff --git a/docs/namespaces_dup.js b/docs/namespaces_dup.js
new file mode 100644
index 00000000..868d5cb7
--- /dev/null
+++ b/docs/namespaces_dup.js
@@ -0,0 +1,4 @@
+var namespaces_dup =
+[
+ [ "agrpc", "namespaceagrpc.html", "namespaceagrpc" ]
+];
\ No newline at end of file
diff --git a/docs/nav_f.png b/docs/nav_f.png
new file mode 100644
index 00000000..940086dd
Binary files /dev/null and b/docs/nav_f.png differ
diff --git a/docs/nav_g.png b/docs/nav_g.png
new file mode 100644
index 00000000..2093a237
Binary files /dev/null and b/docs/nav_g.png differ
diff --git a/docs/nav_h.png b/docs/nav_h.png
new file mode 100644
index 00000000..9a92b078
Binary files /dev/null and b/docs/nav_h.png differ
diff --git a/docs/navtree.css b/docs/navtree.css
new file mode 100644
index 00000000..afcc53ad
--- /dev/null
+++ b/docs/navtree.css
@@ -0,0 +1,147 @@
+#nav-tree .children_ul {
+ margin:0;
+ padding:4px;
+}
+
+#nav-tree ul {
+ list-style:none outside none;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree li {
+ white-space:nowrap;
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .plus {
+ margin:0px;
+}
+
+#nav-tree .selected {
+ background-image: url('tab_a.png');
+ background-repeat:repeat-x;
+ color: #fff;
+ text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);
+}
+
+#nav-tree img {
+ margin:0px;
+ padding:0px;
+ border:0px;
+ vertical-align: middle;
+}
+
+#nav-tree a {
+ text-decoration:none;
+ padding:0px;
+ margin:0px;
+ outline:none;
+}
+
+#nav-tree .label {
+ margin:0px;
+ padding:0px;
+ font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;
+}
+
+#nav-tree .label a {
+ padding:2px;
+}
+
+#nav-tree .selected a {
+ text-decoration:none;
+ color:#fff;
+}
+
+#nav-tree .children_ul {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree .item {
+ margin:0px;
+ padding:0px;
+}
+
+#nav-tree {
+ padding: 0px 0px;
+ background-color: #FAFAFF;
+ font-size:14px;
+ overflow:auto;
+}
+
+#doc-content {
+ overflow:auto;
+ display:block;
+ padding:0px;
+ margin:0px;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#side-nav {
+ padding:0 6px 0 0;
+ margin: 0px;
+ display:block;
+ position: absolute;
+ left: 0px;
+ width: 310px;
+ overflow : hidden;
+}
+
+.ui-resizable .ui-resizable-handle {
+ display:block;
+}
+
+.ui-resizable-e {
+ background-image:url("splitbar.png");
+ background-size:100%;
+ background-repeat:repeat-y;
+ background-attachment: scroll;
+ cursor:ew-resize;
+ height:100%;
+ right:0;
+ top:0;
+ width:6px;
+}
+
+.ui-resizable-handle {
+ display:none;
+ font-size:0.1px;
+ position:absolute;
+ z-index:1;
+}
+
+#nav-tree-contents {
+ margin: 6px 0px 0px 0px;
+}
+
+#nav-tree {
+ background-image:url('nav_h.png');
+ background-repeat:repeat-x;
+ background-color: #F3F9FE;
+ -webkit-overflow-scrolling : touch; /* iOS 5+ */
+}
+
+#nav-sync {
+ position:absolute;
+ top:5px;
+ right:24px;
+ z-index:0;
+}
+
+#nav-sync img {
+ opacity:0.3;
+}
+
+#nav-sync img:hover {
+ opacity:0.9;
+}
+
+@media print
+{
+ #nav-tree { display: none; }
+ div.ui-resizable-handle { display: none; position: relative; }
+}
+
diff --git a/docs/navtree.js b/docs/navtree.js
new file mode 100644
index 00000000..27983687
--- /dev/null
+++ b/docs/navtree.js
@@ -0,0 +1,549 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+var navTreeSubIndices = new Array();
+var arrowDown = '▼';
+var arrowRight = '►';
+
+function getData(varName)
+{
+ var i = varName.lastIndexOf('/');
+ var n = i>=0 ? varName.substring(i+1) : varName;
+ return eval(n.replace(/\-/g,'_'));
+}
+
+function stripPath(uri)
+{
+ return uri.substring(uri.lastIndexOf('/')+1);
+}
+
+function stripPath2(uri)
+{
+ var i = uri.lastIndexOf('/');
+ var s = uri.substring(i+1);
+ var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/);
+ return m ? uri.substring(i-6) : s;
+}
+
+function hashValue()
+{
+ return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,'');
+}
+
+function hashUrl()
+{
+ return '#'+hashValue();
+}
+
+function pathName()
+{
+ return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, '');
+}
+
+function localStorageSupported()
+{
+ try {
+ return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem;
+ }
+ catch(e) {
+ return false;
+ }
+}
+
+function storeLink(link)
+{
+ if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) {
+ window.localStorage.setItem('navpath',link);
+ }
+}
+
+function deleteLink()
+{
+ if (localStorageSupported()) {
+ window.localStorage.setItem('navpath','');
+ }
+}
+
+function cachedLink()
+{
+ if (localStorageSupported()) {
+ return window.localStorage.getItem('navpath');
+ } else {
+ return '';
+ }
+}
+
+function getScript(scriptName,func,show)
+{
+ var head = document.getElementsByTagName("head")[0];
+ var script = document.createElement('script');
+ script.id = scriptName;
+ script.type = 'text/javascript';
+ script.onload = func;
+ script.src = scriptName+'.js';
+ head.appendChild(script);
+}
+
+function createIndent(o,domNode,node,level)
+{
+ var level=-1;
+ var n = node;
+ while (n.parentNode) { level++; n=n.parentNode; }
+ if (node.childrenData) {
+ var imgNode = document.createElement("span");
+ imgNode.className = 'arrow';
+ imgNode.style.paddingLeft=(16*level).toString()+'px';
+ imgNode.innerHTML=arrowRight;
+ node.plus_img = imgNode;
+ node.expandToggle = document.createElement("a");
+ node.expandToggle.href = "javascript:void(0)";
+ node.expandToggle.onclick = function() {
+ if (node.expanded) {
+ $(node.getChildrenUL()).slideUp("fast");
+ node.plus_img.innerHTML=arrowRight;
+ node.expanded = false;
+ } else {
+ expandNode(o, node, false, false);
+ }
+ }
+ node.expandToggle.appendChild(imgNode);
+ domNode.appendChild(node.expandToggle);
+ } else {
+ var span = document.createElement("span");
+ span.className = 'arrow';
+ span.style.width = 16*(level+1)+'px';
+ span.innerHTML = ' ';
+ domNode.appendChild(span);
+ }
+}
+
+var animationInProgress = false;
+
+function gotoAnchor(anchor,aname,updateLocation)
+{
+ var pos, docContent = $('#doc-content');
+ var ancParent = $(anchor.parent());
+ if (ancParent.hasClass('memItemLeft') ||
+ ancParent.hasClass('memtitle') ||
+ ancParent.hasClass('fieldname') ||
+ ancParent.hasClass('fieldtype') ||
+ ancParent.is(':header'))
+ {
+ pos = ancParent.position().top;
+ } else if (anchor.position()) {
+ pos = anchor.position().top;
+ }
+ if (pos) {
+ var dist = Math.abs(Math.min(
+ pos-docContent.offset().top,
+ docContent[0].scrollHeight-
+ docContent.height()-docContent.scrollTop()));
+ animationInProgress=true;
+ docContent.animate({
+ scrollTop: pos + docContent.scrollTop() - docContent.offset().top
+ },Math.max(50,Math.min(500,dist)),function(){
+ if (updateLocation) window.location.href=aname;
+ animationInProgress=false;
+ });
+ }
+}
+
+function newNode(o, po, text, link, childrenData, lastNode)
+{
+ var node = new Object();
+ node.children = Array();
+ node.childrenData = childrenData;
+ node.depth = po.depth + 1;
+ node.relpath = po.relpath;
+ node.isLast = lastNode;
+
+ node.li = document.createElement("li");
+ po.getChildrenUL().appendChild(node.li);
+ node.parentNode = po;
+
+ node.itemDiv = document.createElement("div");
+ node.itemDiv.className = "item";
+
+ node.labelSpan = document.createElement("span");
+ node.labelSpan.className = "label";
+
+ createIndent(o,node.itemDiv,node,0);
+ node.itemDiv.appendChild(node.labelSpan);
+ node.li.appendChild(node.itemDiv);
+
+ var a = document.createElement("a");
+ node.labelSpan.appendChild(a);
+ node.label = document.createTextNode(text);
+ node.expanded = false;
+ a.appendChild(node.label);
+ if (link) {
+ var url;
+ if (link.substring(0,1)=='^') {
+ url = link.substring(1);
+ link = url;
+ } else {
+ url = node.relpath+link;
+ }
+ a.className = stripPath(link.replace('#',':'));
+ if (link.indexOf('#')!=-1) {
+ var aname = '#'+link.split('#')[1];
+ var srcPage = stripPath(pathName());
+ var targetPage = stripPath(link.split('#')[0]);
+ a.href = srcPage!=targetPage ? url : "javascript:void(0)";
+ a.onclick = function(){
+ storeLink(link);
+ if (!$(a).parent().parent().hasClass('selected'))
+ {
+ $('.item').removeClass('selected');
+ $('.item').removeAttr('id');
+ $(a).parent().parent().addClass('selected');
+ $(a).parent().parent().attr('id','selected');
+ }
+ var anchor = $(aname);
+ gotoAnchor(anchor,aname,true);
+ };
+ } else {
+ a.href = url;
+ a.onclick = function() { storeLink(link); }
+ }
+ } else {
+ if (childrenData != null)
+ {
+ a.className = "nolink";
+ a.href = "javascript:void(0)";
+ a.onclick = node.expandToggle.onclick;
+ }
+ }
+
+ node.childrenUL = null;
+ node.getChildrenUL = function() {
+ if (!node.childrenUL) {
+ node.childrenUL = document.createElement("ul");
+ node.childrenUL.className = "children_ul";
+ node.childrenUL.style.display = "none";
+ node.li.appendChild(node.childrenUL);
+ }
+ return node.childrenUL;
+ };
+
+ return node;
+}
+
+function showRoot()
+{
+ var headerHeight = $("#top").height();
+ var footerHeight = $("#nav-path").height();
+ var windowHeight = $(window).height() - headerHeight - footerHeight;
+ (function (){ // retry until we can scroll to the selected item
+ try {
+ var navtree=$('#nav-tree');
+ navtree.scrollTo('#selected',100,{offset:-windowHeight/2});
+ } catch (err) {
+ setTimeout(arguments.callee, 0);
+ }
+ })();
+}
+
+function expandNode(o, node, imm, showRoot)
+{
+ if (node.childrenData && !node.expanded) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ expandNode(o, node, imm, showRoot);
+ }, showRoot);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ }
+ $(node.getChildrenUL()).slideDown("fast");
+ node.plus_img.innerHTML = arrowDown;
+ node.expanded = true;
+ }
+ }
+}
+
+function glowEffect(n,duration)
+{
+ n.addClass('glow').delay(duration).queue(function(next){
+ $(this).removeClass('glow');next();
+ });
+}
+
+function highlightAnchor()
+{
+ var aname = hashUrl();
+ var anchor = $(aname);
+ if (anchor.parent().attr('class')=='memItemLeft'){
+ var rows = $('.memberdecls tr[class$="'+hashValue()+'"]');
+ glowEffect(rows.children(),300); // member without details
+ } else if (anchor.parent().attr('class')=='fieldname'){
+ glowEffect(anchor.parent().parent(),1000); // enum value
+ } else if (anchor.parent().attr('class')=='fieldtype'){
+ glowEffect(anchor.parent().parent(),1000); // struct field
+ } else if (anchor.parent().is(":header")) {
+ glowEffect(anchor.parent(),1000); // section header
+ } else {
+ glowEffect(anchor.next(),1000); // normal member
+ }
+}
+
+function selectAndHighlight(hash,n)
+{
+ var a;
+ if (hash) {
+ var link=stripPath(pathName())+':'+hash.substring(1);
+ a=$('.item a[class$="'+link+'"]');
+ }
+ if (a && a.length) {
+ a.parent().parent().addClass('selected');
+ a.parent().parent().attr('id','selected');
+ highlightAnchor();
+ } else if (n) {
+ $(n.itemDiv).addClass('selected');
+ $(n.itemDiv).attr('id','selected');
+ }
+ var topOffset=5;
+ if (typeof page_layout!=='undefined' && page_layout==1) {
+ topOffset+=$('#top').outerHeight();
+ }
+ if ($('#nav-tree-contents .item:first').hasClass('selected')) {
+ topOffset+=25;
+ }
+ $('#nav-sync').css('top',topOffset+'px');
+ showRoot();
+}
+
+function showNode(o, node, index, hash)
+{
+ if (node && node.childrenData) {
+ if (typeof(node.childrenData)==='string') {
+ var varName = node.childrenData;
+ getScript(node.relpath+varName,function(){
+ node.childrenData = getData(varName);
+ showNode(o,node,index,hash);
+ },true);
+ } else {
+ if (!node.childrenVisited) {
+ getNode(o, node);
+ }
+ $(node.getChildrenUL()).css({'display':'block'});
+ node.plus_img.innerHTML = arrowDown;
+ node.expanded = true;
+ var n = node.children[o.breadcrumbs[index]];
+ if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,'');
+ else hash='';
+ }
+ if (hash.match(/^#l\d+$/)) {
+ var anchor=$('a[name='+hash.substring(1)+']');
+ glowEffect(anchor.parent(),1000); // line number
+ hash=''; // strip line number anchors
+ }
+ var url=root+hash;
+ var i=-1;
+ while (NAVTREEINDEX[i+1]<=url) i++;
+ if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath)
+ } else {
+ getScript(relpath+'navtreeindex'+i,function(){
+ navTreeSubIndices[i] = eval('NAVTREEINDEX'+i);
+ if (navTreeSubIndices[i]) {
+ gotoNode(o,i,root,hash,relpath);
+ }
+ },true);
+ }
+}
+
+function showSyncOff(n,relpath)
+{
+ n.html(' ');
+}
+
+function showSyncOn(n,relpath)
+{
+ n.html(' ');
+}
+
+function toggleSyncButton(relpath)
+{
+ var navSync = $('#nav-sync');
+ if (navSync.hasClass('sync')) {
+ navSync.removeClass('sync');
+ showSyncOff(navSync,relpath);
+ storeLink(stripPath2(pathName())+hashUrl());
+ } else {
+ navSync.addClass('sync');
+ showSyncOn(navSync,relpath);
+ deleteLink();
+ }
+}
+
+var loadTriggered = false;
+var readyTriggered = false;
+var loadObject,loadToRoot,loadUrl,loadRelPath;
+
+$(window).on('load',function(){
+ if (readyTriggered) { // ready first
+ navTo(loadObject,loadToRoot,loadUrl,loadRelPath);
+ showRoot();
+ }
+ loadTriggered=true;
+});
+
+function initNavTree(toroot,relpath)
+{
+ var o = new Object();
+ o.toroot = toroot;
+ o.node = new Object();
+ o.node.li = document.getElementById("nav-tree-contents");
+ o.node.childrenData = NAVTREE;
+ o.node.children = new Array();
+ o.node.childrenUL = document.createElement("ul");
+ o.node.getChildrenUL = function() { return o.node.childrenUL; };
+ o.node.li.appendChild(o.node.childrenUL);
+ o.node.depth = 0;
+ o.node.relpath = relpath;
+ o.node.expanded = false;
+ o.node.isLast = true;
+ o.node.plus_img = document.createElement("span");
+ o.node.plus_img.className = 'arrow';
+ o.node.plus_img.innerHTML = arrowRight;
+
+ if (localStorageSupported()) {
+ var navSync = $('#nav-sync');
+ if (cachedLink()) {
+ showSyncOff(navSync,relpath);
+ navSync.removeClass('sync');
+ } else {
+ showSyncOn(navSync,relpath);
+ }
+ navSync.click(function(){ toggleSyncButton(relpath); });
+ }
+
+ if (loadTriggered) { // load before ready
+ navTo(o,toroot,hashUrl(),relpath);
+ showRoot();
+ } else { // ready before load
+ loadObject = o;
+ loadToRoot = toroot;
+ loadUrl = hashUrl();
+ loadRelPath = relpath;
+ readyTriggered=true;
+ }
+
+ $(window).bind('hashchange', function(){
+ if (window.location.hash && window.location.hash.length>1){
+ var a;
+ if ($(location).attr('hash')){
+ var clslink=stripPath(pathName())+':'+hashValue();
+ a=$('.item a[class$="'+clslink.replace(/
+
+
+
+
+
+
+
+asio-grpc: Related Pages
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Here is a list of all related documentation pages:
+
+
+
+
+
+
diff --git a/docs/resize.js b/docs/resize.js
new file mode 100644
index 00000000..7fe30d10
--- /dev/null
+++ b/docs/resize.js
@@ -0,0 +1,150 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function initResizable()
+{
+ var cookie_namespace = 'doxygen';
+ var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight;
+
+ function readCookie(cookie)
+ {
+ var myCookie = cookie_namespace+"_"+cookie+"=";
+ if (document.cookie) {
+ var index = document.cookie.indexOf(myCookie);
+ if (index != -1) {
+ var valStart = index + myCookie.length;
+ var valEnd = document.cookie.indexOf(";", valStart);
+ if (valEnd == -1) {
+ valEnd = document.cookie.length;
+ }
+ var val = document.cookie.substring(valStart, valEnd);
+ return val;
+ }
+ }
+ return 0;
+ }
+
+ function writeCookie(cookie, val, expiration)
+ {
+ if (val==undefined) return;
+ if (expiration == null) {
+ var date = new Date();
+ date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week
+ expiration = date.toGMTString();
+ }
+ document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/";
+ }
+
+ function resizeWidth()
+ {
+ var windowWidth = $(window).width() + "px";
+ var sidenavWidth = $(sidenav).outerWidth();
+ content.css({marginLeft:parseInt(sidenavWidth)+"px"});
+ writeCookie('width',sidenavWidth-barWidth, null);
+ }
+
+ function restoreWidth(navWidth)
+ {
+ var windowWidth = $(window).width() + "px";
+ content.css({marginLeft:parseInt(navWidth)+barWidth+"px"});
+ sidenav.css({width:navWidth + "px"});
+ }
+
+ function resizeHeight()
+ {
+ var headerHeight = header.outerHeight();
+ var footerHeight = footer.outerHeight();
+ var windowHeight = $(window).height();
+ var contentHeight,navtreeHeight,sideNavHeight;
+ if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */
+ contentHeight = windowHeight - headerHeight - footerHeight;
+ navtreeHeight = contentHeight;
+ sideNavHeight = contentHeight;
+ } else if (page_layout==1) { /* DISABLE_INDEX=YES */
+ contentHeight = windowHeight - footerHeight;
+ navtreeHeight = windowHeight - headerHeight;
+ sideNavHeight = windowHeight;
+ }
+ content.css({height:contentHeight + "px"});
+ navtree.css({height:navtreeHeight + "px"});
+ sidenav.css({height:sideNavHeight + "px"});
+ var width=$(window).width();
+ if (width!=collapsedWidth) {
+ if (width=desktop_vp) {
+ if (!collapsed) {
+ collapseExpand();
+ }
+ } else if (width>desktop_vp && collapsedWidth0) {
+ restoreWidth(0);
+ collapsed=true;
+ }
+ else {
+ var width = readCookie('width');
+ if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); }
+ collapsed=false;
+ }
+ }
+
+ header = $("#top");
+ sidenav = $("#side-nav");
+ content = $("#doc-content");
+ navtree = $("#nav-tree");
+ footer = $("#nav-path");
+ $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } });
+ $(sidenav).resizable({ minWidth: 0 });
+ $(window).resize(function() { resizeHeight(); });
+ var device = navigator.userAgent.toLowerCase();
+ var touch_device = device.match(/(iphone|ipod|ipad|android)/);
+ if (touch_device) { /* wider split bar for touch only devices */
+ $(sidenav).css({ paddingRight:'20px' });
+ $('.ui-resizable-e').css({ width:'20px' });
+ $('#nav-sync').css({ right:'34px' });
+ barWidth=20;
+ }
+ var width = readCookie('width');
+ if (width) { restoreWidth(width); } else { resizeWidth(); }
+ resizeHeight();
+ var url = location.href;
+ var i=url.indexOf("#");
+ if (i>=0) window.location.hash=url.substr(i);
+ var _preventDefault = function(evt) { evt.preventDefault(); };
+ $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault);
+ $(".ui-resizable-handle").dblclick(collapseExpand);
+ $(window).on('load',resizeHeight);
+}
+/* @license-end */
diff --git a/docs/search/all_0.html b/docs/search/all_0.html
new file mode 100644
index 00000000..bb9e3643
--- /dev/null
+++ b/docs/search/all_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_0.js b/docs/search/all_0.js
new file mode 100644
index 00000000..6c232109
--- /dev/null
+++ b/docs/search/all_0.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['add_5fhealth_5fcheck_5fservice_0',['add_health_check_service',['../classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb',1,'agrpc::HealthCheckService']]],
+ ['agrpc_1',['agrpc',['../namespaceagrpc.html',1,'']]],
+ ['alarm_2',['Alarm',['../namespaceagrpc.html#a86621c3633e8ae502a630b20bc5ec995',1,'agrpc']]],
+ ['allocator_5ftype_3',['allocator_type',['../classagrpc_1_1_grpc_context.html#a3445ceeb54e332eabf163cc6afdc1e3d',1,'agrpc::GrpcContext::allocator_type()'],['../classagrpc_1_1_basic_grpc_executor.html#a658f9dcfd92c049d9b8961bbb67eab13',1,'agrpc::BasicGrpcExecutor::allocator_type()']]],
+ ['as_5fdefault_5fon_5ft_4',['as_default_on_t',['../structagrpc_1_1_use_sender.html#a5f2944c83cd580b404b52d76f8df4140',1,'agrpc::UseSender']]],
+ ['asio_2dgrpc_5',['asio-grpc',['../index.html',1,'']]]
+];
diff --git a/docs/search/all_1.html b/docs/search/all_1.html
new file mode 100644
index 00000000..8989416f
--- /dev/null
+++ b/docs/search/all_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_1.js b/docs/search/all_1.js
new file mode 100644
index 00000000..ca8cf930
--- /dev/null
+++ b/docs/search/all_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['basicalarm_0',['BasicAlarm',['../classagrpc_1_1_basic_alarm.html',1,'agrpc::BasicAlarm< Executor >'],['../classagrpc_1_1_basic_alarm.html#a1c2856cde4299fab6033f44785b39a91',1,'agrpc::BasicAlarm::BasicAlarm(const Executor &executor)'],['../classagrpc_1_1_basic_alarm.html#a729216cc77694f2a829d6bade9e0c695',1,'agrpc::BasicAlarm::BasicAlarm(agrpc::GrpcContext &grpc_context)']]],
+ ['basicgrpcexecutor_1',['BasicGrpcExecutor',['../classagrpc_1_1_basic_grpc_executor.html',1,'agrpc::BasicGrpcExecutor< Allocator, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#af1f14c7ef02e44b330c245394dfebfa6',1,'agrpc::BasicGrpcExecutor::BasicGrpcExecutor()']]],
+ ['bidirectional_5fstreaming_2',['BIDIRECTIONAL_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaf92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216af92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING()']]]
+];
diff --git a/docs/search/all_10.html b/docs/search/all_10.html
new file mode 100644
index 00000000..a7c1f9c3
--- /dev/null
+++ b/docs/search/all_10.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_10.js b/docs/search/all_10.js
new file mode 100644
index 00000000..3e6e84ba
--- /dev/null
+++ b/docs/search/all_10.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['traits_0',['Traits',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a4d77bf4c5da303dcefa3425b4345ab17',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Traits()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a687d30c3fb955b30cd9faa415ac31304',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Traits()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4efa88efaadea9af27c4586f5388613d',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Traits()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a6497720ecb8d23c3b31fccee67f51a10',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Traits()']]],
+ ['type_1',['TYPE',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#aebbb738d826d482f508a01cd59fcd6b4',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#abb156a59d90304904f66098612ed7d75',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a4a74888f2f96f5bb8b13218373aaa80c',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::TYPE()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a361598fd336c38e5f282457263865229',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a0b85df8344986b161b6223aa80595a6c',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#abfcfaefdbf807291d880efafd9436d64',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#abbf4b20cf13937e19ad04e23a63571d8',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a6594380528bd6c1ad91f93e51c3db97a',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a159db6cacc50132ff946138097111d9a',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a54e3bd847fd4509a223660588413c69f',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a2600be35ff008044922937f2d8445cb4',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::TYPE()']]]
+];
diff --git a/docs/search/all_11.html b/docs/search/all_11.html
new file mode 100644
index 00000000..8f86146b
--- /dev/null
+++ b/docs/search/all_11.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_11.js b/docs/search/all_11.js
new file mode 100644
index 00000000..57c909c5
--- /dev/null
+++ b/docs/search/all_11.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['unary_0',['UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY()']]],
+ ['use_5fsender_1',['use_sender',['../namespaceagrpc.html#aa9c38be6a3d7d59a78007bc4fff311a4',1,'agrpc']]],
+ ['usesender_2',['UseSender',['../structagrpc_1_1_use_sender.html',1,'agrpc']]],
+ ['using_20asio_20io_5fcontext_3',['Using Asio io_context',['../md_doc_using_asio_io_context.html',1,'']]]
+];
diff --git a/docs/search/all_12.html b/docs/search/all_12.html
new file mode 100644
index 00000000..90b128ff
--- /dev/null
+++ b/docs/search/all_12.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_12.js b/docs/search/all_12.js
new file mode 100644
index 00000000..248a8fae
--- /dev/null
+++ b/docs/search/all_12.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['v3_20migration_20guide_0',['V3 migration guide',['../md_doc_v3_migration.html',1,'']]]
+];
diff --git a/docs/search/all_13.html b/docs/search/all_13.html
new file mode 100644
index 00000000..272d129d
--- /dev/null
+++ b/docs/search/all_13.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_13.js b/docs/search/all_13.js
new file mode 100644
index 00000000..12456c0d
--- /dev/null
+++ b/docs/search/all_13.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['wait_0',['wait',['../classagrpc_1_1_basic_alarm.html#af05358c4e51a6868b1e799dc9fe54373',1,'agrpc::BasicAlarm::wait(const Deadline &deadline, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) &'],['../classagrpc_1_1_basic_alarm.html#a8b5725715bacc956d37074047b2ebdc9',1,'agrpc::BasicAlarm::wait(const Deadline &deadline, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) &&'],['../classagrpc_1_1_waiter.html#aaa57cfd93bab00d3c6f1895228cb7940',1,'agrpc::Waiter::wait()']]],
+ ['wait_5ffor_5fdone_1',['wait_for_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a8ac96d7413a2fd8465136d9815acca24',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]],
+ ['waiter_2',['Waiter',['../classagrpc_1_1_waiter.html',1,'agrpc::Waiter< Signature, Executor >'],['../classagrpc_1_1_waiter.html#afd9e6e03d3e0f9da901a976b110a58a0',1,'agrpc::Waiter::Waiter()']]],
+ ['work_5ffinished_3',['work_finished',['../classagrpc_1_1_grpc_context.html#a9f89631518b2d38dbe0be11f7d5a4cc6',1,'agrpc::GrpcContext']]],
+ ['work_5fstarted_4',['work_started',['../classagrpc_1_1_grpc_context.html#ada19710c265c3a1e9cbffb696d079fbb',1,'agrpc::GrpcContext']]],
+ ['write_5',['write',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a0860b4d9ef3ed2f548bb1aac883195a6',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a64eaf90a6bc4d98763e1ee07d4bf6241',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#aa0453dfe0c8720b96ce308d988141862',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a2b03e7fa89f75423bdaff1a1b0215786',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#aa8ce64f00653fffa32d19c5ec76cda21',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a6079b187ace1b9552b22f2f8de746bb1',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a071f99daef79871be551b3f1ad98aa92',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a1fb8f06fde5c2a9818105841841aed83',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})']]],
+ ['write_5fand_5ffinish_6',['write_and_finish',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ade3cb297dd54774617cb4723e2626751',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a94623897422770328b39d926312ae16b',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#aa2a05dc89a2ff01b67cfe9c8fb0dbc60',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a085c57ac9331a4965d286418aec9b708',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})']]],
+ ['writes_5fdone_7',['writes_done',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a204916d3fd64acc0b8576224a2127950',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >']]]
+];
diff --git a/docs/search/all_14.html b/docs/search/all_14.html
new file mode 100644
index 00000000..291e0d95
--- /dev/null
+++ b/docs/search/all_14.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_14.js b/docs/search/all_14.js
new file mode 100644
index 00000000..111c8849
--- /dev/null
+++ b/docs/search/all_14.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['_7egrpccontext_0',['~GrpcContext',['../classagrpc_1_1_grpc_context.html#ad54076bc77ee6db3f167b2ad073db171',1,'agrpc::GrpcContext']]],
+ ['_7ewaiter_1',['~Waiter',['../classagrpc_1_1_waiter.html#aa5ee9bb346765753e2a1087b3e2e3a3f',1,'agrpc::Waiter']]]
+];
diff --git a/docs/search/all_2.html b/docs/search/all_2.html
new file mode 100644
index 00000000..98e648c9
--- /dev/null
+++ b/docs/search/all_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_2.js b/docs/search/all_2.js
new file mode 100644
index 00000000..c5341e9c
--- /dev/null
+++ b/docs/search/all_2.js
@@ -0,0 +1,31 @@
+var searchData=
+[
+ ['cancel_0',['cancel',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#ad8085a81b22c9af295c206f2f8c3af26',1,'agrpc::detail::ServerRPCContextBase::cancel()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#ade0c1cd5b69a524efbf92059fda88c1c',1,'agrpc::detail::ClientRPCContextBase::cancel()'],['../classagrpc_1_1_basic_alarm.html#a0b1a1d2755efc3e05862e597100af241',1,'agrpc::BasicAlarm::cancel()']]],
+ ['client_20rpc_20cheat_20sheet_1',['Client rpc cheat sheet',['../md_doc_client_rpc_cheat_sheet.html',1,'']]],
+ ['client_5fstreaming_2',['CLIENT_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING()']]],
+ ['clientrpc_3',['ClientRPC',['../classagrpc_1_1_client_r_p_c.html',1,'agrpc']]],
+ ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5fstreaming_2c_20executor_20_3e_4',['ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5funary_2c_20executor_20_3e_5',['ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncbidistreaming_2c_20executor_20_3e_6',['ClientRPC< PrepareAsyncBidiStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncclientstreaming_2c_20executor_20_3e_7',['ClientRPC< PrepareAsyncClientStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_8',['ClientRPC< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncunary_2c_20executor_20_3e_9',['ClientRPC< PrepareAsyncUnary, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpcbase_10',['ClientRPCBase',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail::ClientRPCBase< Responder, Executor >'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abbd58f85ff2547e2c592ca1aa7a07ced',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a80593b7c183335a02dc27fc10cb228fd',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a733bf7ee87338570e8e1d85fc47405a6',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abdc479925e4d0cf2ee10d116a89e9b66',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context)']]],
+ ['clientrpcbase_3c_20grpc_3a_3agenericclientasyncresponsereader_2c_20executor_20_3e_11',['ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20respondert_3c_20requestt_20_3e_2c_20executor_20_3e_12',['ClientRPCBase< ResponderT< RequestT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_13',['ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20respondert_3c_20responset_20_3e_2c_20executor_20_3e_14',['ClientRPCBase< ResponderT< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbidistreamingbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_15',['ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_16',['ClientRPCContextBase',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20grpc_3a_3agenericclientasyncresponsereader_20_3e_17',['ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20responder_3c_20response_20_3e_20_3e_18',['ClientRPCContextBase< Responder< Response > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20respondert_3c_20requestt_20_3e_20_3e_19',['ClientRPCContextBase< ResponderT< RequestT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_20_3e_20',['ClientRPCContextBase< ResponderT< RequestT, ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20respondert_3c_20responset_20_3e_20_3e_21',['ClientRPCContextBase< ResponderT< ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpcserverstreamingbase_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_22',['ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc::detail']]],
+ ['clientrpctype_23',['ClientRPCType',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36e',1,'agrpc']]],
+ ['clientrpcunarybase_3c_20prepareasyncunary_2c_20executor_20_3e_24',['ClientRPCUnaryBase< PrepareAsyncUnary, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc::detail']]],
+ ['cmake_20protobuf_20generate_25',['CMake protobuf generate',['../md_doc_cmake_protobuf_generate.html',1,'']]],
+ ['completion_20token_26',['Completion token',['../md_doc_completion_token.html',1,'']]],
+ ['context_27',['context',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#acb7e79a9709696570ffd10a42a3ed8a7',1,'agrpc::detail::ServerRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#aa0a8fef49ce793e900442392882a488d',1,'agrpc::detail::ServerRPCContextBase::context() const'],['../classagrpc_1_1_basic_grpc_executor.html#ae03cda766d1198fa9fa135fccc02232a',1,'agrpc::BasicGrpcExecutor::context()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a5602cbb3e4c886c89405ad0404626e64',1,'agrpc::detail::ClientRPCContextBase::context() const'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a056f94eadae189c43a6919d09e9f0031',1,'agrpc::detail::ClientRPCContextBase::context()']]]
+];
diff --git a/docs/search/all_3.html b/docs/search/all_3.html
new file mode 100644
index 00000000..f4e8da72
--- /dev/null
+++ b/docs/search/all_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_3.js b/docs/search/all_3.js
new file mode 100644
index 00000000..c648988c
--- /dev/null
+++ b/docs/search/all_3.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['defaultruntraits_0',['DefaultRunTraits',['../structagrpc_1_1_default_run_traits.html',1,'agrpc']]],
+ ['defer_1',['defer',['../classagrpc_1_1_basic_grpc_executor.html#a2c158f7d2dcad831b4930cf131e63f21',1,'agrpc::BasicGrpcExecutor']]],
+ ['dispatch_2',['dispatch',['../classagrpc_1_1_basic_grpc_executor.html#a97eda5ecec4b7066166e2f08eb1518be',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/all_4.html b/docs/search/all_4.html
new file mode 100644
index 00000000..678d3a2e
--- /dev/null
+++ b/docs/search/all_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_4.js b/docs/search/all_4.js
new file mode 100644
index 00000000..5ad36835
--- /dev/null
+++ b/docs/search/all_4.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['execute_0',['execute',['../classagrpc_1_1_basic_grpc_executor.html#a582b3391e4c1c383800284659707501c',1,'agrpc::BasicGrpcExecutor']]],
+ ['executor_5ftype_1',['executor_type',['../classagrpc_1_1_basic_alarm.html#a27f0463bacb42bca624f6c3a5dbc010f',1,'agrpc::BasicAlarm::executor_type()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a4bb04cc6b06744978476e7566c776c5c',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::executor_type()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a7b8c6b2cbac09f6f60e2495a13cffe75',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::executor_type()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#afe3aab926de22d76fdb5e0d347c5d8c4',1,'agrpc::detail::RPCExecutorBase::executor_type()'],['../classagrpc_1_1_grpc_context.html#a72c65827092d85b2ce6376524e35141c',1,'agrpc::GrpcContext::executor_type()'],['../classagrpc_1_1_waiter.html#af957414c01d35b84cef8a6f459cacf46',1,'agrpc::Waiter::executor_type()']]]
+];
diff --git a/docs/search/all_5.html b/docs/search/all_5.html
new file mode 100644
index 00000000..aa9af782
--- /dev/null
+++ b/docs/search/all_5.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_5.js b/docs/search/all_5.js
new file mode 100644
index 00000000..77e4862d
--- /dev/null
+++ b/docs/search/all_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['finish_0',['finish',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a1076681cc82ac9f1399a44ca5c104829',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a7ef8c8052151db5cc97b4f0647fae37c',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a17e27e02dd763d9c49fcce0e79cd30fc',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7c7e4b16b9196942f418e7d8bba2b559',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a64d693b556fb4825111b877f2ae99d96',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ae34431d70c1678e7647ea90aafa618c7',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8369e31122fc752a29ea0283ff9c6270',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ad695c5b87a302163d572e43d030f61fe',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a6424aaa40e1915542db44472cd9462d5',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish()']]],
+ ['finish_5fwith_5ferror_1',['finish_with_error',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a820d0aa060d3f205023e79b0e2a3c957',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish_with_error()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#aa9e0211be3ce7d7879e1f5f06b054076',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish_with_error()']]]
+];
diff --git a/docs/search/all_6.html b/docs/search/all_6.html
new file mode 100644
index 00000000..d3026a77
--- /dev/null
+++ b/docs/search/all_6.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_6.js b/docs/search/all_6.js
new file mode 100644
index 00000000..00dd1a2d
--- /dev/null
+++ b/docs/search/all_6.js
@@ -0,0 +1,16 @@
+var searchData=
+[
+ ['generic_0',['GENERIC',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216ac942dc2a9f958acddc67e11472d3ca0b',1,'agrpc']]],
+ ['generic_5fstreaming_1',['GENERIC_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eadf49273525fcac45f0fe3afd8c7a5454',1,'agrpc']]],
+ ['generic_5funary_2',['GENERIC_UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea2a1be6738d2573a3eecd21f772e11756',1,'agrpc']]],
+ ['genericserverrpc_3',['GenericServerRPC',['../namespaceagrpc.html#ad57f1d103299e55351ebbfce7653d535',1,'agrpc']]],
+ ['genericstreamingclientrpc_4',['GenericStreamingClientRPC',['../namespaceagrpc.html#a1ad87ac82291c4c9428970e18c59b6e8',1,'agrpc']]],
+ ['genericunaryclientrpc_5',['GenericUnaryClientRPC',['../namespaceagrpc.html#a566bc0105d5528ff6c8bec826429609c',1,'agrpc']]],
+ ['get_5fallocator_6',['get_allocator',['../classagrpc_1_1_grpc_context.html#ab38d929d30e72aface90b3d429727d33',1,'agrpc::GrpcContext::get_allocator()'],['../classagrpc_1_1_basic_grpc_executor.html#aead17d041c9509d3b5074375cd2eee6e',1,'agrpc::BasicGrpcExecutor::get_allocator()']]],
+ ['get_5fcompletion_5fqueue_7',['get_completion_queue',['../classagrpc_1_1_grpc_context.html#a897a9de9af8a2b81bbeef2f7fe0d0c63',1,'agrpc::GrpcContext']]],
+ ['get_5fexecutor_8',['get_executor',['../classagrpc_1_1_basic_alarm.html#ac364d2b1f047e589fc67c428c2c12947',1,'agrpc::BasicAlarm::get_executor()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac7d45c8fc3141d17881ac99ba0b53034',1,'agrpc::detail::RPCExecutorBase::get_executor()'],['../classagrpc_1_1_grpc_context.html#ab82f48f7e09542f242b683cda49aa6a9',1,'agrpc::GrpcContext::get_executor()']]],
+ ['get_5fscheduler_9',['get_scheduler',['../classagrpc_1_1_basic_alarm.html#ac4ab630cb9294c470fc6d1d3acf2aa5c',1,'agrpc::BasicAlarm::get_scheduler()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a',1,'agrpc::detail::RPCExecutorBase::get_scheduler()'],['../classagrpc_1_1_grpc_context.html#add171728b45fddd5740e4a3c9549bd3b',1,'agrpc::GrpcContext::get_scheduler() noexcept']]],
+ ['get_5fserver_5fcompletion_5fqueue_10',['get_server_completion_queue',['../classagrpc_1_1_grpc_context.html#a43be219d02581b5959b120bc9f869fce',1,'agrpc::GrpcContext']]],
+ ['grpccontext_11',['GrpcContext',['../classagrpc_1_1_grpc_context.html',1,'agrpc::GrpcContext'],['../classagrpc_1_1_grpc_context.html#a2d955d0f205cf08dd3d0b84867702c9d',1,'agrpc::GrpcContext::GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)'],['../classagrpc_1_1_grpc_context.html#aed9f6c8be4b05b6303abbbb2cde7ba76',1,'agrpc::GrpcContext::GrpcContext()=default']]],
+ ['grpcexecutor_12',['GrpcExecutor',['../namespaceagrpc.html#aebdc4a27625d789667c7d54985157d28',1,'agrpc']]]
+];
diff --git a/docs/search/all_7.html b/docs/search/all_7.html
new file mode 100644
index 00000000..b2ee042e
--- /dev/null
+++ b/docs/search/all_7.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_7.js b/docs/search/all_7.js
new file mode 100644
index 00000000..e0a2e32c
--- /dev/null
+++ b/docs/search/all_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['healthcheckservice_0',['HealthCheckService',['../classagrpc_1_1_health_check_service.html',1,'agrpc']]]
+];
diff --git a/docs/search/all_8.html b/docs/search/all_8.html
new file mode 100644
index 00000000..40a0b3f8
--- /dev/null
+++ b/docs/search/all_8.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_8.js b/docs/search/all_8.js
new file mode 100644
index 00000000..3bcb7113
--- /dev/null
+++ b/docs/search/all_8.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['initiate_0',['initiate',['../classagrpc_1_1_waiter.html#a50c80e064c5a1911d65d34e21f89df54',1,'agrpc::Waiter']]],
+ ['is_5fdone_1',['is_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a42255cc87cf854a4d2bc04315f7647d5',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]],
+ ['is_5fready_2',['is_ready',['../classagrpc_1_1_waiter.html#a1f2d63e9aaa91fe141e30cb606c41580',1,'agrpc::Waiter']]],
+ ['is_5fstopped_3',['is_stopped',['../classagrpc_1_1_grpc_context.html#af71bfc1a827acb00e275161f189ea151',1,'agrpc::GrpcContext::is_stopped()'],['../structagrpc_1_1_default_run_traits.html#a3af8439a70f60bd6536142948b28eb45',1,'agrpc::DefaultRunTraits::is_stopped()']]]
+];
diff --git a/docs/search/all_9.html b/docs/search/all_9.html
new file mode 100644
index 00000000..7c49144a
--- /dev/null
+++ b/docs/search/all_9.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_9.js b/docs/search/all_9.js
new file mode 100644
index 00000000..f72acce9
--- /dev/null
+++ b/docs/search/all_9.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['max_5flatency_0',['MAX_LATENCY',['../structagrpc_1_1_default_run_traits.html#ad40442c14867c39d6577a47cc0094c88',1,'agrpc::DefaultRunTraits']]],
+ ['method_5fname_1',['method_name',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adca43de2480909300ee83f4e7d0fefe8',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a22b858db8af03d35bef7b60f7f389950',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::method_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ad0fbe938aa2186379c0115248e530310',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a36e96b31ad3ef1098a4c8c23e9dd94b7',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a972d0b1fe31b202d0cb400f2822cbd55',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ab43a75cf63b59377a1a5c3e6620f8f62',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a12aba29fbd910034827e1c1fa63c98fb',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a91d048483317e75723c7edf507011245',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::method_name()']]]
+];
diff --git a/docs/search/all_a.html b/docs/search/all_a.html
new file mode 100644
index 00000000..fc9d79cd
--- /dev/null
+++ b/docs/search/all_a.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_a.js b/docs/search/all_a.js
new file mode 100644
index 00000000..e8b99ff5
--- /dev/null
+++ b/docs/search/all_a.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['notify_5fon_5fstate_5fchange_0',['notify_on_state_change',['../namespaceagrpc.html#a3f3ac92b1e47fe65b8bbef1b3af97c60',1,'agrpc']]],
+ ['notifyonstatechangefn_1',['NotifyOnStateChangeFn',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html',1,'agrpc::detail']]]
+];
diff --git a/docs/search/all_b.html b/docs/search/all_b.html
new file mode 100644
index 00000000..dafb1fad
--- /dev/null
+++ b/docs/search/all_b.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_b.js b/docs/search/all_b.js
new file mode 100644
index 00000000..817a95fc
--- /dev/null
+++ b/docs/search/all_b.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['on_5fwork_5ffinished_0',['on_work_finished',['../classagrpc_1_1_basic_grpc_executor.html#a727afeb6438fe94ec105085ee9e00d56',1,'agrpc::BasicGrpcExecutor']]],
+ ['on_5fwork_5fstarted_1',['on_work_started',['../classagrpc_1_1_basic_grpc_executor.html#ab2333c1d9f61b6469aeb6c84898e9a36',1,'agrpc::BasicGrpcExecutor']]],
+ ['operator_21_3d_2',['operator!=',['../classagrpc_1_1_basic_grpc_executor.html#a59d940966a2cbccb0905db9c4fe23e09',1,'agrpc::BasicGrpcExecutor']]],
+ ['operator_28_29_3',['operator()',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html#a5c02ddea2000e4ce4c72bad24eafe221',1,'agrpc::detail::NotifyOnStateChangeFn::operator()()'],['../structagrpc_1_1detail_1_1_read_fn.html#af075920cd33d170393adeed3abb9c622',1,'agrpc::detail::ReadFn::operator()(agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))'],['../structagrpc_1_1detail_1_1_read_fn.html#aa2bbf01f6bdf35bff88f499b15be0d45',1,'agrpc::detail::ReadFn::operator()(agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))']]],
+ ['operator_2a_4',['operator*',['../classagrpc_1_1_server_r_p_c_ptr.html#a96ce1bc483099cd80a37ead302ee76c8',1,'agrpc::ServerRPCPtr::operator*() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a662d487613723349a8cc1ad7d250482d',1,'agrpc::ServerRPCPtr::operator*() const noexcept']]],
+ ['operator_2d_3e_5',['operator->',['../classagrpc_1_1_server_r_p_c_ptr.html#afb74f4ac6254fbaddbea6a1d45b2cc71',1,'agrpc::ServerRPCPtr::operator->() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#abb8d870586f33095b19a9ac145476bc0',1,'agrpc::ServerRPCPtr::operator->() const noexcept']]],
+ ['operator_3d_3d_6',['operator==',['../classagrpc_1_1_basic_grpc_executor.html#a47785162ab9282e1afe21ca8617142eb',1,'agrpc::BasicGrpcExecutor']]],
+ ['other_7',['other',['../structagrpc_1_1_waiter_1_1rebind__executor.html#a16a3287aad9cb67fb0614d84184938ca',1,'agrpc::Waiter::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html#a88bd027aaa4c3eeec7b1a34baa4beca9',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a8f560c37749519750a3fb26e8b245921',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a673c4c3fbda3538d531d8daea9bf586a',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a3f50e304010e7456c2327c851e1aba92',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a0f6b0162569c1c628129976c0bf7bfd4',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html#ab98619c4f65e33caceb25669bc87dec2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html#a248da52a2c8146650d3ebbe6bfc5f92e',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor::other()'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html#a3e3adceefc89a3dc2b981dbfa1d79265',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html#a0edf370762953c8f0f53eb49684b58d5',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html#ab13e6fed14971fffed826aa80a635ba2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor::other()'],['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html#a3082097ad16bc7190026b39ed646c966',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor::other()']]]
+];
diff --git a/docs/search/all_c.html b/docs/search/all_c.html
new file mode 100644
index 00000000..9df619d2
--- /dev/null
+++ b/docs/search/all_c.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_c.js b/docs/search/all_c.js
new file mode 100644
index 00000000..8abc98e4
--- /dev/null
+++ b/docs/search/all_c.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['poll_0',['poll',['../classagrpc_1_1_grpc_context.html#a4eb77d4c7fe553bc7b8aa7bc0c73fc22',1,'agrpc::GrpcContext::poll()'],['../structagrpc_1_1_default_run_traits.html#a158e1228fe8b77b46fceb4a76d3d47f6',1,'agrpc::DefaultRunTraits::poll()']]],
+ ['poll_5fcompletion_5fqueue_1',['poll_completion_queue',['../classagrpc_1_1_grpc_context.html#af35c5d430df1d778320a2fe51ec40102',1,'agrpc::GrpcContext']]],
+ ['post_2',['post',['../classagrpc_1_1_basic_grpc_executor.html#aa55121002e69f6da4d193e2438556519',1,'agrpc::BasicGrpcExecutor']]],
+ ['prefer_3',['prefer',['../classagrpc_1_1_basic_grpc_executor.html#ada9763f836d7e1af44a67ce09c8d6522',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::fork_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#af81aa8e1195243f012aeab6f83653015',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::continuation_t) const noexcept']]],
+ ['process_5fgrpc_5ftag_4',['process_grpc_tag',['../namespaceagrpc.html#accc81e3886098f4472dbe3e528594e3e',1,'agrpc']]],
+ ['ptr_5',['Ptr',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ad342db335d28b900bd34f9176ecd7375',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a932e38d5ef3fa85fe3671981b0baf157',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a558850727f602f2ffeee6fbdac1dfe67',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a482df6736133eb6cfabf930cc8e7db49',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a45a5f939ccf42750b5a63d9133211d08',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::Ptr()']]]
+];
diff --git a/docs/search/all_d.html b/docs/search/all_d.html
new file mode 100644
index 00000000..95d8eec5
--- /dev/null
+++ b/docs/search/all_d.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_d.js b/docs/search/all_d.js
new file mode 100644
index 00000000..7c361bad
--- /dev/null
+++ b/docs/search/all_d.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['query_0',['query',['../classagrpc_1_1_basic_grpc_executor.html#a6f12911ba642e59b224357f68a2abb51',1,'agrpc::BasicGrpcExecutor::query(asio::execution::blocking_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#ab26ea9b4a7825f78147c43ea084b2ff3',1,'agrpc::BasicGrpcExecutor::query(asio::execution::mapping_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a41de4c176cc36e18949f590323cfbae1',1,'agrpc::BasicGrpcExecutor::query(asio::execution::context_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a93ee7e38b61436d95c48f32ea978967d',1,'agrpc::BasicGrpcExecutor::query(asio::execution::relationship_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a562182f5842ccd6c52e5cf6b8c4a24d0',1,'agrpc::BasicGrpcExecutor::query(asio::execution::outstanding_work_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a3864da8461ae1579a14bb20af274d8c5',1,'agrpc::BasicGrpcExecutor::query(asio::execution::allocator_t< OtherAllocator >) const noexcept']]]
+];
diff --git a/docs/search/all_e.html b/docs/search/all_e.html
new file mode 100644
index 00000000..a54e1206
--- /dev/null
+++ b/docs/search/all_e.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_e.js b/docs/search/all_e.js
new file mode 100644
index 00000000..d2711cee
--- /dev/null
+++ b/docs/search/all_e.js
@@ -0,0 +1,24 @@
+var searchData=
+[
+ ['read_0',['read',['../namespaceagrpc.html#a685510388ab87c9a90c44f880e9de9cd',1,'agrpc::read()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a90161838be17d1d91afe8ca410e60241',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac96720ba529e36c8112a2354b7266a25',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::read()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a4d6efde195733c42e9aa107b3a7a0ff5',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a20ae74c290f3783780b9b7cc37d5b64f',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::read()']]],
+ ['read_5finitial_5fmetadata_1',['read_initial_metadata',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a1f3342f57017775ec75f7f3317949b05',1,'agrpc::detail::ClientRPCBase::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a8ef879de9cfcb6b6a09d4ca01343ceff',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a1d1304b708bdc368ff7f1626942f4745',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::read_initial_metadata()']]],
+ ['readfn_2',['ReadFn',['../structagrpc_1_1detail_1_1_read_fn.html',1,'agrpc::detail']]],
+ ['rebind_5fexecutor_3',['rebind_executor',['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_waiter_1_1rebind__executor.html',1,'agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >']]],
+ ['register_5fawaitable_5frpc_5fhandler_4',['register_awaitable_rpc_handler',['../namespaceagrpc.html#a78ac79843f9432d01bb150416ade53b7',1,'agrpc::register_awaitable_rpc_handler(agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)'],['../namespaceagrpc.html#a2f1dcfb4b6d0111e640416b1d42bee3d',1,'agrpc::register_awaitable_rpc_handler(const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)']]],
+ ['register_5fcallback_5frpc_5fhandler_5',['register_callback_rpc_handler',['../namespaceagrpc.html#a278fe747978485cb9117fbd94cad5f3b',1,'agrpc::register_callback_rpc_handler(agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)'],['../namespaceagrpc.html#a7226596382b2075d1634468c504f39a9',1,'agrpc::register_callback_rpc_handler(const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)']]],
+ ['register_5fsender_5frpc_5fhandler_6',['register_sender_rpc_handler',['../namespaceagrpc.html#a87283536759419ab67987115551675c2',1,'agrpc']]],
+ ['register_5fyield_5frpc_5fhandler_7',['register_yield_rpc_handler',['../namespaceagrpc.html#a5799e0d272e088ee755ebc3b54f6bde1',1,'agrpc::register_yield_rpc_handler(const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)'],['../namespaceagrpc.html#aa099d7d7ee8bf6ed6b57bd413027f391',1,'agrpc::register_yield_rpc_handler(agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]],
+ ['request_8',['Request',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#af85c5d0f47f0b6e6244efd65a2dedbd6',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Request()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4890e4677616bb468f2254fc2e33d626',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Request()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8574c668f8b1c3ea7af13fcbfe5c6eed',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Request()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a35d5a54c0d5d64aabf433328327646f8',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Request()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ab8fe0d6e998dbb9c3dac45bb3ebea1fd',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Request()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ab17fb315d9316707b442296f9096519c',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::Request()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a3cbcb0c2a8dea17a5f8e2031b5f0e135',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Request()']]],
+ ['request_9',['request',['../classagrpc_1_1_server_r_p_c_ptr.html#a7fc9aa2fff351417c0e2ba60c5b654a7',1,'agrpc::ServerRPCPtr::request() const noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a75171d6a69414d78fd8080a762831ec0',1,'agrpc::ServerRPCPtr::request() noexcept'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a27772b578b3e57ed17ad9161521046dd',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::request(const Executor &executor, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a5554e940876d59b9dd500983d350e1c9',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::request(agrpc::GrpcContext &grpc_context, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ad7823c6593cb519dd2c50b884d7e71b6',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ae398992301861c5e4ade311acd658f43',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})']]],
+ ['request_10',['Request',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a313126cc0eadd7c4dbbfc8aa8a45bc10',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Request()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aa4e18c75b6fb163a780408e2a118ec1d',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Request()']]],
+ ['require_11',['require',['../classagrpc_1_1_basic_grpc_executor.html#a127e4d664d638ed7c6faf8e011108072',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< void >) const noexcept -> agrpc::BasicGrpcExecutor< std::allocator< void >, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#a92d82315cfce4d130c7b001a9a2f86e3',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< OtherAllocator > other_allocator) const noexcept -> agrpc::BasicGrpcExecutor< OtherAllocator, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#a28a91c9fa313c1e764f036c4484611b2',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::untracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, false)>'],['../classagrpc_1_1_basic_grpc_executor.html#ab78813d4863b8e8175875dc9508db97f',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::tracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#ad7c8d60173fb17ccb20df74eba49c23a',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::never_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#a9fc995acce9263dbce34dcdfc76bcb75',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::possibly_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, false)>']]],
+ ['reset_12',['reset',['../classagrpc_1_1_grpc_context.html#a9da2b2b94e92a9d46e1309209002784b',1,'agrpc::GrpcContext']]],
+ ['response_13',['Response',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ab8caf2b42da62017857e5f8d3b830353',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Response()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afd405ca5e8fb6126941bef62c78aa0de',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Response()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a42c626f687ccf2ac90c4f97c1428ba05',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Response()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a3729ec552aaf715925391a9596cc5b15',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Response()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7c7485017b9601a6070a8df3999b2ae',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Response()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a84678c4ada6372cefea2ea32aeb74fe9',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Response()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a09949deac664f28273aa1b4f806759b1',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::Response()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7f04ffe67672564e8fc084cea8186e9d',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Response()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aad54ab42b4d0f7ec548fe527d7c4a9e5',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Response()']]],
+ ['rpcexecutorbase_14',['RPCExecutorBase',['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html',1,'agrpc::detail']]],
+ ['run_15',['run',['../classagrpc_1_1_grpc_context.html#acb1dae170b054aba4c83e266c456fee0',1,'agrpc::GrpcContext::run()'],['../namespaceagrpc.html#a075e15728ee3eac5531f3202cfaf6c38',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)'],['../namespaceagrpc.html#ab52a5b6f6ce90d1bc9faa5baa96a39fa',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)']]],
+ ['run_5fcompletion_5fqueue_16',['run_completion_queue',['../classagrpc_1_1_grpc_context.html#a627dcc6bc3401d204d976b6fea6e00a3',1,'agrpc::GrpcContext::run_completion_queue()'],['../namespaceagrpc.html#a7c08e9c2d581c89024ba71489fc5aaf3',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a32f6562885c161c318d08f83e48468e8',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]],
+ ['run_5ffor_17',['run_for',['../structagrpc_1_1_default_run_traits.html#a8452413588990f52725f10b20a2ebadd',1,'agrpc::DefaultRunTraits']]],
+ ['run_5funtil_18',['run_until',['../classagrpc_1_1_grpc_context.html#af6615f2abd46956145dcfe88e69f4004',1,'agrpc::GrpcContext']]],
+ ['run_5fwhile_19',['run_while',['../classagrpc_1_1_grpc_context.html#a21dc3e81f8d5c11969add93a7a24e363',1,'agrpc::GrpcContext']]],
+ ['running_5fin_5fthis_5fthread_20',['running_in_this_thread',['../classagrpc_1_1_basic_grpc_executor.html#aa88fb5798dd945616262dc58258f48ec',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/all_f.html b/docs/search/all_f.html
new file mode 100644
index 00000000..8d0aed39
--- /dev/null
+++ b/docs/search/all_f.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/all_f.js b/docs/search/all_f.js
new file mode 100644
index 00000000..5736b91b
--- /dev/null
+++ b/docs/search/all_f.js
@@ -0,0 +1,42 @@
+var searchData=
+[
+ ['schedule_0',['schedule',['../classagrpc_1_1_basic_grpc_executor.html#ade38414f479671b271f191f3ee458408',1,'agrpc::BasicGrpcExecutor']]],
+ ['send_5finitial_5fmetadata_1',['send_initial_metadata',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html#a2476f3477572b896d89f6ac21cb59928',1,'agrpc::detail::ServerRPCBase']]],
+ ['server_20rpc_20cheat_20sheet_2',['Server rpc cheat sheet',['../md_doc_server_rpc_cheat_sheet.html',1,'']]],
+ ['server_5fstreaming_3',['SERVER_STREAMING',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216aeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING()'],['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING()']]],
+ ['serverrpc_4',['ServerRPC',['../classagrpc_1_1_server_r_p_c.html',1,'agrpc::ServerRPC< RequestRPC, Traits, Executor >'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a5b78d65f5628c9eaf4a521399a7ab0ba',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a15af4c2269b9cfd9416855cc5fe755a2',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af44544ec93a0e434636e08f9b15e0517',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a698de8d72aa58e56b689869cb36906e9',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a86a399b203ead3c545179330c6c88c5d',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_ptr.html#a87d2fc4455382fefafc93963a0d182b5',1,'agrpc::ServerRPCPtr::ServerRPC()']]],
+ ['serverrpc_3c_20agrpc_3a_3aserverrpctype_3a_3ageneric_2c_20traitst_2c_20executor_20_3e_5',['ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestbidistreaming_2c_20traitst_2c_20executor_20_3e_6',['ServerRPC< RequestBidiStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestclientstreaming_2c_20traitst_2c_20executor_20_3e_7',['ServerRPC< RequestClientStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestserverstreaming_2c_20traitst_2c_20executor_20_3e_8',['ServerRPC< RequestServerStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestunary_2c_20traitst_2c_20executor_20_3e_9',['ServerRPC< RequestUnary, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpcbase_10',['ServerRPCBase',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_11',['ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_12',['ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_13',['ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_14',['ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbidistreamingbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_15',['ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_16',['ServerRPCContextBase',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_20_3e_17',['ServerRPCContextBase< grpc::ServerAsyncReader< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_20_3e_18',['ServerRPCContextBase< grpc::ServerAsyncResponseWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_20_3e_19',['ServerRPCContextBase< grpc::ServerAsyncWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_20_3e_20_3e_20',['ServerRPCContextBase< Responder< Response, Request > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_2e_2e_2e_20_3e_20_3e_21',['ServerRPCContextBase< Responder< Response, Request... > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_20_3e_22',['ServerRPCContextBase< ResponderT< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_23',['ServerRPCNotifyWhenDoneMixin',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_24',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20executor_20_3e_25',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20executor_20_3e_26',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20responder_2c_20executor_20_3e_27',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_28',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcptr_29',['ServerRPCPtr',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc::ServerRPCPtr< ServerRPCT >'],['../classagrpc_1_1_server_r_p_c_ptr.html#af9bd970c0f19dbee72d07924a733ef08',1,'agrpc::ServerRPCPtr::ServerRPCPtr()']]],
+ ['serverrpcptr_3c_20serverrpc_20_3e_30',['ServerRPCPtr< ServerRPC >',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc']]],
+ ['serverrpctype_31',['ServerRPCType',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216',1,'agrpc']]],
+ ['service_5fname_32',['service_name',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aa7bb65e6fc755d0f701fefd18fc59ba7',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::service_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0d95b3e778fd04576727a180ced2ad49',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ae2e44ea56d1c15036646e906939fbb11',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::service_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#aeb82d28bcdb03ae6f757fe3574124b3f',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a07458f85b4281c361b16f652b6cda493',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#acd6a9daff41e97b6fa89e3d3960004cf',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a6057033b1bfcbc06250a742229fe2357',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ab0c6dea77cb83891df6a5be872075877',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::service_name()']]],
+ ['setservingstatus_33',['SetServingStatus',['../classagrpc_1_1_health_check_service.html#a326d63fafa352ab8b2457545c46c5a34',1,'agrpc::HealthCheckService::SetServingStatus(bool serving)'],['../classagrpc_1_1_health_check_service.html#a38397dcd756e5356973bddabe68b8ef7',1,'agrpc::HealthCheckService::SetServingStatus(const std::string &service_name, bool serving)']]],
+ ['shutdown_34',['Shutdown',['../classagrpc_1_1_health_check_service.html#aa48421a22334257415189455ce4200b7',1,'agrpc::HealthCheckService']]],
+ ['start_35',['start',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#acf13689d656fb3eedc0db0a98a08a810',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::start()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0cc8fb2b4fdbc30dfaa214b7faa16828',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a1ec544b72d885bd8997f071c48136862',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad92bc0478a21853cb09f43a3bd4a68f2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a22a09f1b5b1b9de7a89eaa84f33b0660',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#adf269b5e53116a877565828f37bd4d5e',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::start()']]],
+ ['start_5fhealth_5fcheck_5fservice_36',['start_health_check_service',['../classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668',1,'agrpc::HealthCheckService::start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f',1,'agrpc::HealthCheckService::start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)']]],
+ ['stop_37',['stop',['../classagrpc_1_1_grpc_context.html#aee29d403f03ef487d22efdf2079c46bc',1,'agrpc::GrpcContext']]],
+ ['stub_38',['Stub',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ae494858ba1fb77cc03a473d475f89fec',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a8cec6132a63b51481847db130de97d12',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aaa5fac7ed627fe95e1200d25633884b1',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Stub()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac81a92f73b6032ab5163473f8af67ec8',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a4ad1384caca1951c4d7b4b68b1387bb9',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad20cfa0db0604367ac06d132cc5568cc',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::Stub()']]]
+];
diff --git a/docs/search/classes_0.html b/docs/search/classes_0.html
new file mode 100644
index 00000000..9d4f871a
--- /dev/null
+++ b/docs/search/classes_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_0.js b/docs/search/classes_0.js
new file mode 100644
index 00000000..24ce3a76
--- /dev/null
+++ b/docs/search/classes_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['basicalarm_0',['BasicAlarm',['../classagrpc_1_1_basic_alarm.html',1,'agrpc']]],
+ ['basicgrpcexecutor_1',['BasicGrpcExecutor',['../classagrpc_1_1_basic_grpc_executor.html',1,'agrpc']]]
+];
diff --git a/docs/search/classes_1.html b/docs/search/classes_1.html
new file mode 100644
index 00000000..0557f9fb
--- /dev/null
+++ b/docs/search/classes_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_1.js b/docs/search/classes_1.js
new file mode 100644
index 00000000..603753f6
--- /dev/null
+++ b/docs/search/classes_1.js
@@ -0,0 +1,24 @@
+var searchData=
+[
+ ['clientrpc_0',['ClientRPC',['../classagrpc_1_1_client_r_p_c.html',1,'agrpc']]],
+ ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5fstreaming_2c_20executor_20_3e_1',['ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20agrpc_3a_3aclientrpctype_3a_3ageneric_5funary_2c_20executor_20_3e_2',['ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncbidistreaming_2c_20executor_20_3e_3',['ClientRPC< PrepareAsyncBidiStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncclientstreaming_2c_20executor_20_3e_4',['ClientRPC< PrepareAsyncClientStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_5',['ClientRPC< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpc_3c_20prepareasyncunary_2c_20executor_20_3e_6',['ClientRPC< PrepareAsyncUnary, Executor >',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc']]],
+ ['clientrpcbase_7',['ClientRPCBase',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20grpc_3a_3agenericclientasyncresponsereader_2c_20executor_20_3e_8',['ClientRPCBase< grpc::GenericClientAsyncResponseReader, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20respondert_3c_20requestt_20_3e_2c_20executor_20_3e_9',['ClientRPCBase< ResponderT< RequestT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_10',['ClientRPCBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbase_3c_20respondert_3c_20responset_20_3e_2c_20executor_20_3e_11',['ClientRPCBase< ResponderT< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html',1,'agrpc::detail']]],
+ ['clientrpcbidistreamingbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_2c_20executor_20_3e_12',['ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_13',['ClientRPCContextBase',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20grpc_3a_3agenericclientasyncresponsereader_20_3e_14',['ClientRPCContextBase< grpc::GenericClientAsyncResponseReader >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20responder_3c_20response_20_3e_20_3e_15',['ClientRPCContextBase< Responder< Response > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20respondert_3c_20requestt_20_3e_20_3e_16',['ClientRPCContextBase< ResponderT< RequestT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20respondert_3c_20requestt_2c_20responset_20_3e_20_3e_17',['ClientRPCContextBase< ResponderT< RequestT, ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpccontextbase_3c_20respondert_3c_20responset_20_3e_20_3e_18',['ClientRPCContextBase< ResponderT< ResponseT > >',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['clientrpcserverstreamingbase_3c_20prepareasyncserverstreaming_2c_20executor_20_3e_19',['ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html',1,'agrpc::detail']]],
+ ['clientrpcunarybase_3c_20prepareasyncunary_2c_20executor_20_3e_20',['ClientRPCUnaryBase< PrepareAsyncUnary, Executor >',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html',1,'agrpc::detail']]]
+];
diff --git a/docs/search/classes_2.html b/docs/search/classes_2.html
new file mode 100644
index 00000000..fa208615
--- /dev/null
+++ b/docs/search/classes_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_2.js b/docs/search/classes_2.js
new file mode 100644
index 00000000..ec276921
--- /dev/null
+++ b/docs/search/classes_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['defaultruntraits_0',['DefaultRunTraits',['../structagrpc_1_1_default_run_traits.html',1,'agrpc']]]
+];
diff --git a/docs/search/classes_3.html b/docs/search/classes_3.html
new file mode 100644
index 00000000..98fbc876
--- /dev/null
+++ b/docs/search/classes_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_3.js b/docs/search/classes_3.js
new file mode 100644
index 00000000..80f25877
--- /dev/null
+++ b/docs/search/classes_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['grpccontext_0',['GrpcContext',['../classagrpc_1_1_grpc_context.html',1,'agrpc']]]
+];
diff --git a/docs/search/classes_4.html b/docs/search/classes_4.html
new file mode 100644
index 00000000..3b6c51eb
--- /dev/null
+++ b/docs/search/classes_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_4.js b/docs/search/classes_4.js
new file mode 100644
index 00000000..e0a2e32c
--- /dev/null
+++ b/docs/search/classes_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['healthcheckservice_0',['HealthCheckService',['../classagrpc_1_1_health_check_service.html',1,'agrpc']]]
+];
diff --git a/docs/search/classes_5.html b/docs/search/classes_5.html
new file mode 100644
index 00000000..51c2b307
--- /dev/null
+++ b/docs/search/classes_5.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_5.js b/docs/search/classes_5.js
new file mode 100644
index 00000000..8d730319
--- /dev/null
+++ b/docs/search/classes_5.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['notifyonstatechangefn_0',['NotifyOnStateChangeFn',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html',1,'agrpc::detail']]]
+];
diff --git a/docs/search/classes_6.html b/docs/search/classes_6.html
new file mode 100644
index 00000000..431fb052
--- /dev/null
+++ b/docs/search/classes_6.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_6.js b/docs/search/classes_6.js
new file mode 100644
index 00000000..fa73f969
--- /dev/null
+++ b/docs/search/classes_6.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['readfn_0',['ReadFn',['../structagrpc_1_1detail_1_1_read_fn.html',1,'agrpc::detail']]],
+ ['rebind_5fexecutor_1',['rebind_executor',['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >'],['../structagrpc_1_1_waiter_1_1rebind__executor.html',1,'agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >']]],
+ ['rpcexecutorbase_2',['RPCExecutorBase',['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html',1,'agrpc::detail']]]
+];
diff --git a/docs/search/classes_7.html b/docs/search/classes_7.html
new file mode 100644
index 00000000..0c76bf53
--- /dev/null
+++ b/docs/search/classes_7.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_7.js b/docs/search/classes_7.js
new file mode 100644
index 00000000..d0e304f0
--- /dev/null
+++ b/docs/search/classes_7.js
@@ -0,0 +1,30 @@
+var searchData=
+[
+ ['serverrpc_0',['ServerRPC',['../classagrpc_1_1_server_r_p_c.html',1,'agrpc']]],
+ ['serverrpc_3c_20agrpc_3a_3aserverrpctype_3a_3ageneric_2c_20traitst_2c_20executor_20_3e_1',['ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestbidistreaming_2c_20traitst_2c_20executor_20_3e_2',['ServerRPC< RequestBidiStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestclientstreaming_2c_20traitst_2c_20executor_20_3e_3',['ServerRPC< RequestClientStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestserverstreaming_2c_20traitst_2c_20executor_20_3e_4',['ServerRPC< RequestServerStreaming, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpc_3c_20requestunary_2c_20traitst_2c_20executor_20_3e_5',['ServerRPC< RequestUnary, TraitsT, Executor >',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html',1,'agrpc']]],
+ ['serverrpcbase_6',['ServerRPCBase',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_7',['ServerRPCBase< grpc::ServerAsyncReader< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_8',['ServerRPCBase< grpc::ServerAsyncResponseWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20traitst_2c_20executor_20_3e_9',['ServerRPCBase< grpc::ServerAsyncWriter< ResponseT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_10',['ServerRPCBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html',1,'agrpc::detail']]],
+ ['serverrpcbidistreamingbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20traitst_2c_20executor_20_3e_11',['ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_12',['ServerRPCContextBase',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_20_3e_13',['ServerRPCContextBase< grpc::ServerAsyncReader< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_20_3e_14',['ServerRPCContextBase< grpc::ServerAsyncResponseWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_20_3e_15',['ServerRPCContextBase< grpc::ServerAsyncWriter< ResponseT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_20_3e_20_3e_16',['ServerRPCContextBase< Responder< Response, Request > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20responder_3c_20response_2c_20request_2e_2e_2e_20_3e_20_3e_17',['ServerRPCContextBase< Responder< Response, Request... > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpccontextbase_3c_20respondert_3c_20responset_2c_20requestt_20_3e_20_3e_18',['ServerRPCContextBase< ResponderT< ResponseT, RequestT > >',['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_19',['ServerRPCNotifyWhenDoneMixin',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncreader_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_20',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, grpc::ServerAsyncReader< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncresponsewriter_3c_20responset_20_3e_2c_20executor_20_3e_21',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, grpc::ServerAsyncResponseWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20grpc_3a_3aserverasyncwriter_3c_20responset_20_3e_2c_20executor_20_3e_22',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, grpc::ServerAsyncWriter< ResponseT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20responder_2c_20executor_20_3e_23',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, Responder, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcnotifywhendonemixin_3c_20traits_3a_3anotify_5fwhen_5fdone_2c_20respondert_3c_20responset_2c_20requestt_20_3e_2c_20executor_20_3e_24',['ServerRPCNotifyWhenDoneMixin< Traits::NOTIFY_WHEN_DONE, ResponderT< ResponseT, RequestT >, Executor >',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html',1,'agrpc::detail']]],
+ ['serverrpcptr_25',['ServerRPCPtr',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc']]],
+ ['serverrpcptr_3c_20serverrpc_20_3e_26',['ServerRPCPtr< ServerRPC >',['../classagrpc_1_1_server_r_p_c_ptr.html',1,'agrpc']]]
+];
diff --git a/docs/search/classes_8.html b/docs/search/classes_8.html
new file mode 100644
index 00000000..5a392ee0
--- /dev/null
+++ b/docs/search/classes_8.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_8.js b/docs/search/classes_8.js
new file mode 100644
index 00000000..5c3591e1
--- /dev/null
+++ b/docs/search/classes_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['usesender_0',['UseSender',['../structagrpc_1_1_use_sender.html',1,'agrpc']]]
+];
diff --git a/docs/search/classes_9.html b/docs/search/classes_9.html
new file mode 100644
index 00000000..72fb6498
--- /dev/null
+++ b/docs/search/classes_9.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/classes_9.js b/docs/search/classes_9.js
new file mode 100644
index 00000000..7116e163
--- /dev/null
+++ b/docs/search/classes_9.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['waiter_0',['Waiter',['../classagrpc_1_1_waiter.html',1,'agrpc']]]
+];
diff --git a/docs/search/close.svg b/docs/search/close.svg
new file mode 100644
index 00000000..a933eea1
--- /dev/null
+++ b/docs/search/close.svg
@@ -0,0 +1,31 @@
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
diff --git a/docs/search/enums_0.html b/docs/search/enums_0.html
new file mode 100644
index 00000000..ec25efde
--- /dev/null
+++ b/docs/search/enums_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enums_0.js b/docs/search/enums_0.js
new file mode 100644
index 00000000..e43cfcdf
--- /dev/null
+++ b/docs/search/enums_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['clientrpctype_0',['ClientRPCType',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36e',1,'agrpc']]]
+];
diff --git a/docs/search/enums_1.html b/docs/search/enums_1.html
new file mode 100644
index 00000000..cc99a33b
--- /dev/null
+++ b/docs/search/enums_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enums_1.js b/docs/search/enums_1.js
new file mode 100644
index 00000000..619ac7f1
--- /dev/null
+++ b/docs/search/enums_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['serverrpctype_0',['ServerRPCType',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216',1,'agrpc']]]
+];
diff --git a/docs/search/enumvalues_0.html b/docs/search/enumvalues_0.html
new file mode 100644
index 00000000..71e9b7c9
--- /dev/null
+++ b/docs/search/enumvalues_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enumvalues_0.js b/docs/search/enumvalues_0.js
new file mode 100644
index 00000000..464355e8
--- /dev/null
+++ b/docs/search/enumvalues_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['bidirectional_5fstreaming_0',['BIDIRECTIONAL_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaf92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216af92e0d805b776fa75c63d16707f99111',1,'agrpc::BIDIRECTIONAL_STREAMING()']]]
+];
diff --git a/docs/search/enumvalues_1.html b/docs/search/enumvalues_1.html
new file mode 100644
index 00000000..595aa8cb
--- /dev/null
+++ b/docs/search/enumvalues_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enumvalues_1.js b/docs/search/enumvalues_1.js
new file mode 100644
index 00000000..2f1836c3
--- /dev/null
+++ b/docs/search/enumvalues_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['client_5fstreaming_0',['CLIENT_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a1350d72153c5dd5e5cbaffc22da1cfdc',1,'agrpc::CLIENT_STREAMING()']]]
+];
diff --git a/docs/search/enumvalues_2.html b/docs/search/enumvalues_2.html
new file mode 100644
index 00000000..53435046
--- /dev/null
+++ b/docs/search/enumvalues_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enumvalues_2.js b/docs/search/enumvalues_2.js
new file mode 100644
index 00000000..3ad6004d
--- /dev/null
+++ b/docs/search/enumvalues_2.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['generic_0',['GENERIC',['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216ac942dc2a9f958acddc67e11472d3ca0b',1,'agrpc']]],
+ ['generic_5fstreaming_1',['GENERIC_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eadf49273525fcac45f0fe3afd8c7a5454',1,'agrpc']]],
+ ['generic_5funary_2',['GENERIC_UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea2a1be6738d2573a3eecd21f772e11756',1,'agrpc']]]
+];
diff --git a/docs/search/enumvalues_3.html b/docs/search/enumvalues_3.html
new file mode 100644
index 00000000..5a7d0de6
--- /dev/null
+++ b/docs/search/enumvalues_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enumvalues_3.js b/docs/search/enumvalues_3.js
new file mode 100644
index 00000000..c376a243
--- /dev/null
+++ b/docs/search/enumvalues_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['server_5fstreaming_0',['SERVER_STREAMING',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36eaeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216aeb1bcff53747fbcc6c2ded49b5724257',1,'agrpc::SERVER_STREAMING()']]]
+];
diff --git a/docs/search/enumvalues_4.html b/docs/search/enumvalues_4.html
new file mode 100644
index 00000000..4b4a7635
--- /dev/null
+++ b/docs/search/enumvalues_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/enumvalues_4.js b/docs/search/enumvalues_4.js
new file mode 100644
index 00000000..3a929bfa
--- /dev/null
+++ b/docs/search/enumvalues_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['unary_0',['UNARY',['../namespaceagrpc.html#a42c57be5049212df6909b6da0c60d36ea8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY()'],['../namespaceagrpc.html#a819aed2748e29d498c18adfcc5855216a8ca44f46ef1f04b2113678603c3800b4',1,'agrpc::UNARY()']]]
+];
diff --git a/docs/search/functions_0.html b/docs/search/functions_0.html
new file mode 100644
index 00000000..3b739c7f
--- /dev/null
+++ b/docs/search/functions_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_0.js b/docs/search/functions_0.js
new file mode 100644
index 00000000..6a9221a0
--- /dev/null
+++ b/docs/search/functions_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['add_5fhealth_5fcheck_5fservice_0',['add_health_check_service',['../classagrpc_1_1_health_check_service.html#a886bd0e1412d8fc13ca2a5959aab07fb',1,'agrpc::HealthCheckService']]]
+];
diff --git a/docs/search/functions_1.html b/docs/search/functions_1.html
new file mode 100644
index 00000000..2cef5e31
--- /dev/null
+++ b/docs/search/functions_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_1.js b/docs/search/functions_1.js
new file mode 100644
index 00000000..0f4a28af
--- /dev/null
+++ b/docs/search/functions_1.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['basicalarm_0',['BasicAlarm',['../classagrpc_1_1_basic_alarm.html#a1c2856cde4299fab6033f44785b39a91',1,'agrpc::BasicAlarm::BasicAlarm(const Executor &executor)'],['../classagrpc_1_1_basic_alarm.html#a729216cc77694f2a829d6bade9e0c695',1,'agrpc::BasicAlarm::BasicAlarm(agrpc::GrpcContext &grpc_context)']]],
+ ['basicgrpcexecutor_1',['BasicGrpcExecutor',['../classagrpc_1_1_basic_grpc_executor.html#af1f14c7ef02e44b330c245394dfebfa6',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/functions_2.html b/docs/search/functions_2.html
new file mode 100644
index 00000000..3308c651
--- /dev/null
+++ b/docs/search/functions_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_2.js b/docs/search/functions_2.js
new file mode 100644
index 00000000..b96781d4
--- /dev/null
+++ b/docs/search/functions_2.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['cancel_0',['cancel',['../classagrpc_1_1_basic_alarm.html#a0b1a1d2755efc3e05862e597100af241',1,'agrpc::BasicAlarm::cancel()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#ade0c1cd5b69a524efbf92059fda88c1c',1,'agrpc::detail::ClientRPCContextBase::cancel()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#ad8085a81b22c9af295c206f2f8c3af26',1,'agrpc::detail::ServerRPCContextBase::cancel()']]],
+ ['clientrpcbase_1',['ClientRPCBase',['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abdc479925e4d0cf2ee10d116a89e9b66',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a733bf7ee87338570e8e1d85fc47405a6',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(agrpc::GrpcContext &grpc_context, ClientContextInitFunction &&init_function)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a80593b7c183335a02dc27fc10cb228fd',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor)'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#abbd58f85ff2547e2c592ca1aa7a07ced',1,'agrpc::detail::ClientRPCBase::ClientRPCBase(const Executor &executor, ClientContextInitFunction &&init_function)']]],
+ ['context_2',['context',['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a056f94eadae189c43a6919d09e9f0031',1,'agrpc::detail::ClientRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_client_r_p_c_context_base.html#a5602cbb3e4c886c89405ad0404626e64',1,'agrpc::detail::ClientRPCContextBase::context() const'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#acb7e79a9709696570ffd10a42a3ed8a7',1,'agrpc::detail::ServerRPCContextBase::context()'],['../classagrpc_1_1detail_1_1_server_r_p_c_context_base.html#aa0a8fef49ce793e900442392882a488d',1,'agrpc::detail::ServerRPCContextBase::context() const'],['../classagrpc_1_1_basic_grpc_executor.html#ae03cda766d1198fa9fa135fccc02232a',1,'agrpc::BasicGrpcExecutor::context()']]]
+];
diff --git a/docs/search/functions_3.html b/docs/search/functions_3.html
new file mode 100644
index 00000000..43ac6976
--- /dev/null
+++ b/docs/search/functions_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_3.js b/docs/search/functions_3.js
new file mode 100644
index 00000000..33459028
--- /dev/null
+++ b/docs/search/functions_3.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['defer_0',['defer',['../classagrpc_1_1_basic_grpc_executor.html#a2c158f7d2dcad831b4930cf131e63f21',1,'agrpc::BasicGrpcExecutor']]],
+ ['dispatch_1',['dispatch',['../classagrpc_1_1_basic_grpc_executor.html#a97eda5ecec4b7066166e2f08eb1518be',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/functions_4.html b/docs/search/functions_4.html
new file mode 100644
index 00000000..d12c2dfc
--- /dev/null
+++ b/docs/search/functions_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_4.js b/docs/search/functions_4.js
new file mode 100644
index 00000000..0ec43da2
--- /dev/null
+++ b/docs/search/functions_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['execute_0',['execute',['../classagrpc_1_1_basic_grpc_executor.html#a582b3391e4c1c383800284659707501c',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/functions_5.html b/docs/search/functions_5.html
new file mode 100644
index 00000000..7266236c
--- /dev/null
+++ b/docs/search/functions_5.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_5.js b/docs/search/functions_5.js
new file mode 100644
index 00000000..77e4862d
--- /dev/null
+++ b/docs/search/functions_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['finish_0',['finish',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a1076681cc82ac9f1399a44ca5c104829',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a7ef8c8052151db5cc97b4f0647fae37c',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::finish()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a17e27e02dd763d9c49fcce0e79cd30fc',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7c7e4b16b9196942f418e7d8bba2b559',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::finish()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a64d693b556fb4825111b877f2ae99d96',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ae34431d70c1678e7647ea90aafa618c7',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8369e31122fc752a29ea0283ff9c6270',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ad695c5b87a302163d572e43d030f61fe',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::finish()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a6424aaa40e1915542db44472cd9462d5',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::finish()']]],
+ ['finish_5fwith_5ferror_1',['finish_with_error',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a820d0aa060d3f205023e79b0e2a3c957',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::finish_with_error()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#aa9e0211be3ce7d7879e1f5f06b054076',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::finish_with_error()']]]
+];
diff --git a/docs/search/functions_6.html b/docs/search/functions_6.html
new file mode 100644
index 00000000..7f9fc45b
--- /dev/null
+++ b/docs/search/functions_6.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_6.js b/docs/search/functions_6.js
new file mode 100644
index 00000000..22e3d2b6
--- /dev/null
+++ b/docs/search/functions_6.js
@@ -0,0 +1,9 @@
+var searchData=
+[
+ ['get_5fallocator_0',['get_allocator',['../classagrpc_1_1_grpc_context.html#ab38d929d30e72aface90b3d429727d33',1,'agrpc::GrpcContext::get_allocator()'],['../classagrpc_1_1_basic_grpc_executor.html#aead17d041c9509d3b5074375cd2eee6e',1,'agrpc::BasicGrpcExecutor::get_allocator()']]],
+ ['get_5fcompletion_5fqueue_1',['get_completion_queue',['../classagrpc_1_1_grpc_context.html#a897a9de9af8a2b81bbeef2f7fe0d0c63',1,'agrpc::GrpcContext']]],
+ ['get_5fexecutor_2',['get_executor',['../classagrpc_1_1_basic_alarm.html#ac364d2b1f047e589fc67c428c2c12947',1,'agrpc::BasicAlarm::get_executor()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac7d45c8fc3141d17881ac99ba0b53034',1,'agrpc::detail::RPCExecutorBase::get_executor()'],['../classagrpc_1_1_grpc_context.html#ab82f48f7e09542f242b683cda49aa6a9',1,'agrpc::GrpcContext::get_executor()']]],
+ ['get_5fscheduler_3',['get_scheduler',['../classagrpc_1_1_basic_alarm.html#ac4ab630cb9294c470fc6d1d3acf2aa5c',1,'agrpc::BasicAlarm::get_scheduler()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#ac5e0d6c42c0ed62b84b90f3ce42e180a',1,'agrpc::detail::RPCExecutorBase::get_scheduler()'],['../classagrpc_1_1_grpc_context.html#add171728b45fddd5740e4a3c9549bd3b',1,'agrpc::GrpcContext::get_scheduler() noexcept']]],
+ ['get_5fserver_5fcompletion_5fqueue_4',['get_server_completion_queue',['../classagrpc_1_1_grpc_context.html#a43be219d02581b5959b120bc9f869fce',1,'agrpc::GrpcContext']]],
+ ['grpccontext_5',['GrpcContext',['../classagrpc_1_1_grpc_context.html#aed9f6c8be4b05b6303abbbb2cde7ba76',1,'agrpc::GrpcContext::GrpcContext()=default'],['../classagrpc_1_1_grpc_context.html#a2d955d0f205cf08dd3d0b84867702c9d',1,'agrpc::GrpcContext::GrpcContext(std::unique_ptr< grpc::ServerCompletionQueue > completion_queue)']]]
+];
diff --git a/docs/search/functions_7.html b/docs/search/functions_7.html
new file mode 100644
index 00000000..ad0f88be
--- /dev/null
+++ b/docs/search/functions_7.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_7.js b/docs/search/functions_7.js
new file mode 100644
index 00000000..3bcb7113
--- /dev/null
+++ b/docs/search/functions_7.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['initiate_0',['initiate',['../classagrpc_1_1_waiter.html#a50c80e064c5a1911d65d34e21f89df54',1,'agrpc::Waiter']]],
+ ['is_5fdone_1',['is_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a42255cc87cf854a4d2bc04315f7647d5',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]],
+ ['is_5fready_2',['is_ready',['../classagrpc_1_1_waiter.html#a1f2d63e9aaa91fe141e30cb606c41580',1,'agrpc::Waiter']]],
+ ['is_5fstopped_3',['is_stopped',['../classagrpc_1_1_grpc_context.html#af71bfc1a827acb00e275161f189ea151',1,'agrpc::GrpcContext::is_stopped()'],['../structagrpc_1_1_default_run_traits.html#a3af8439a70f60bd6536142948b28eb45',1,'agrpc::DefaultRunTraits::is_stopped()']]]
+];
diff --git a/docs/search/functions_8.html b/docs/search/functions_8.html
new file mode 100644
index 00000000..ea7fa742
--- /dev/null
+++ b/docs/search/functions_8.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_8.js b/docs/search/functions_8.js
new file mode 100644
index 00000000..a9931d13
--- /dev/null
+++ b/docs/search/functions_8.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['method_5fname_0',['method_name',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#adca43de2480909300ee83f4e7d0fefe8',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a22b858db8af03d35bef7b60f7f389950',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::method_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ad0fbe938aa2186379c0115248e530310',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::method_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a36e96b31ad3ef1098a4c8c23e9dd94b7',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a972d0b1fe31b202d0cb400f2822cbd55',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ab43a75cf63b59377a1a5c3e6620f8f62',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a12aba29fbd910034827e1c1fa63c98fb',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::method_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a91d048483317e75723c7edf507011245',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::method_name()']]]
+];
diff --git a/docs/search/functions_9.html b/docs/search/functions_9.html
new file mode 100644
index 00000000..d831dc72
--- /dev/null
+++ b/docs/search/functions_9.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_9.js b/docs/search/functions_9.js
new file mode 100644
index 00000000..835c1d35
--- /dev/null
+++ b/docs/search/functions_9.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['on_5fwork_5ffinished_0',['on_work_finished',['../classagrpc_1_1_basic_grpc_executor.html#a727afeb6438fe94ec105085ee9e00d56',1,'agrpc::BasicGrpcExecutor']]],
+ ['on_5fwork_5fstarted_1',['on_work_started',['../classagrpc_1_1_basic_grpc_executor.html#ab2333c1d9f61b6469aeb6c84898e9a36',1,'agrpc::BasicGrpcExecutor']]],
+ ['operator_28_29_2',['operator()',['../structagrpc_1_1detail_1_1_notify_on_state_change_fn.html#a5c02ddea2000e4ce4c72bad24eafe221',1,'agrpc::detail::NotifyOnStateChangeFn::operator()()'],['../structagrpc_1_1detail_1_1_read_fn.html#af075920cd33d170393adeed3abb9c622',1,'agrpc::detail::ReadFn::operator()(agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))'],['../structagrpc_1_1detail_1_1_read_fn.html#aa2bbf01f6bdf35bff88f499b15be0d45',1,'agrpc::detail::ReadFn::operator()(agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))']]],
+ ['operator_2a_3',['operator*',['../classagrpc_1_1_server_r_p_c_ptr.html#a96ce1bc483099cd80a37ead302ee76c8',1,'agrpc::ServerRPCPtr::operator*() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a662d487613723349a8cc1ad7d250482d',1,'agrpc::ServerRPCPtr::operator*() const noexcept']]],
+ ['operator_2d_3e_4',['operator->',['../classagrpc_1_1_server_r_p_c_ptr.html#afb74f4ac6254fbaddbea6a1d45b2cc71',1,'agrpc::ServerRPCPtr::operator->() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#abb8d870586f33095b19a9ac145476bc0',1,'agrpc::ServerRPCPtr::operator->() const noexcept']]]
+];
diff --git a/docs/search/functions_a.html b/docs/search/functions_a.html
new file mode 100644
index 00000000..7018fc6d
--- /dev/null
+++ b/docs/search/functions_a.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_a.js b/docs/search/functions_a.js
new file mode 100644
index 00000000..fe222037
--- /dev/null
+++ b/docs/search/functions_a.js
@@ -0,0 +1,8 @@
+var searchData=
+[
+ ['poll_0',['poll',['../classagrpc_1_1_grpc_context.html#a4eb77d4c7fe553bc7b8aa7bc0c73fc22',1,'agrpc::GrpcContext::poll()'],['../structagrpc_1_1_default_run_traits.html#a158e1228fe8b77b46fceb4a76d3d47f6',1,'agrpc::DefaultRunTraits::poll()']]],
+ ['poll_5fcompletion_5fqueue_1',['poll_completion_queue',['../classagrpc_1_1_grpc_context.html#af35c5d430df1d778320a2fe51ec40102',1,'agrpc::GrpcContext']]],
+ ['post_2',['post',['../classagrpc_1_1_basic_grpc_executor.html#aa55121002e69f6da4d193e2438556519',1,'agrpc::BasicGrpcExecutor']]],
+ ['prefer_3',['prefer',['../classagrpc_1_1_basic_grpc_executor.html#ada9763f836d7e1af44a67ce09c8d6522',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::fork_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#af81aa8e1195243f012aeab6f83653015',1,'agrpc::BasicGrpcExecutor::prefer(asio::execution::relationship_t::continuation_t) const noexcept']]],
+ ['process_5fgrpc_5ftag_4',['process_grpc_tag',['../namespaceagrpc.html#accc81e3886098f4472dbe3e528594e3e',1,'agrpc']]]
+];
diff --git a/docs/search/functions_b.html b/docs/search/functions_b.html
new file mode 100644
index 00000000..c0660b00
--- /dev/null
+++ b/docs/search/functions_b.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_b.js b/docs/search/functions_b.js
new file mode 100644
index 00000000..7c361bad
--- /dev/null
+++ b/docs/search/functions_b.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['query_0',['query',['../classagrpc_1_1_basic_grpc_executor.html#a6f12911ba642e59b224357f68a2abb51',1,'agrpc::BasicGrpcExecutor::query(asio::execution::blocking_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#ab26ea9b4a7825f78147c43ea084b2ff3',1,'agrpc::BasicGrpcExecutor::query(asio::execution::mapping_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a41de4c176cc36e18949f590323cfbae1',1,'agrpc::BasicGrpcExecutor::query(asio::execution::context_t) const noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a93ee7e38b61436d95c48f32ea978967d',1,'agrpc::BasicGrpcExecutor::query(asio::execution::relationship_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a562182f5842ccd6c52e5cf6b8c4a24d0',1,'agrpc::BasicGrpcExecutor::query(asio::execution::outstanding_work_t) noexcept'],['../classagrpc_1_1_basic_grpc_executor.html#a3864da8461ae1579a14bb20af274d8c5',1,'agrpc::BasicGrpcExecutor::query(asio::execution::allocator_t< OtherAllocator >) const noexcept']]]
+];
diff --git a/docs/search/functions_c.html b/docs/search/functions_c.html
new file mode 100644
index 00000000..b642767e
--- /dev/null
+++ b/docs/search/functions_c.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_c.js b/docs/search/functions_c.js
new file mode 100644
index 00000000..d35c88d6
--- /dev/null
+++ b/docs/search/functions_c.js
@@ -0,0 +1,18 @@
+var searchData=
+[
+ ['read_0',['read',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a4d6efde195733c42e9aa107b3a7a0ff5',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac96720ba529e36c8112a2354b7266a25',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::read()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a90161838be17d1d91afe8ca410e60241',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::read()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a20ae74c290f3783780b9b7cc37d5b64f',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::read()']]],
+ ['read_5finitial_5fmetadata_1',['read_initial_metadata',['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a1d1304b708bdc368ff7f1626942f4745',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a8ef879de9cfcb6b6a09d4ca01343ceff',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::read_initial_metadata()'],['../classagrpc_1_1detail_1_1_client_r_p_c_base.html#a1f3342f57017775ec75f7f3317949b05',1,'agrpc::detail::ClientRPCBase::read_initial_metadata()']]],
+ ['register_5fawaitable_5frpc_5fhandler_2',['register_awaitable_rpc_handler',['../namespaceagrpc.html#a2f1dcfb4b6d0111e640416b1d42bee3d',1,'agrpc::register_awaitable_rpc_handler(const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)'],['../namespaceagrpc.html#a78ac79843f9432d01bb150416ade53b7',1,'agrpc::register_awaitable_rpc_handler(agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)']]],
+ ['register_5fcallback_5frpc_5fhandler_3',['register_callback_rpc_handler',['../namespaceagrpc.html#a278fe747978485cb9117fbd94cad5f3b',1,'agrpc::register_callback_rpc_handler(agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)'],['../namespaceagrpc.html#a7226596382b2075d1634468c504f39a9',1,'agrpc::register_callback_rpc_handler(const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)']]],
+ ['register_5fsender_5frpc_5fhandler_4',['register_sender_rpc_handler',['../namespaceagrpc.html#a87283536759419ab67987115551675c2',1,'agrpc']]],
+ ['register_5fyield_5frpc_5fhandler_5',['register_yield_rpc_handler',['../namespaceagrpc.html#aa099d7d7ee8bf6ed6b57bd413027f391',1,'agrpc::register_yield_rpc_handler(agrpc::GrpcContext &grpc_context, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler &&rpc_handler, CompletionToken &&token)'],['../namespaceagrpc.html#a5799e0d272e088ee755ebc3b54f6bde1',1,'agrpc::register_yield_rpc_handler(const typename ServerRPC::executor_type &executor, detail::GetServerRPCServiceT< ServerRPC > &service, RPCHandler rpc_handler, CompletionToken &&token)']]],
+ ['request_6',['request',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a5554e940876d59b9dd500983d350e1c9',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::request(agrpc::GrpcContext &grpc_context, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a27772b578b3e57ed17ad9161521046dd',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::request(const Executor &executor, const std::string &method, grpc::GenericStub &stub, grpc::ClientContext &context, const grpc::ByteBuffer &request, grpc::ByteBuffer &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_ptr.html#a75171d6a69414d78fd8080a762831ec0',1,'agrpc::ServerRPCPtr::request() noexcept'],['../classagrpc_1_1_server_r_p_c_ptr.html#a7fc9aa2fff351417c0e2ba60c5b654a7',1,'agrpc::ServerRPCPtr::request() const noexcept'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ad7823c6593cb519dd2c50b884d7e71b6',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(const Executor &executor, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ae398992301861c5e4ade311acd658f43',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::request(agrpc::GrpcContext &grpc_context, StubT &stub, grpc::ClientContext &context, const RequestT &request, ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})']]],
+ ['require_7',['require',['../classagrpc_1_1_basic_grpc_executor.html#a127e4d664d638ed7c6faf8e011108072',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< void >) const noexcept -> agrpc::BasicGrpcExecutor< std::allocator< void >, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#a92d82315cfce4d130c7b001a9a2f86e3',1,'agrpc::BasicGrpcExecutor::require(asio::execution::allocator_t< OtherAllocator > other_allocator) const noexcept -> agrpc::BasicGrpcExecutor< OtherAllocator, Options >'],['../classagrpc_1_1_basic_grpc_executor.html#a28a91c9fa313c1e764f036c4484611b2',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::untracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, false)>'],['../classagrpc_1_1_basic_grpc_executor.html#ab78813d4863b8e8175875dc9508db97f',1,'agrpc::BasicGrpcExecutor::require(asio::execution::outstanding_work_t::tracked_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_outstanding_work_tracked(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#ad7c8d60173fb17ccb20df74eba49c23a',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::never_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, true)>'],['../classagrpc_1_1_basic_grpc_executor.html#a9fc995acce9263dbce34dcdfc76bcb75',1,'agrpc::BasicGrpcExecutor::require(asio::execution::blocking_t::possibly_t) const noexcept -> agrpc::BasicGrpcExecutor< Allocator, detail::set_blocking_never(Options, false)>']]],
+ ['reset_8',['reset',['../classagrpc_1_1_grpc_context.html#a9da2b2b94e92a9d46e1309209002784b',1,'agrpc::GrpcContext']]],
+ ['run_9',['run',['../classagrpc_1_1_grpc_context.html#acb1dae170b054aba4c83e266c456fee0',1,'agrpc::GrpcContext::run()'],['../namespaceagrpc.html#ab52a5b6f6ce90d1bc9faa5baa96a39fa',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a075e15728ee3eac5531f3202cfaf6c38',1,'agrpc::run(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]],
+ ['run_5fcompletion_5fqueue_10',['run_completion_queue',['../classagrpc_1_1_grpc_context.html#a627dcc6bc3401d204d976b6fea6e00a3',1,'agrpc::GrpcContext::run_completion_queue()'],['../namespaceagrpc.html#a7c08e9c2d581c89024ba71489fc5aaf3',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context)'],['../namespaceagrpc.html#a32f6562885c161c318d08f83e48468e8',1,'agrpc::run_completion_queue(agrpc::GrpcContext &grpc_context, ExecutionContext &execution_context, StopCondition stop_condition)']]],
+ ['run_5ffor_11',['run_for',['../structagrpc_1_1_default_run_traits.html#a8452413588990f52725f10b20a2ebadd',1,'agrpc::DefaultRunTraits']]],
+ ['run_5funtil_12',['run_until',['../classagrpc_1_1_grpc_context.html#af6615f2abd46956145dcfe88e69f4004',1,'agrpc::GrpcContext']]],
+ ['run_5fwhile_13',['run_while',['../classagrpc_1_1_grpc_context.html#a21dc3e81f8d5c11969add93a7a24e363',1,'agrpc::GrpcContext']]],
+ ['running_5fin_5fthis_5fthread_14',['running_in_this_thread',['../classagrpc_1_1_basic_grpc_executor.html#aa88fb5798dd945616262dc58258f48ec',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/functions_d.html b/docs/search/functions_d.html
new file mode 100644
index 00000000..16464b42
--- /dev/null
+++ b/docs/search/functions_d.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_d.js b/docs/search/functions_d.js
new file mode 100644
index 00000000..d8459e0c
--- /dev/null
+++ b/docs/search/functions_d.js
@@ -0,0 +1,13 @@
+var searchData=
+[
+ ['schedule_0',['schedule',['../classagrpc_1_1_basic_grpc_executor.html#ade38414f479671b271f191f3ee458408',1,'agrpc::BasicGrpcExecutor']]],
+ ['send_5finitial_5fmetadata_1',['send_initial_metadata',['../classagrpc_1_1detail_1_1_server_r_p_c_base.html#a2476f3477572b896d89f6ac21cb59928',1,'agrpc::detail::ServerRPCBase']]],
+ ['serverrpc_2',['ServerRPC',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a86a399b203ead3c545179330c6c88c5d',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a698de8d72aa58e56b689869cb36906e9',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#af44544ec93a0e434636e08f9b15e0517',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a5b78d65f5628c9eaf4a521399a7ab0ba',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::ServerRPC()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a15af4c2269b9cfd9416855cc5fe755a2',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::ServerRPC()']]],
+ ['serverrpcptr_3',['ServerRPCPtr',['../classagrpc_1_1_server_r_p_c_ptr.html#af9bd970c0f19dbee72d07924a733ef08',1,'agrpc::ServerRPCPtr']]],
+ ['service_5fname_4',['service_name',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a6057033b1bfcbc06250a742229fe2357',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#ab0c6dea77cb83891df6a5be872075877',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#acd6a9daff41e97b6fa89e3d3960004cf',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#aa7bb65e6fc755d0f701fefd18fc59ba7',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a07458f85b4281c361b16f652b6cda493',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::service_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#aeb82d28bcdb03ae6f757fe3574124b3f',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::service_name()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#ae2e44ea56d1c15036646e906939fbb11',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::service_name()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0d95b3e778fd04576727a180ced2ad49',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::service_name()']]],
+ ['setservingstatus_5',['SetServingStatus',['../classagrpc_1_1_health_check_service.html#a38397dcd756e5356973bddabe68b8ef7',1,'agrpc::HealthCheckService::SetServingStatus(const std::string &service_name, bool serving)'],['../classagrpc_1_1_health_check_service.html#a326d63fafa352ab8b2457545c46c5a34',1,'agrpc::HealthCheckService::SetServingStatus(bool serving)']]],
+ ['shutdown_6',['Shutdown',['../classagrpc_1_1_health_check_service.html#aa48421a22334257415189455ce4200b7',1,'agrpc::HealthCheckService']]],
+ ['start_7',['start',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a0cc8fb2b4fdbc30dfaa214b7faa16828',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a1ec544b72d885bd8997f071c48136862',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#adf269b5e53116a877565828f37bd4d5e',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::start()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#acf13689d656fb3eedc0db0a98a08a810',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a22a09f1b5b1b9de7a89eaa84f33b0660',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::start()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad92bc0478a21853cb09f43a3bd4a68f2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::start()']]],
+ ['start_5fhealth_5fcheck_5fservice_8',['start_health_check_service',['../classagrpc_1_1_health_check_service.html#a7a1da8eae5be01bec3a8f6a8be75932f',1,'agrpc::HealthCheckService::start_health_check_service(agrpc::HealthCheckService &service, agrpc::GrpcContext &grpc_context)'],['../classagrpc_1_1_health_check_service.html#a55f352e270845728106e5dd3da20e668',1,'agrpc::HealthCheckService::start_health_check_service(grpc::Server &server, agrpc::GrpcContext &grpc_context)']]],
+ ['stop_9',['stop',['../classagrpc_1_1_grpc_context.html#aee29d403f03ef487d22efdf2079c46bc',1,'agrpc::GrpcContext']]]
+];
diff --git a/docs/search/functions_e.html b/docs/search/functions_e.html
new file mode 100644
index 00000000..e55bbf1b
--- /dev/null
+++ b/docs/search/functions_e.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_e.js b/docs/search/functions_e.js
new file mode 100644
index 00000000..b7ee3993
--- /dev/null
+++ b/docs/search/functions_e.js
@@ -0,0 +1,11 @@
+var searchData=
+[
+ ['wait_0',['wait',['../classagrpc_1_1_basic_alarm.html#a8b5725715bacc956d37074047b2ebdc9',1,'agrpc::BasicAlarm::wait()'],['../classagrpc_1_1_waiter.html#aaa57cfd93bab00d3c6f1895228cb7940',1,'agrpc::Waiter::wait()'],['../classagrpc_1_1_basic_alarm.html#af05358c4e51a6868b1e799dc9fe54373',1,'agrpc::BasicAlarm::wait()']]],
+ ['wait_5ffor_5fdone_1',['wait_for_done',['../classagrpc_1_1detail_1_1_server_r_p_c_notify_when_done_mixin.html#a8ac96d7413a2fd8465136d9815acca24',1,'agrpc::detail::ServerRPCNotifyWhenDoneMixin']]],
+ ['waiter_2',['Waiter',['../classagrpc_1_1_waiter.html#afd9e6e03d3e0f9da901a976b110a58a0',1,'agrpc::Waiter']]],
+ ['work_5ffinished_3',['work_finished',['../classagrpc_1_1_grpc_context.html#a9f89631518b2d38dbe0be11f7d5a4cc6',1,'agrpc::GrpcContext']]],
+ ['work_5fstarted_4',['work_started',['../classagrpc_1_1_grpc_context.html#ada19710c265c3a1e9cbffb696d079fbb',1,'agrpc::GrpcContext']]],
+ ['write_5',['write',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a6079b187ace1b9552b22f2f8de746bb1',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a64eaf90a6bc4d98763e1ee07d4bf6241',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#aa0453dfe0c8720b96ce308d988141862',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a2b03e7fa89f75423bdaff1a1b0215786',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#aa8ce64f00653fffa32d19c5ec76cda21',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write(const ResponseT &response, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a0860b4d9ef3ed2f548bb1aac883195a6',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::write()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a071f99daef79871be551b3f1ad98aa92',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a1fb8f06fde5c2a9818105841841aed83',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::write(const RequestT &request, grpc::WriteOptions options, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})']]],
+ ['write_5fand_5ffinish_6',['write_and_finish',['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#ade3cb297dd54774617cb4723e2626751',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a94623897422770328b39d926312ae16b',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#aa2a05dc89a2ff01b67cfe9c8fb0dbc60',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, grpc::WriteOptions options, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a085c57ac9331a4965d286418aec9b708',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::write_and_finish(const ResponseT &response, const grpc::Status &status, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{})']]],
+ ['writes_5fdone_7',['writes_done',['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a204916d3fd64acc0b8576224a2127950',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >']]]
+];
diff --git a/docs/search/functions_f.html b/docs/search/functions_f.html
new file mode 100644
index 00000000..07020a3f
--- /dev/null
+++ b/docs/search/functions_f.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/functions_f.js b/docs/search/functions_f.js
new file mode 100644
index 00000000..111c8849
--- /dev/null
+++ b/docs/search/functions_f.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['_7egrpccontext_0',['~GrpcContext',['../classagrpc_1_1_grpc_context.html#ad54076bc77ee6db3f167b2ad073db171',1,'agrpc::GrpcContext']]],
+ ['_7ewaiter_1',['~Waiter',['../classagrpc_1_1_waiter.html#aa5ee9bb346765753e2a1087b3e2e3a3f',1,'agrpc::Waiter']]]
+];
diff --git a/docs/search/mag_sel.svg b/docs/search/mag_sel.svg
new file mode 100644
index 00000000..03626f64
--- /dev/null
+++ b/docs/search/mag_sel.svg
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/search/namespaces_0.html b/docs/search/namespaces_0.html
new file mode 100644
index 00000000..b2d68fee
--- /dev/null
+++ b/docs/search/namespaces_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/namespaces_0.js b/docs/search/namespaces_0.js
new file mode 100644
index 00000000..668d7713
--- /dev/null
+++ b/docs/search/namespaces_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['agrpc_0',['agrpc',['../namespaceagrpc.html',1,'']]]
+];
diff --git a/docs/search/nomatches.html b/docs/search/nomatches.html
new file mode 100644
index 00000000..2b9360b6
--- /dev/null
+++ b/docs/search/nomatches.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/search/pages_0.html b/docs/search/pages_0.html
new file mode 100644
index 00000000..19817125
--- /dev/null
+++ b/docs/search/pages_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/pages_0.js b/docs/search/pages_0.js
new file mode 100644
index 00000000..bc54c483
--- /dev/null
+++ b/docs/search/pages_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['asio_2dgrpc_0',['asio-grpc',['../index.html',1,'']]]
+];
diff --git a/docs/search/pages_1.html b/docs/search/pages_1.html
new file mode 100644
index 00000000..320e4a48
--- /dev/null
+++ b/docs/search/pages_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/pages_1.js b/docs/search/pages_1.js
new file mode 100644
index 00000000..08711842
--- /dev/null
+++ b/docs/search/pages_1.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['client_20rpc_20cheat_20sheet_0',['Client rpc cheat sheet',['../md_doc_client_rpc_cheat_sheet.html',1,'']]],
+ ['cmake_20protobuf_20generate_1',['CMake protobuf generate',['../md_doc_cmake_protobuf_generate.html',1,'']]],
+ ['completion_20token_2',['Completion token',['../md_doc_completion_token.html',1,'']]]
+];
diff --git a/docs/search/pages_2.html b/docs/search/pages_2.html
new file mode 100644
index 00000000..396bc180
--- /dev/null
+++ b/docs/search/pages_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/pages_2.js b/docs/search/pages_2.js
new file mode 100644
index 00000000..dddbfaa3
--- /dev/null
+++ b/docs/search/pages_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['server_20rpc_20cheat_20sheet_0',['Server rpc cheat sheet',['../md_doc_server_rpc_cheat_sheet.html',1,'']]]
+];
diff --git a/docs/search/pages_3.html b/docs/search/pages_3.html
new file mode 100644
index 00000000..7a708562
--- /dev/null
+++ b/docs/search/pages_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/pages_3.js b/docs/search/pages_3.js
new file mode 100644
index 00000000..d249cad1
--- /dev/null
+++ b/docs/search/pages_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['using_20asio_20io_5fcontext_0',['Using Asio io_context',['../md_doc_using_asio_io_context.html',1,'']]]
+];
diff --git a/docs/search/pages_4.html b/docs/search/pages_4.html
new file mode 100644
index 00000000..b43cefbd
--- /dev/null
+++ b/docs/search/pages_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/pages_4.js b/docs/search/pages_4.js
new file mode 100644
index 00000000..248a8fae
--- /dev/null
+++ b/docs/search/pages_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['v3_20migration_20guide_0',['V3 migration guide',['../md_doc_v3_migration.html',1,'']]]
+];
diff --git a/docs/search/related_0.html b/docs/search/related_0.html
new file mode 100644
index 00000000..9ec0faeb
--- /dev/null
+++ b/docs/search/related_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/related_0.js b/docs/search/related_0.js
new file mode 100644
index 00000000..7d75d2aa
--- /dev/null
+++ b/docs/search/related_0.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['operator_21_3d_0',['operator!=',['../classagrpc_1_1_basic_grpc_executor.html#a59d940966a2cbccb0905db9c4fe23e09',1,'agrpc::BasicGrpcExecutor']]],
+ ['operator_3d_3d_1',['operator==',['../classagrpc_1_1_basic_grpc_executor.html#a47785162ab9282e1afe21ca8617142eb',1,'agrpc::BasicGrpcExecutor']]]
+];
diff --git a/docs/search/search.css b/docs/search/search.css
new file mode 100644
index 00000000..2d55f669
--- /dev/null
+++ b/docs/search/search.css
@@ -0,0 +1,263 @@
+/*---------------- Search Box */
+
+#MSearchBox {
+ white-space : nowrap;
+ background: white;
+ border-radius: 0.65em;
+ box-shadow: inset 0.5px 0.5px 3px 0px #555;
+ z-index: 102;
+}
+
+#MSearchBox .left {
+ display: inline-block;
+ vertical-align: middle;
+ height: 1.4em;
+}
+
+#MSearchSelect {
+ display: inline-block;
+ vertical-align: middle;
+ height: 19px;
+ padding: 0 0 0 0.3em;
+ margin: 0;
+}
+
+#MSearchField {
+ display: inline-block;
+ vertical-align: middle;
+ width: 7.5em;
+ height: 19px;
+ margin: 0 0.15em;
+ padding: 0;
+ line-height: 1em;
+ border:none;
+ color: #909090;
+ outline: none;
+ font-family: Arial, Verdana, sans-serif;
+ -webkit-border-radius: 0px;
+ border-radius: 0px;
+ background: none;
+}
+
+@media(hover: none) {
+ /* to avoid zooming on iOS */
+ #MSearchField {
+ font-size: 16px;
+ }
+}
+
+#MSearchBox .right {
+ display: inline-block;
+ vertical-align: middle;
+ width: 1.4em;
+ height: 1.4em;
+}
+
+#MSearchClose {
+ display: none;
+ font-size: inherit;
+ background : none;
+ border: none;
+ margin: 0;
+ padding: 0;
+ outline: none;
+
+}
+
+#MSearchCloseImg {
+ height: 1.4em;
+ padding: 0.3em;
+ margin: 0;
+}
+
+.MSearchBoxActive #MSearchField {
+ color: #000000;
+}
+
+#main-menu > li:last-child {
+ /* This object is the parent of the search bar */
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ height: 36px;
+ margin-right: 1em;
+}
+
+/*---------------- Search filter selection */
+
+#MSearchSelectWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #2E9AFE;
+ background-color: #F3F9FE;
+ z-index: 10001;
+ padding-top: 4px;
+ padding-bottom: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
+}
+
+.SelectItem {
+ font: 8pt Arial, Verdana, sans-serif;
+ padding-left: 2px;
+ padding-right: 12px;
+ border: 0px;
+}
+
+span.SelectionMark {
+ margin-right: 4px;
+ font-family: monospace;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem {
+ display: block;
+ outline-style: none;
+ color: #000000;
+ text-decoration: none;
+ padding-left: 6px;
+ padding-right: 12px;
+}
+
+a.SelectItem:focus,
+a.SelectItem:active {
+ color: #000000;
+ outline-style: none;
+ text-decoration: none;
+}
+
+a.SelectItem:hover {
+ color: #FFFFFF;
+ background-color: #004789;
+ outline-style: none;
+ text-decoration: none;
+ cursor: pointer;
+ display: block;
+}
+
+/*---------------- Search results window */
+
+iframe#MSearchResults {
+ /*width: 60ex;*/
+ height: 15em;
+}
+
+#MSearchResultsWindow {
+ display: none;
+ position: absolute;
+ left: 0; top: 0;
+ border: 1px solid #000;
+ background-color: #DDEEFE;
+ z-index:10000;
+}
+
+/* ----------------------------------- */
+
+
+#SRIndex {
+ clear:both;
+ padding-bottom: 15px;
+}
+
+.SREntry {
+ font-size: 10pt;
+ padding-left: 1ex;
+}
+
+.SRPage .SREntry {
+ font-size: 8pt;
+ padding: 1px 5px;
+}
+
+body.SRPage {
+ margin: 5px 2px;
+}
+
+.SRChildren {
+ padding-left: 3ex; padding-bottom: .5em
+}
+
+.SRPage .SRChildren {
+ display: none;
+}
+
+.SRSymbol {
+ font-weight: bold;
+ color: #004F99;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRScope {
+ display: block;
+ color: #004F99;
+ font-family: Arial, Verdana, sans-serif;
+ text-decoration: none;
+ outline: none;
+}
+
+a.SRSymbol:focus, a.SRSymbol:active,
+a.SRScope:focus, a.SRScope:active {
+ text-decoration: underline;
+}
+
+span.SRScope {
+ padding-left: 4px;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRPage .SRStatus {
+ padding: 2px 5px;
+ font-size: 8pt;
+ font-style: italic;
+ font-family: Arial, Verdana, sans-serif;
+}
+
+.SRResult {
+ display: none;
+}
+
+div.searchresults {
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+/*---------------- External search page results */
+
+.searchresult {
+ background-color: #E1F0FF;
+}
+
+.pages b {
+ color: white;
+ padding: 5px 5px 3px 5px;
+ background-image: url("../tab_a.png");
+ background-repeat: repeat-x;
+ text-shadow: 0 1px 1px #000000;
+}
+
+.pages {
+ line-height: 17px;
+ margin-left: 4px;
+ text-decoration: none;
+}
+
+.hl {
+ font-weight: bold;
+}
+
+#searchresults {
+ margin-bottom: 20px;
+}
+
+.searchpages {
+ margin-top: 10px;
+}
+
diff --git a/docs/search/search.js b/docs/search/search.js
new file mode 100644
index 00000000..607f4e10
--- /dev/null
+++ b/docs/search/search.js
@@ -0,0 +1,802 @@
+/*
+ @licstart The following is the entire license notice for the JavaScript code in this file.
+
+ The MIT License (MIT)
+
+ Copyright (C) 1997-2020 by Dimitri van Heesch
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software
+ and associated documentation files (the "Software"), to deal in the Software without restriction,
+ including without limitation the rights to use, copy, modify, merge, publish, distribute,
+ sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in all copies or
+ substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
+ BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ @licend The above is the entire license notice for the JavaScript code in this file
+ */
+function convertToId(search)
+{
+ var result = '';
+ for (i=0;i do a search
+ {
+ this.Search();
+ }
+ }
+
+ this.OnSearchSelectKey = function(evt)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==40 && this.searchIndex0) // Up
+ {
+ this.searchIndex--;
+ this.OnSelectItem(this.searchIndex);
+ }
+ else if (e.keyCode==13 || e.keyCode==27)
+ {
+ this.OnSelectItem(this.searchIndex);
+ this.CloseSelectionWindow();
+ this.DOMSearchField().focus();
+ }
+ return false;
+ }
+
+ // --------- Actions
+
+ // Closes the results window.
+ this.CloseResultsWindow = function()
+ {
+ this.DOMPopupSearchResultsWindow().style.display = 'none';
+ this.DOMSearchClose().style.display = 'none';
+ this.Activate(false);
+ }
+
+ this.CloseSelectionWindow = function()
+ {
+ this.DOMSearchSelectWindow().style.display = 'none';
+ }
+
+ // Performs a search.
+ this.Search = function()
+ {
+ this.keyTimeout = 0;
+
+ // strip leading whitespace
+ var searchValue = this.DOMSearchField().value.replace(/^ +/, "");
+
+ var code = searchValue.toLowerCase().charCodeAt(0);
+ var idxChar = searchValue.substr(0, 1).toLowerCase();
+ if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair
+ {
+ idxChar = searchValue.substr(0, 2);
+ }
+
+ var resultsPage;
+ var resultsPageWithSearch;
+ var hasResultsPage;
+
+ var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);
+ if (idx!=-1)
+ {
+ var hexCode=idx.toString(16);
+ resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + this.extension;
+ resultsPageWithSearch = resultsPage+'?'+escape(searchValue);
+ hasResultsPage = true;
+ }
+ else // nothing available for this search term
+ {
+ resultsPage = this.resultsPath + '/nomatches' + this.extension;
+ resultsPageWithSearch = resultsPage;
+ hasResultsPage = false;
+ }
+
+ window.frames.MSearchResults.location = resultsPageWithSearch;
+ var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();
+
+ if (domPopupSearchResultsWindow.style.display!='block')
+ {
+ var domSearchBox = this.DOMSearchBox();
+ this.DOMSearchClose().style.display = 'inline-block';
+ var domPopupSearchResults = this.DOMPopupSearchResults();
+ var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;
+ var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1;
+ domPopupSearchResultsWindow.style.display = 'block';
+ left -= domPopupSearchResults.offsetWidth;
+ var maxWidth = document.body.clientWidth;
+ var width = 400;
+ if (left<10) left=10;
+ if (width+left+8>maxWidth) width=maxWidth-left-8;
+ domPopupSearchResultsWindow.style.top = top + 'px';
+ domPopupSearchResultsWindow.style.left = left + 'px';
+ domPopupSearchResultsWindow.style.width = width + 'px';
+ }
+
+ this.lastSearchValue = searchValue;
+ this.lastResultsPage = resultsPage;
+ }
+
+ // -------- Activation Functions
+
+ // Activates or deactivates the search panel, resetting things to
+ // their default values if necessary.
+ this.Activate = function(isActive)
+ {
+ if (isActive || // open it
+ this.DOMPopupSearchResultsWindow().style.display == 'block'
+ )
+ {
+ this.DOMSearchBox().className = 'MSearchBoxActive';
+
+ var searchField = this.DOMSearchField();
+
+ if (searchField.value == this.searchLabel) // clear "Search" term upon entry
+ {
+ searchField.value = '';
+ this.searchActive = true;
+ }
+ }
+ else if (!isActive) // directly remove the panel
+ {
+ this.DOMSearchBox().className = 'MSearchBoxInactive';
+ this.DOMSearchField().value = this.searchLabel;
+ this.searchActive = false;
+ this.lastSearchValue = ''
+ this.lastResultsPage = '';
+ }
+ }
+}
+
+// -----------------------------------------------------------------------
+
+// The class that handles everything on the search results page.
+function SearchResults(name)
+{
+ // The number of matches from the last run of .
+ this.lastMatchCount = 0;
+ this.lastKey = 0;
+ this.repeatOn = false;
+
+ // Toggles the visibility of the passed element ID.
+ this.FindChildElement = function(id)
+ {
+ var parentElement = document.getElementById(id);
+ var element = parentElement.firstChild;
+
+ while (element && element!=parentElement)
+ {
+ if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren')
+ {
+ return element;
+ }
+
+ if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes())
+ {
+ element = element.firstChild;
+ }
+ else if (element.nextSibling)
+ {
+ element = element.nextSibling;
+ }
+ else
+ {
+ do
+ {
+ element = element.parentNode;
+ }
+ while (element && element!=parentElement && !element.nextSibling);
+
+ if (element && element!=parentElement)
+ {
+ element = element.nextSibling;
+ }
+ }
+ }
+ }
+
+ this.Toggle = function(id)
+ {
+ var element = this.FindChildElement(id);
+ if (element)
+ {
+ if (element.style.display == 'block')
+ {
+ element.style.display = 'none';
+ }
+ else
+ {
+ element.style.display = 'block';
+ }
+ }
+ }
+
+ // Searches for the passed string. If there is no parameter,
+ // it takes it from the URL query.
+ //
+ // Always returns true, since other documents may try to call it
+ // and that may or may not be possible.
+ this.Search = function(search)
+ {
+ if (!search) // get search word from URL
+ {
+ search = window.location.search;
+ search = search.substring(1); // Remove the leading '?'
+ search = unescape(search);
+ }
+
+ search = search.replace(/^ +/, ""); // strip leading spaces
+ search = search.replace(/ +$/, ""); // strip trailing spaces
+ search = search.toLowerCase();
+ search = convertToId(search);
+
+ var resultRows = document.getElementsByTagName("div");
+ var matches = 0;
+
+ var i = 0;
+ while (i < resultRows.length)
+ {
+ var row = resultRows.item(i);
+ if (row.className == "SRResult")
+ {
+ var rowMatchName = row.id.toLowerCase();
+ rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_'
+
+ if (search.length<=rowMatchName.length &&
+ rowMatchName.substr(0, search.length)==search)
+ {
+ row.style.display = 'block';
+ matches++;
+ }
+ else
+ {
+ row.style.display = 'none';
+ }
+ }
+ i++;
+ }
+ document.getElementById("Searching").style.display='none';
+ if (matches == 0) // no results
+ {
+ document.getElementById("NoMatches").style.display='block';
+ }
+ else // at least one result
+ {
+ document.getElementById("NoMatches").style.display='none';
+ }
+ this.lastMatchCount = matches;
+ return true;
+ }
+
+ // return the first item with index index or higher that is visible
+ this.NavNext = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index++;
+ }
+ return focusItem;
+ }
+
+ this.NavPrev = function(index)
+ {
+ var focusItem;
+ while (1)
+ {
+ var focusName = 'Item'+index;
+ focusItem = document.getElementById(focusName);
+ if (focusItem && focusItem.parentNode.parentNode.style.display=='block')
+ {
+ break;
+ }
+ else if (!focusItem) // last element
+ {
+ break;
+ }
+ focusItem=null;
+ index--;
+ }
+ return focusItem;
+ }
+
+ this.ProcessKeys = function(e)
+ {
+ if (e.type == "keydown")
+ {
+ this.repeatOn = false;
+ this.lastKey = e.keyCode;
+ }
+ else if (e.type == "keypress")
+ {
+ if (!this.repeatOn)
+ {
+ if (this.lastKey) this.repeatOn = true;
+ return false; // ignore first keypress after keydown
+ }
+ }
+ else if (e.type == "keyup")
+ {
+ this.lastKey = 0;
+ this.repeatOn = false;
+ }
+ return this.lastKey!=0;
+ }
+
+ this.Nav = function(evt,itemIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ var newIndex = itemIndex-1;
+ var focusItem = this.NavPrev(newIndex);
+ if (focusItem)
+ {
+ var child = this.FindChildElement(focusItem.parentNode.parentNode.id);
+ if (child && child.style.display == 'block') // children visible
+ {
+ var n=0;
+ var tmpElem;
+ while (1) // search for last child
+ {
+ tmpElem = document.getElementById('Item'+newIndex+'_c'+n);
+ if (tmpElem)
+ {
+ focusItem = tmpElem;
+ }
+ else // found it!
+ {
+ break;
+ }
+ n++;
+ }
+ }
+ }
+ if (focusItem)
+ {
+ focusItem.focus();
+ }
+ else // return focus to search field
+ {
+ parent.document.getElementById("MSearchField").focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = itemIndex+1;
+ var focusItem;
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem && elem.style.display == 'block') // children visible
+ {
+ focusItem = document.getElementById('Item'+itemIndex+'_c0');
+ }
+ if (!focusItem) focusItem = this.NavNext(newIndex);
+ if (focusItem) focusItem.focus();
+ }
+ else if (this.lastKey==39) // Right
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'block';
+ }
+ else if (this.lastKey==37) // Left
+ {
+ var item = document.getElementById('Item'+itemIndex);
+ var elem = this.FindChildElement(item.parentNode.parentNode.id);
+ if (elem) elem.style.display = 'none';
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+
+ this.NavChild = function(evt,itemIndex,childIndex)
+ {
+ var e = (evt) ? evt : window.event; // for IE
+ if (e.keyCode==13) return true;
+ if (!this.ProcessKeys(e)) return false;
+
+ if (this.lastKey==38) // Up
+ {
+ if (childIndex>0)
+ {
+ var newIndex = childIndex-1;
+ document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();
+ }
+ else // already at first child, jump to parent
+ {
+ document.getElementById('Item'+itemIndex).focus();
+ }
+ }
+ else if (this.lastKey==40) // Down
+ {
+ var newIndex = childIndex+1;
+ var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);
+ if (!elem) // last child, jump to parent next parent
+ {
+ elem = this.NavNext(itemIndex+1);
+ }
+ if (elem)
+ {
+ elem.focus();
+ }
+ }
+ else if (this.lastKey==27) // Escape
+ {
+ parent.searchBox.CloseResultsWindow();
+ parent.document.getElementById("MSearchField").focus();
+ }
+ else if (this.lastKey==13) // Enter
+ {
+ return true;
+ }
+ return false;
+ }
+}
+
+function setKeyActions(elem,action)
+{
+ elem.setAttribute('onkeydown',action);
+ elem.setAttribute('onkeypress',action);
+ elem.setAttribute('onkeyup',action);
+}
+
+function setClassAttr(elem,attr)
+{
+ elem.setAttribute('class',attr);
+ elem.setAttribute('className',attr);
+}
+
+function createResults()
+{
+ var results = document.getElementById("SRResults");
+ for (var e=0; e
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_0.js b/docs/search/typedefs_0.js
new file mode 100644
index 00000000..04951368
--- /dev/null
+++ b/docs/search/typedefs_0.js
@@ -0,0 +1,6 @@
+var searchData=
+[
+ ['alarm_0',['Alarm',['../namespaceagrpc.html#a86621c3633e8ae502a630b20bc5ec995',1,'agrpc']]],
+ ['allocator_5ftype_1',['allocator_type',['../classagrpc_1_1_grpc_context.html#a3445ceeb54e332eabf163cc6afdc1e3d',1,'agrpc::GrpcContext::allocator_type()'],['../classagrpc_1_1_basic_grpc_executor.html#a658f9dcfd92c049d9b8961bbb67eab13',1,'agrpc::BasicGrpcExecutor::allocator_type()']]],
+ ['as_5fdefault_5fon_5ft_2',['as_default_on_t',['../structagrpc_1_1_use_sender.html#a5f2944c83cd580b404b52d76f8df4140',1,'agrpc::UseSender']]]
+];
diff --git a/docs/search/typedefs_1.html b/docs/search/typedefs_1.html
new file mode 100644
index 00000000..9837c688
--- /dev/null
+++ b/docs/search/typedefs_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_1.js b/docs/search/typedefs_1.js
new file mode 100644
index 00000000..c374612d
--- /dev/null
+++ b/docs/search/typedefs_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['executor_5ftype_0',['executor_type',['../classagrpc_1_1_basic_alarm.html#a27f0463bacb42bca624f6c3a5dbc010f',1,'agrpc::BasicAlarm::executor_type()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a4bb04cc6b06744978476e7566c776c5c',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::executor_type()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a7b8c6b2cbac09f6f60e2495a13cffe75',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::executor_type()'],['../classagrpc_1_1detail_1_1_r_p_c_executor_base.html#afe3aab926de22d76fdb5e0d347c5d8c4',1,'agrpc::detail::RPCExecutorBase::executor_type()'],['../classagrpc_1_1_grpc_context.html#a72c65827092d85b2ce6376524e35141c',1,'agrpc::GrpcContext::executor_type()'],['../classagrpc_1_1_waiter.html#af957414c01d35b84cef8a6f459cacf46',1,'agrpc::Waiter::executor_type()']]]
+];
diff --git a/docs/search/typedefs_2.html b/docs/search/typedefs_2.html
new file mode 100644
index 00000000..a0a03eb8
--- /dev/null
+++ b/docs/search/typedefs_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_2.js b/docs/search/typedefs_2.js
new file mode 100644
index 00000000..aaf9401c
--- /dev/null
+++ b/docs/search/typedefs_2.js
@@ -0,0 +1,7 @@
+var searchData=
+[
+ ['genericserverrpc_0',['GenericServerRPC',['../namespaceagrpc.html#ad57f1d103299e55351ebbfce7653d535',1,'agrpc']]],
+ ['genericstreamingclientrpc_1',['GenericStreamingClientRPC',['../namespaceagrpc.html#a1ad87ac82291c4c9428970e18c59b6e8',1,'agrpc']]],
+ ['genericunaryclientrpc_2',['GenericUnaryClientRPC',['../namespaceagrpc.html#a566bc0105d5528ff6c8bec826429609c',1,'agrpc']]],
+ ['grpcexecutor_3',['GrpcExecutor',['../namespaceagrpc.html#aebdc4a27625d789667c7d54985157d28',1,'agrpc']]]
+];
diff --git a/docs/search/typedefs_3.html b/docs/search/typedefs_3.html
new file mode 100644
index 00000000..171611a3
--- /dev/null
+++ b/docs/search/typedefs_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_3.js b/docs/search/typedefs_3.js
new file mode 100644
index 00000000..9dceb1bd
--- /dev/null
+++ b/docs/search/typedefs_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['other_0',['other',['../structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html#a3082097ad16bc7190026b39ed646c966',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html#ab13e6fed14971fffed826aa80a635ba2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html#a0edf370762953c8f0f53eb49684b58d5',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor::other()'],['../structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html#a3e3adceefc89a3dc2b981dbfa1d79265',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html#a248da52a2c8146650d3ebbe6bfc5f92e',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor::other()'],['../structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html#ab98619c4f65e33caceb25669bc87dec2',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a0f6b0162569c1c628129976c0bf7bfd4',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a3f50e304010e7456c2327c851e1aba92',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a673c4c3fbda3538d531d8daea9bf586a',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a8f560c37749519750a3fb26e8b245921',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html#a88bd027aaa4c3eeec7b1a34baa4beca9',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor::other()'],['../structagrpc_1_1_waiter_1_1rebind__executor.html#a16a3287aad9cb67fb0614d84184938ca',1,'agrpc::Waiter::rebind_executor::other()']]]
+];
diff --git a/docs/search/typedefs_4.html b/docs/search/typedefs_4.html
new file mode 100644
index 00000000..1ed4afd6
--- /dev/null
+++ b/docs/search/typedefs_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_4.js b/docs/search/typedefs_4.js
new file mode 100644
index 00000000..2e2d5022
--- /dev/null
+++ b/docs/search/typedefs_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['ptr_0',['Ptr',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#ad342db335d28b900bd34f9176ecd7375',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a932e38d5ef3fa85fe3671981b0baf157',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a558850727f602f2ffeee6fbdac1dfe67',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a482df6736133eb6cfabf930cc8e7db49',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::Ptr()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a45a5f939ccf42750b5a63d9133211d08',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::Ptr()']]]
+];
diff --git a/docs/search/typedefs_5.html b/docs/search/typedefs_5.html
new file mode 100644
index 00000000..62f69652
--- /dev/null
+++ b/docs/search/typedefs_5.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_5.js b/docs/search/typedefs_5.js
new file mode 100644
index 00000000..8c3d9423
--- /dev/null
+++ b/docs/search/typedefs_5.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['request_0',['Request',['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a313126cc0eadd7c4dbbfc8aa8a45bc10',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Request()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aa4e18c75b6fb163a780408e2a118ec1d',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Request()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ab8fe0d6e998dbb9c3dac45bb3ebea1fd',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Request()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#ab17fb315d9316707b442296f9096519c',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::Request()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a35d5a54c0d5d64aabf433328327646f8',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Request()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a8574c668f8b1c3ea7af13fcbfe5c6eed',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Request()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4890e4677616bb468f2254fc2e33d626',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Request()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#af85c5d0f47f0b6e6244efd65a2dedbd6',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Request()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a3cbcb0c2a8dea17a5f8e2031b5f0e135',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Request()']]],
+ ['response_1',['Response',['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#ab8caf2b42da62017857e5f8d3b830353',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Response()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#afd405ca5e8fb6126941bef62c78aa0de',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Response()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#ac7c7485017b9601a6070a8df3999b2ae',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Response()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a84678c4ada6372cefea2ea32aeb74fe9',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Response()'],['../classagrpc_1_1detail_1_1_client_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_request_t_00_01_ee3885a4767d154ee2c386c451f018bf.html#a09949deac664f28273aa1b4f806759b1',1,'agrpc::detail::ClientRPCBidiStreamingBase< ResponderT< RequestT, ResponseT >, Executor >::Response()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a7f04ffe67672564e8fc084cea8186e9d',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Response()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aad54ab42b4d0f7ec548fe527d7c4a9e5',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Response()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a3729ec552aaf715925391a9596cc5b15',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Response()'],['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#a42c626f687ccf2ac90c4f97c1428ba05',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Response()']]]
+];
diff --git a/docs/search/typedefs_6.html b/docs/search/typedefs_6.html
new file mode 100644
index 00000000..5ef6eb50
--- /dev/null
+++ b/docs/search/typedefs_6.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_6.js b/docs/search/typedefs_6.js
new file mode 100644
index 00000000..d5844ab6
--- /dev/null
+++ b/docs/search/typedefs_6.js
@@ -0,0 +1,5 @@
+var searchData=
+[
+ ['serverrpc_0',['ServerRPC',['../classagrpc_1_1_server_r_p_c_ptr.html#a87d2fc4455382fefafc93963a0d182b5',1,'agrpc::ServerRPCPtr']]],
+ ['stub_1',['Stub',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#ae494858ba1fb77cc03a473d475f89fec',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#a8cec6132a63b51481847db130de97d12',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#aaa5fac7ed627fe95e1200d25633884b1',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::Stub()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#ac81a92f73b6032ab5163473f8af67ec8',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a4ad1384caca1951c4d7b4b68b1387bb9',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::Stub()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#ad20cfa0db0604367ac06d132cc5568cc',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::Stub()']]]
+];
diff --git a/docs/search/typedefs_7.html b/docs/search/typedefs_7.html
new file mode 100644
index 00000000..6b14f930
--- /dev/null
+++ b/docs/search/typedefs_7.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/typedefs_7.js b/docs/search/typedefs_7.js
new file mode 100644
index 00000000..195e1774
--- /dev/null
+++ b/docs/search/typedefs_7.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['traits_0',['Traits',['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#a4d77bf4c5da303dcefa3425b4345ab17',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::Traits()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a687d30c3fb955b30cd9faa415ac31304',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::Traits()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a4efa88efaadea9af27c4586f5388613d',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::Traits()'],['../classagrpc_1_1detail_1_1_server_r_p_c_bidi_streaming_base_3_01_responder_t_3_01_response_t_00_01e31241fd3385b9725dea3c9b5469411b.html#a6497720ecb8d23c3b31fccee67f51a10',1,'agrpc::detail::ServerRPCBidiStreamingBase< ResponderT< ResponseT, RequestT >, TraitsT, Executor >::Traits()']]]
+];
diff --git a/docs/search/variables_0.html b/docs/search/variables_0.html
new file mode 100644
index 00000000..fd893a69
--- /dev/null
+++ b/docs/search/variables_0.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/variables_0.js b/docs/search/variables_0.js
new file mode 100644
index 00000000..e80047a8
--- /dev/null
+++ b/docs/search/variables_0.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['max_5flatency_0',['MAX_LATENCY',['../structagrpc_1_1_default_run_traits.html#ad40442c14867c39d6577a47cc0094c88',1,'agrpc::DefaultRunTraits']]]
+];
diff --git a/docs/search/variables_1.html b/docs/search/variables_1.html
new file mode 100644
index 00000000..5f8e4400
--- /dev/null
+++ b/docs/search/variables_1.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/variables_1.js b/docs/search/variables_1.js
new file mode 100644
index 00000000..1a3319d3
--- /dev/null
+++ b/docs/search/variables_1.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['notify_5fon_5fstate_5fchange_0',['notify_on_state_change',['../namespaceagrpc.html#a3f3ac92b1e47fe65b8bbef1b3af97c60',1,'agrpc']]]
+];
diff --git a/docs/search/variables_2.html b/docs/search/variables_2.html
new file mode 100644
index 00000000..77a7f481
--- /dev/null
+++ b/docs/search/variables_2.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/variables_2.js b/docs/search/variables_2.js
new file mode 100644
index 00000000..47b5dae9
--- /dev/null
+++ b/docs/search/variables_2.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['read_0',['read',['../namespaceagrpc.html#a685510388ab87c9a90c44f880e9de9cd',1,'agrpc']]]
+];
diff --git a/docs/search/variables_3.html b/docs/search/variables_3.html
new file mode 100644
index 00000000..3ee62baa
--- /dev/null
+++ b/docs/search/variables_3.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/variables_3.js b/docs/search/variables_3.js
new file mode 100644
index 00000000..07603534
--- /dev/null
+++ b/docs/search/variables_3.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['type_0',['TYPE',['../classagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4.html#aebbb738d826d482f508a01cd59fcd6b4',1,'agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01_executor_01_4.html#abb156a59d90304904f66098612ed7d75',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4.html#a4a74888f2f96f5bb8b13218373aaa80c',1,'agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::TYPE()'],['../classagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming_00_01_executor_01_4.html#a361598fd336c38e5f282457263865229',1,'agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4.html#a0b85df8344986b161b6223aa80595a6c',1,'agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::TYPE()'],['../classagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n_g_00_01_executor_01_4.html#abfcfaefdbf807291d880efafd9436d64',1,'agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4.html#abbf4b20cf13937e19ad04e23a63571d8',1,'agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4.html#a6594380528bd6c1ad91f93e51c3db97a',1,'agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4.html#a159db6cacc50132ff946138097111d9a',1,'agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4.html#a54e3bd847fd4509a223660588413c69f',1,'agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::TYPE()'],['../classagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00_01_executor_01_4.html#a2600be35ff008044922937f2d8445cb4',1,'agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::TYPE()']]]
+];
diff --git a/docs/search/variables_4.html b/docs/search/variables_4.html
new file mode 100644
index 00000000..640713f6
--- /dev/null
+++ b/docs/search/variables_4.html
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
Loading...
+
+
+
Searching...
+
No Matches
+
+
+
+
diff --git a/docs/search/variables_4.js b/docs/search/variables_4.js
new file mode 100644
index 00000000..c5472dd6
--- /dev/null
+++ b/docs/search/variables_4.js
@@ -0,0 +1,4 @@
+var searchData=
+[
+ ['use_5fsender_0',['use_sender',['../namespaceagrpc.html#aa9c38be6a3d7d59a78007bc4fff311a4',1,'agrpc']]]
+];
diff --git a/docs/splitbar.png b/docs/splitbar.png
new file mode 100644
index 00000000..58a8081b
Binary files /dev/null and b/docs/splitbar.png differ
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..8132cc17
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..f77e7260
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ClientRPC to another executor.
+ More...
+
+
#include <agrpc/client_rpc.hpp>
+
+
+
+using other = ClientRPC < PrepareAsyncBidiStreaming, OtherExecutor >
+ The ClientRPC type when rebound to the specified executor.
+
+
+
+
template<class StubT, class RequestT, class ResponseT, template< class, class > class ResponderT, detail::PrepareAsyncClientBidirectionalStreamingRequest< StubT, ResponderT< RequestT, ResponseT > > PrepareAsyncBidiStreaming, class Executor>
+template<class OtherExecutor>
+struct agrpc::ClientRPC< PrepareAsyncBidiStreaming, Executor >::rebind_executor< OtherExecutor >
Rebind the ClientRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..7fe88202
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_bidi_streaming_00_01_executor_01_4_1_1rebind__executor.html#a248da52a2c8146650d3ebbe6bfc5f92e", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..59e02f73
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..b46e3ae2
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ClientRPC to another executor.
+ More...
+
+
#include <agrpc/client_rpc.hpp>
+
+
+
+using other = ClientRPC < PrepareAsyncClientStreaming, OtherExecutor >
+ The ClientRPC type when rebound to the specified executor.
+
+
+
+
template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientClientStreamingRequest< StubT, ResponderT< RequestT >, ResponseT > PrepareAsyncClientStreaming, class Executor>
+template<class OtherExecutor>
+struct agrpc::ClientRPC< PrepareAsyncClientStreaming, Executor >::rebind_executor< OtherExecutor >
Rebind the ClientRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..323ad70f
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_client_r_p_c_3_01_prepare_async_client_streaming_00_01_executor_01_4_1_1rebind__executor.html#a0edf370762953c8f0f53eb49684b58d5", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html
new file mode 100644
index 00000000..379c71ff
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ClientRPC to another executor.
+ More...
+
+
#include <agrpc/client_rpc.hpp>
+
+
+
template<class Executor>
+template<class OtherExecutor>
+struct agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_STREAMING, Executor >::rebind_executor< OtherExecutor >
Rebind the ClientRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.js b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.js
new file mode 100644
index 00000000..27f603af
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf =
+[
+ [ "other", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_n003cb43b2a2fe522958e614cece7f6cf.html#ab98619c4f65e33caceb25669bc87dec2", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_ne81143c17c5a63044adf078c6b30030f.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_ne81143c17c5a63044adf078c6b30030f.html
new file mode 100644
index 00000000..6e792da4
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___s_t_r_e_a_m_i_ne81143c17c5a63044adf078c6b30030f.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_0187d2cbfa5f93dde68dea00f284ab536b.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_0187d2cbfa5f93dde68dea00f284ab536b.html
new file mode 100644
index 00000000..6a6fd2fe
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_0187d2cbfa5f93dde68dea00f284ab536b.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html
new file mode 100644
index 00000000..e1bc2554
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ClientRPC to another executor.
+ More...
+
+
#include <agrpc/client_rpc.hpp>
+
+
+
template<class Executor>
+template<class OtherExecutor>
+struct agrpc::ClientRPC< agrpc::ClientRPCType::GENERIC_UNARY, Executor >::rebind_executor< OtherExecutor >
Rebind the ClientRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.js b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.js
new file mode 100644
index 00000000..89d310f0
--- /dev/null
+++ b/docs/structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e =
+[
+ [ "other", "structagrpc_1_1_client_r_p_c_3_01agrpc_1_1_client_r_p_c_type_1_1_g_e_n_e_r_i_c___u_n_a_r_y_00_01900d803413fc821ee6c15a9d5231e14e.html#ab13e6fed14971fffed826aa80a635ba2", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_default_run_traits-members.html b/docs/structagrpc_1_1_default_run_traits-members.html
new file mode 100644
index 00000000..ae22519d
--- /dev/null
+++ b/docs/structagrpc_1_1_default_run_traits-members.html
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for agrpc::DefaultRunTraits , including all inherited members.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_default_run_traits.html b/docs/structagrpc_1_1_default_run_traits.html
new file mode 100644
index 00000000..9596181f
--- /dev/null
+++ b/docs/structagrpc_1_1_default_run_traits.html
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::DefaultRunTraits Struct Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
(experimental) Default run traits
+ More...
+
+
#include <agrpc/run.hpp>
+
+
+template<class ExecutionContext >
+static bool poll (ExecutionContext &execution_context)
+ How to poll the execution context. More...
+
+template<class ExecutionContext , class Rep , class Period >
+static bool run_for (ExecutionContext &execution_context, std::chrono::duration< Rep, Period > duration)
+ How to run the execution context for the specified duration. More...
+
+
+template<class ExecutionContext >
+static bool is_stopped (ExecutionContext &execution_context)
+ Has the execution context been stopped?
+
+
+
+static constexpr std::chrono::microseconds MAX_LATENCY {250}
+ The desired maximum latency. More...
+
+
+
+
(experimental) Default run traits
+
Since 1.7.0
+
+
+
◆ poll()
+
+
+
+
+template<class ExecutionContext >
+
+
+
+
+
+ static bool agrpc::DefaultRunTraits::poll
+ (
+ ExecutionContext &
+ execution_context )
+
+
+
+
+
+inline static
+
+
+
+
+
How to poll the execution context.
+
This function should let the execution context process some work without sleeping and return true if any work has been processed.
+
+
+
+
+
◆ run_for()
+
+
+
+
+template<class ExecutionContext , class Rep , class Period >
+
+
+
+
+
+ static bool agrpc::DefaultRunTraits::run_for
+ (
+ ExecutionContext &
+ execution_context ,
+
+
+
+
+ std::chrono::duration< Rep, Period >
+ duration
+
+
+
+ )
+
+
+
+
+
+inline static
+
+
+
+
+
How to run the execution context for the specified duration.
+
This function should let the execution context process some work and sleep for at least duration
. If any work has been processed then it should return true.
+
+
+
+
+
+
◆ MAX_LATENCY
+
+
+
+
+
+
+
+
+ constexpr std::chrono::microseconds agrpc::DefaultRunTraits::MAX_LATENCY {250}
+
+
+
+
+static constexpr
+
+
+
+
+
The desired maximum latency.
+
The maximum latency between consecutive polls of the execution context.
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_default_run_traits.js b/docs/structagrpc_1_1_default_run_traits.js
new file mode 100644
index 00000000..3c680af4
--- /dev/null
+++ b/docs/structagrpc_1_1_default_run_traits.js
@@ -0,0 +1,7 @@
+var structagrpc_1_1_default_run_traits =
+[
+ [ "poll", "structagrpc_1_1_default_run_traits.html#a158e1228fe8b77b46fceb4a76d3d47f6", null ],
+ [ "run_for", "structagrpc_1_1_default_run_traits.html#a8452413588990f52725f10b20a2ebadd", null ],
+ [ "is_stopped", "structagrpc_1_1_default_run_traits.html#a3af8439a70f60bd6536142948b28eb45", null ],
+ [ "MAX_LATENCY", "structagrpc_1_1_default_run_traits.html#ad40442c14867c39d6577a47cc0094c88", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..99c5ac67
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..64841118
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ServerRPC to another executor.
+ More...
+
+
#include <agrpc/server_rpc.hpp>
+
+
+
+using other = ServerRPC < RequestBidiStreaming, TraitsT, OtherExecutor >
+ The ServerRPC type when rebound to the specified executor.
+
+
+
+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerBidiStreamingRequest< ServiceT, RequestT, ResponseT > RequestBidiStreaming, class TraitsT, class Executor>
+template<class OtherExecutor>
+struct agrpc::ServerRPC< RequestBidiStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >
Rebind the ServerRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..8d42fb5d
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_bidi_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a8f560c37749519750a3fb26e8b245921", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..ef64414e
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..17e0baf0
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ServerRPC to another executor.
+ More...
+
+
#include <agrpc/server_rpc.hpp>
+
+
+
+using other = ServerRPC < RequestClientStreaming, TraitsT, OtherExecutor >
+ The ServerRPC type when rebound to the specified executor.
+
+
+
+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerClientStreamingRequest< ServiceT, RequestT, ResponseT > RequestClientStreaming, class TraitsT, class Executor>
+template<class OtherExecutor>
+struct agrpc::ServerRPC< RequestClientStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >
Rebind the ServerRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..d66ecaf0
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_client_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a3f50e304010e7456c2327c851e1aba92", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..f5dc34c2
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..f71eeaaa
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ServerRPC to another executor.
+ More...
+
+
#include <agrpc/server_rpc.hpp>
+
+
+
+using other = ServerRPC < RequestServerStreaming, TraitsT, OtherExecutor >
+ The ServerRPC type when rebound to the specified executor.
+
+
+
+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerServerStreamingRequest< ServiceT, RequestT, ResponseT > RequestServerStreaming, class TraitsT, class Executor>
+template<class OtherExecutor>
+struct agrpc::ServerRPC< RequestServerStreaming, TraitsT, Executor >::rebind_executor< OtherExecutor >
Rebind the ServerRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..4f27e947
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_server_streaming_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a673c4c3fbda3538d531d8daea9bf586a", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..bf6fa5f3
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..904c1c70
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ServerRPC to another executor.
+ More...
+
+
#include <agrpc/server_rpc.hpp>
+
+
+
+using other = ServerRPC < RequestUnary, TraitsT, OtherExecutor >
+ The ServerRPC type when rebound to the specified executor.
+
+
+
+
template<class ServiceT, class RequestT, class ResponseT, detail::ServerUnaryRequest< ServiceT, RequestT, ResponseT > RequestUnary, class TraitsT, class Executor>
+template<class OtherExecutor>
+struct agrpc::ServerRPC< RequestUnary, TraitsT, Executor >::rebind_executor< OtherExecutor >
Rebind the ServerRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..344c574c
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_server_r_p_c_3_01_request_unary_00_01_traits_t_00_01_executor_01_4_1_1rebind__executor.html#a0f6b0162569c1c628129976c0bf7bfd4", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html
new file mode 100644
index 00000000..d4530c53
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ServerRPC to another executor.
+ More...
+
+
#include <agrpc/server_rpc.hpp>
+
+
+
template<class TraitsT, class Executor>
+template<class OtherExecutor>
+struct agrpc::ServerRPC< agrpc::ServerRPCType::GENERIC, TraitsT, Executor >::rebind_executor< OtherExecutor >
Rebind the ServerRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.js b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.js
new file mode 100644
index 00000000..783fc3d0
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4 =
+[
+ [ "other", "structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_00167560586ee74b84ed2923c87227f3b4.html#a88bd027aaa4c3eeec7b1a34baa4beca9", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_004581c31f0e089f98646a893ffa908c22.html b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_004581c31f0e089f98646a893ffa908c22.html
new file mode 100644
index 00000000..e64bb5af
--- /dev/null
+++ b/docs/structagrpc_1_1_server_r_p_c_3_01agrpc_1_1_server_r_p_c_type_1_1_g_e_n_e_r_i_c_00_01_traits_t_004581c31f0e089f98646a893ffa908c22.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_use_sender-members.html b/docs/structagrpc_1_1_use_sender-members.html
new file mode 100644
index 00000000..5341da93
--- /dev/null
+++ b/docs/structagrpc_1_1_use_sender-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for agrpc::UseSender , including all inherited members.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_use_sender.html b/docs/structagrpc_1_1_use_sender.html
new file mode 100644
index 00000000..34d81d45
--- /dev/null
+++ b/docs/structagrpc_1_1_use_sender.html
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::UseSender Struct Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Sender completion token.
+ More...
+
+
#include <agrpc/use_sender.hpp>
+
+
+template<class T >
+using as_default_on_t = typename T::template rebind_executor< detail::ExecutorWithDefault< UseSender , typename T::executor_type > >::other
+ Type alias to adapt an I/O object to use agrpc::UseSender
as its default completion token type. More...
+
+
+
+
Sender completion token.
+
This function object can be used to create completion tokens that cause free functions in this library to return a sender . This is particularly useful for libunifex where senders are also awaitable:
+
unifex::task<void> server_streaming_example(
agrpc::GrpcContext & grpc_context, example::v1::Example::Stub& stub)
+
{
+
+
grpc::ClientContext client_context;
+
RPC::Request request;
+
RPC rpc{grpc_context};
+
+
RPC::Response response;
+
+
+
}
+
Primary ClientRPC template.
Definition: forward.hpp:56
+
Execution context based on grpc::CompletionQueue
Definition: grpc_context.hpp:49
+
constexpr agrpc::UseSender use_sender
Instance and factory for sender completion tokens.
Definition: use_sender.hpp:57
+
For member functions in this library the agrpc::UseSender
object must be used directly:
+
+
◆ as_default_on_t
+
+
+
+
+template<class T >
+
+
+
+
Type alias to adapt an I/O object to use agrpc::UseSender
as its default completion token type.
+
Only applicable to I/O objects of this library.
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_use_sender.js b/docs/structagrpc_1_1_use_sender.js
new file mode 100644
index 00000000..418af835
--- /dev/null
+++ b/docs/structagrpc_1_1_use_sender.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_use_sender =
+[
+ [ "as_default_on_t", "structagrpc_1_1_use_sender.html#a5f2944c83cd580b404b52d76f8df4140", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1_waiter_1_1rebind__executor-members.html b/docs/structagrpc_1_1_waiter_1_1rebind__executor-members.html
new file mode 100644
index 00000000..58f4e91c
--- /dev/null
+++ b/docs/structagrpc_1_1_waiter_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor > , including all inherited members.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_waiter_1_1rebind__executor.html b/docs/structagrpc_1_1_waiter_1_1rebind__executor.html
new file mode 100644
index 00000000..646d8cca
--- /dev/null
+++ b/docs/structagrpc_1_1_waiter_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the Waiter to another executor.
+ More...
+
+
#include <agrpc/waiter.hpp>
+
+
+
+using other = Waiter < Signature, OtherExecutor >
+ The Waiter type when rebound to the specified executor.
+
+
+
+
template<class Signature, class Executor>
+template<class OtherExecutor>
+struct agrpc::Waiter< Signature, Executor >::rebind_executor< OtherExecutor >
Rebind the Waiter to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1_waiter_1_1rebind__executor.js b/docs/structagrpc_1_1_waiter_1_1rebind__executor.js
new file mode 100644
index 00000000..ca377175
--- /dev/null
+++ b/docs/structagrpc_1_1_waiter_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1_waiter_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1_waiter_1_1rebind__executor.html#a16a3287aad9cb67fb0614d84184938ca", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming7f8c0c456bfb747ef86e02373e7d4f67.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming7f8c0c456bfb747ef86e02373e7d4f67.html
new file mode 100644
index 00000000..a9d449ca
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming7f8c0c456bfb747ef86e02373e7d4f67.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html
new file mode 100644
index 00000000..ba0875fd
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ClientRPC to another executor.
+ More...
+
+
#include <agrpc/client_rpc.hpp>
+
+
+
+using other = ClientRPC < PrepareAsyncServerStreaming, OtherExecutor >
+ The ClientRPC type when rebound to the specified executor.
+
+
+
+
template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientServerStreamingRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncServerStreaming, class Executor>
+template<class OtherExecutor>
+struct agrpc::detail::ClientRPCServerStreamingBase< PrepareAsyncServerStreaming, Executor >::rebind_executor< OtherExecutor >
Rebind the ClientRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.js b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.js
new file mode 100644
index 00000000..ba486fad
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120 =
+[
+ [ "other", "structagrpc_1_1detail_1_1_client_r_p_c_server_streaming_base_3_01_prepare_async_server_streaming9434cc9f51666d3668ba5e9ae3497120.html#a3e3adceefc89a3dc2b981dbfa1d79265", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor-members.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor-members.html
new file mode 100644
index 00000000..e7391569
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html
new file mode 100644
index 00000000..24564d90
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor > Struct Template Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Rebind the ClientRPC to another executor.
+ More...
+
+
#include <agrpc/client_rpc.hpp>
+
+
+
+using other = ClientRPC < PrepareAsyncUnary, OtherExecutor >
+ The ClientRPC type when rebound to the specified executor.
+
+
+
+
template<class StubT, class RequestT, class ResponseT, template< class > class ResponderT, detail::PrepareAsyncClientUnaryRequest< StubT, RequestT, ResponderT< ResponseT > > PrepareAsyncUnary, class Executor>
+template<class OtherExecutor>
+struct agrpc::detail::ClientRPCUnaryBase< PrepareAsyncUnary, Executor >::rebind_executor< OtherExecutor >
Rebind the ClientRPC to another executor.
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.js b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.js
new file mode 100644
index 00000000..a0a76bd3
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor =
+[
+ [ "other", "structagrpc_1_1detail_1_1_client_r_p_c_unary_base_3_01_prepare_async_unary_00_01_executor_01_4_1_1rebind__executor.html#a3082097ad16bc7190026b39ed646c966", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn-members.html b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn-members.html
new file mode 100644
index 00000000..8c10dfef
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn-members.html
@@ -0,0 +1,111 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for agrpc::detail::NotifyOnStateChangeFn , including all inherited members.
+
+ operator() (agrpc::GrpcContext &grpc_context, grpc::ChannelInterface &channel, ::grpc_connectivity_state last_observed, Deadline deadline, CompletionToken &&token) const noexcept(detail::IS_USE_SENDER< CompletionToken > &&std::is_nothrow_copy_constructible_v< Deadline >)agrpc::detail::NotifyOnStateChangeFn inline
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.html b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.html
new file mode 100644
index 00000000..c61eeb6a
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.html
@@ -0,0 +1,204 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::detail::NotifyOnStateChangeFn Struct Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Function to set notification for a grpc::Channel
state change.
+ More...
+
+
#include <agrpc/notify_on_state_change.hpp>
+
+
+template<class Deadline , class CompletionToken >
+auto operator() (agrpc::GrpcContext &grpc_context, grpc::ChannelInterface &channel, ::grpc_connectivity_state last_observed, Deadline deadline, CompletionToken &&token) const noexcept(detail::IS_USE_SENDER< CompletionToken > &&std::is_nothrow_copy_constructible_v< Deadline >)
+ Set notification for a grpc::Channel
state change. More...
+
+
+
+
Function to set notification for a grpc::Channel
state change.
+
Wait for the channel state to change or the specified deadline to expire.
+
Per-Operation Cancellation
+
None.
+
Since 2.3.0
+
+
+
◆ operator()()
+
+
+
+
+template<class Deadline , class CompletionToken >
+
+
+
+
+
+ auto agrpc::detail::NotifyOnStateChangeFn::operator()
+ (
+ agrpc::GrpcContext &
+ grpc_context ,
+
+
+
+
+ grpc::ChannelInterface &
+ channel ,
+
+
+
+
+ ::grpc_connectivity_state
+ last_observed ,
+
+
+
+
+ Deadline
+ deadline ,
+
+
+
+
+ CompletionToken &&
+ token
+
+
+
+ )
+ const
+
+
+
+
+inline noexcept
+
+
+
+
+
Set notification for a grpc::Channel
state change.
+
Wait for the channel state to change or the specified deadline to expire.
+
Example:
+
const auto channel = grpc::CreateChannel(host, grpc::InsecureChannelCredentials());
+
const auto state = channel->GetState(true );
+
const auto deadline = std::chrono::system_clock::now() + std::chrono::seconds(5);
+
bool has_state_changed =
+
+
constexpr detail::NotifyOnStateChangeFn notify_on_state_change
Set notification for a grpc::Channel state change.
Definition: notify_on_state_change.hpp:79
+
Parameters
+
+ deadline By default gRPC supports two types of deadlines: gpr_timespec
and std::chrono::system_clock::time_point
. More types can be added by specializing grpc::TimePoint .
+ token A completion token like asio::yield_context
or agrpc::use_sender
. The completion signature is void(bool)
. true
if the state changed, false
if the deadline expired.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.js b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.js
new file mode 100644
index 00000000..8ee219a9
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_notify_on_state_change_fn.js
@@ -0,0 +1,4 @@
+var structagrpc_1_1detail_1_1_notify_on_state_change_fn =
+[
+ [ "operator()", "structagrpc_1_1detail_1_1_notify_on_state_change_fn.html#a5c02ddea2000e4ce4c72bad24eafe221", null ]
+];
\ No newline at end of file
diff --git a/docs/structagrpc_1_1detail_1_1_read_fn-members.html b/docs/structagrpc_1_1detail_1_1_read_fn-members.html
new file mode 100644
index 00000000..6efc864d
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_read_fn-members.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+asio-grpc: Member List
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
This is the complete list of members for agrpc::detail::ReadFn , including all inherited members.
+
+ operator() (agrpc::ServerRPC< RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC< RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))agrpc::detail::ReadFn inline
+ operator() (agrpc::ClientRPC< PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC< PrepareAsync, Executor >::Response &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))agrpc::detail::ReadFn inline
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_read_fn.html b/docs/structagrpc_1_1detail_1_1_read_fn.html
new file mode 100644
index 00000000..ec57fc2b
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_read_fn.html
@@ -0,0 +1,227 @@
+
+
+
+
+
+
+
+
+asio-grpc: agrpc::detail::ReadFn Struct Reference
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ asio-grpc v3.0.0
+
+ Asynchronous gRPC with Asio/unified executors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Server/ClientRPC.read in form of a function object.
+ More...
+
+
#include <agrpc/read.hpp>
+
+
+template<auto RequestRPC, class Traits , class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+decltype(auto) operator() (agrpc::ServerRPC < RequestRPC, Traits, Executor > &rpc, typename agrpc::ServerRPC < RequestRPC, Traits, Executor >::Request &req, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(req, static_cast< CompletionToken && >(token))))
+ Read from a ServerRPC . More...
+
+template<auto PrepareAsync, class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+decltype(auto) operator() (agrpc::ClientRPC < PrepareAsync, Executor > &rpc, typename agrpc::ClientRPC < PrepareAsync, Executor >::Response &response, CompletionToken &&token=detail::DefaultCompletionTokenT< Executor >{}) const noexcept(noexcept(rpc.read(response, static_cast< CompletionToken && >(token))))
+ Read from a Client. More...
+
+
+
+
Server/ClientRPC.read in form of a function object.
+
+
+
◆ operator()() [1/2]
+
+
+
+
+template<auto RequestRPC, class Traits , class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+
+
+
+
+
+ decltype(auto) agrpc::detail::ReadFn::operator()
+ (
+ agrpc::ServerRPC < RequestRPC, Traits, Executor > &
+ rpc ,
+
+
+
+
+ typename agrpc::ServerRPC < RequestRPC, Traits, Executor >::Request &
+ req ,
+
+
+
+
+ CompletionToken &&
+ token = detail::DefaultCompletionTokenT<Executor>{}
+
+
+
+ )
+ const
+
+
+
+
+inline noexcept
+
+
+
+
+
Read from a ServerRPC .
+
Equivalent to performing rpc.read(req, token)
.
+
Since 2.7.0
+
+
+
+
+
◆ operator()() [2/2]
+
+
+
+
+template<auto PrepareAsync, class Executor , class CompletionToken = detail::DefaultCompletionTokenT<Executor>>
+
+
+
+
+
+ decltype(auto) agrpc::detail::ReadFn::operator()
+ (
+ agrpc::ClientRPC < PrepareAsync, Executor > &
+ rpc ,
+
+
+
+
+ typename agrpc::ClientRPC < PrepareAsync, Executor >::Response &
+ response ,
+
+
+
+
+ CompletionToken &&
+ token = detail::DefaultCompletionTokenT<Executor>{}
+
+
+
+ )
+ const
+
+
+
+
+inline noexcept
+
+
+
+
+
Read from a Client.
+
Equivalent to performing rpc.read(response, token)
.
+
Since 2.7.0
+
+
+
+
+
+
+
+
+
diff --git a/docs/structagrpc_1_1detail_1_1_read_fn.js b/docs/structagrpc_1_1detail_1_1_read_fn.js
new file mode 100644
index 00000000..e131fe49
--- /dev/null
+++ b/docs/structagrpc_1_1detail_1_1_read_fn.js
@@ -0,0 +1,5 @@
+var structagrpc_1_1detail_1_1_read_fn =
+[
+ [ "operator()", "structagrpc_1_1detail_1_1_read_fn.html#af075920cd33d170393adeed3abb9c622", null ],
+ [ "operator()", "structagrpc_1_1detail_1_1_read_fn.html#aa2bbf01f6bdf35bff88f499b15be0d45", null ]
+];
\ No newline at end of file
diff --git a/docs/sync_off.png b/docs/sync_off.png
new file mode 100644
index 00000000..224ee1ee
Binary files /dev/null and b/docs/sync_off.png differ
diff --git a/docs/sync_on.png b/docs/sync_on.png
new file mode 100644
index 00000000..c704bb74
Binary files /dev/null and b/docs/sync_on.png differ
diff --git a/docs/tab_a.png b/docs/tab_a.png
new file mode 100644
index 00000000..8200d145
Binary files /dev/null and b/docs/tab_a.png differ
diff --git a/docs/tab_b.png b/docs/tab_b.png
new file mode 100644
index 00000000..65e4a7c8
Binary files /dev/null and b/docs/tab_b.png differ
diff --git a/docs/tab_h.png b/docs/tab_h.png
new file mode 100644
index 00000000..f9ddf130
Binary files /dev/null and b/docs/tab_h.png differ
diff --git a/docs/tab_s.png b/docs/tab_s.png
new file mode 100644
index 00000000..69bd9393
Binary files /dev/null and b/docs/tab_s.png differ
diff --git a/docs/tabs.css b/docs/tabs.css
new file mode 100644
index 00000000..00d1c602
--- /dev/null
+++ b/docs/tabs.css
@@ -0,0 +1 @@
+.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#666;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0 !important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}}
\ No newline at end of file