// Copyright 2013 The Chromium 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 MOJO_EDK_SYSTEM_AWAKABLE_LIST_H_
#define MOJO_EDK_SYSTEM_AWAKABLE_LIST_H_

#include <stdint.h>

#include <list>

#include "base/macros.h"
#include "mojo/edk/system/system_impl_export.h"
#include "mojo/public/c/system/types.h"

namespace mojo {
namespace system {

class Awakable;
struct HandleSignalsState;

// |AwakableList| tracks all the |Waiter|s that are waiting on a given
// handle/|Dispatcher|. There should be a |AwakableList| for each handle that
// can be waited on (in any way). In the simple case, the |AwakableList| is
// owned by the |Dispatcher|, whereas in more complex cases it is owned by the
// secondary object (see simple_dispatcher.* and the explanatory comment in
// core.cc). This class is thread-unsafe (all concurrent access must be
// protected by some lock).
class MOJO_SYSTEM_IMPL_EXPORT AwakableList {
 public:
  AwakableList();
  ~AwakableList();

  void AwakeForStateChange(const HandleSignalsState& state);
  void CancelAll();
  void Add(Awakable* awakable, MojoHandleSignals signals, uint32_t context);
  void Remove(Awakable* awakable);

 private:
  struct AwakeInfo {
    AwakeInfo(Awakable* awakable, MojoHandleSignals signals, uint32_t context)
        : awakable(awakable), signals(signals), context(context) {}

    Awakable* awakable;
    MojoHandleSignals signals;
    uint32_t context;
  };
  typedef std::list<AwakeInfo> AwakeInfoList;

  AwakeInfoList awakables_;

  DISALLOW_COPY_AND_ASSIGN(AwakableList);
};

}  // namespace system
}  // namespace mojo

#endif  // MOJO_EDK_SYSTEM_AWAKABLE_LIST_H_
