OK, so I am in favor of consistency with the existing C API, if possible
and only if there is not good reason to break with the way the C API is
doing it.

On Mon, Mar 19, 2018 at 9:58 AM, Walt Karas <wka...@oath.com.invalid> wrote:

> yes
>
>
> On Mon, Mar 19, 2018 at 9:54 AM, Derek Dagit <der...@oath.com.invalid>
> wrote:
> >>  Continuation(TSMutex mutexp = TSMutexCreate()) :
> >
> > Not every continuation requires a mutex. To get behavior similar to the
> > current C API we would need to pass a `nullptr` to the constructor,
> right?
> >
> > On Fri, Mar 16, 2018 at 6:39 PM, Walt Karas <wka...@oath.com.invalid>
> wrote:
> >
> >> Does this seem like a good wrapper class for continuations in the C++
> API?
> >>
> >> class Continuation
> >> {
> >> public:
> >>   Continuation(TSMutex mutexp = TSMutexCreate()) :
> >> _cont(TSContCreate(_generalEventFunc, mutexp))
> >>   {
> >>     TSContDataSet(_cont, static_cast<void *>(this));
> >>   }
> >>
> >>   TSCont
> >>   asTSCont() const
> >>   {
> >>     return _cont;
> >>   }
> >>
> >>   void
> >>   destroy()
> >>   {
> >>     if (_cont) {
> >>       TSContDestroy(_cont);
> >>       _cont = nullptr;
> >>     }
> >>   }
> >>
> >>   ~Continuation()
> >>   {
> >>     if (_cont) {
> >>       TSContDestroy(_cont);
> >>     }
> >>   }
> >>
> >>   // No copying.
> >>   Continuation(const Continuation &) = delete;
> >>   Continuation &operator=(const Continuation &) = delete;
> >>
> >>   // Moving allowed.
> >>   Continuation(Continuation &&that)
> >>   {
> >>     _cont      = that._cont;
> >>     that._cont = nullptr;
> >>   }
> >>   Continuation &
> >>   operator=(Continuation &&that)
> >>   {
> >>     if (&that != this) {
> >>       if (_cont) {
> >>         TSContDestroy(_cont);
> >>       }
> >>       _cont      = that._cont;
> >>       that._cont = nullptr;
> >>     }
> >>     return *this;
> >>   }
> >>
> >>   explicit operator bool() const { return _cont != nullptr; }
> >>
> >> private:
> >>   // Distinct continuation behavior is achieved by overriding this
> >> function in a derived continuation type.
> >>   //
> >>   virtual int _run(TSEvent event, void *edata) = 0;
> >>
> >>   // This is the event function for all continuations in C++ plugins.
> >>   //
> >>   static int _generalEventFunc(TSCont cont, TSEvent event, void *edata);
> >>
> >>   TSCont _cont;
> >> };
> >>
> >
> >
> >
> > --
> > Derek
>



-- 
Derek

Reply via email to