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

Reply via email to