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