Add fd event support to EventTaskRunner This change allows applications to perform general I/O completion handling as part of the Run() loop, rather than just timeout completion. Change-Id: Idce97a33f7a35348ac5a7d226491f9907edc3405 Reviewed-on: https://weave-review.googlesource.com/1447 Reviewed-by: Vitaly Buka <vitalybuka@google.com>
diff --git a/examples/provider/event_deleter.h b/examples/provider/event_deleter.h new file mode 100644 index 0000000..078c326 --- /dev/null +++ b/examples/provider/event_deleter.h
@@ -0,0 +1,37 @@ +// Copyright 2015 The Weave Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBWEAVE_EXAMPLES_PROVIDER_EVENT_DELETER_H +#define LIBWEAVE_EXAMPLES_PROVIDER_EVENT_DELETER_H + +#include <memory> + +#include <third_party/include/event2/event.h> +#include <third_party/include/event2/event_struct.h> +#include <third_party/include/event2/http.h> + +namespace weave { +namespace examples { + +// Defines overloaded deletion methods for various event_ objects +// so we can use one unique_ptr definition for all of them +class EventDeleter { + public: + void operator()(evhttp_uri* http_uri) { evhttp_uri_free(http_uri); } + void operator()(evhttp_connection* conn) { evhttp_connection_free(conn); } + void operator()(evhttp_request* req) { evhttp_request_free(req); } + void operator()(event_base* base) { event_base_free(base); } + void operator()(event* ev) { + event_del(ev); + event_free(ev); + } +}; + +template <typename T> +using EventPtr = std::unique_ptr<T, EventDeleter>; + +} // namespace examples +} // namespace weave + +#endif // LIBWEAVE_EXAMPLES_PROVIDER_EVENT_DELETER_H