1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MOJO_SYSTEM_SIMPLE_DISPATCHER_H_
6#define MOJO_SYSTEM_SIMPLE_DISPATCHER_H_
7
8#include <list>
9
10#include "base/macros.h"
11#include "mojo/system/dispatcher.h"
12#include "mojo/system/system_impl_export.h"
13#include "mojo/system/waiter_list.h"
14
15namespace mojo {
16namespace system {
17
18// A base class for simple dispatchers. "Simple" means that there's a one-to-one
19// correspondence between handles and dispatchers (see the explanatory comment
20// in core.cc). This class implements the standard waiter-signalling mechanism
21// in that case.
22class MOJO_SYSTEM_IMPL_EXPORT SimpleDispatcher : public Dispatcher {
23 protected:
24  SimpleDispatcher();
25  virtual ~SimpleDispatcher();
26
27  // To be called by subclasses when the state changes (so
28  // |GetHandleSignalsStateImplNoLock()| should be checked again). Must be
29  // called under lock.
30  void HandleSignalsStateChangedNoLock();
31
32  // |Dispatcher| protected methods:
33  virtual void CancelAllWaitersNoLock() OVERRIDE;
34  virtual MojoResult AddWaiterImplNoLock(
35      Waiter* waiter,
36      MojoHandleSignals signals,
37      uint32_t context,
38      HandleSignalsState* signals_state) OVERRIDE;
39  virtual void RemoveWaiterImplNoLock(
40      Waiter* waiter,
41      HandleSignalsState* signals_state) OVERRIDE;
42
43 private:
44  // Protected by |lock()|:
45  WaiterList waiter_list_;
46
47  DISALLOW_COPY_AND_ASSIGN(SimpleDispatcher);
48};
49
50}  // namespace system
51}  // namespace mojo
52
53#endif  // MOJO_SYSTEM_SIMPLE_DISPATCHER_H_
54