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