// Copyright (c) 2011 The Chromium OS 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 CROS_DISKS_DEVICE_EVENT_QUEUE_H_
#define CROS_DISKS_DEVICE_EVENT_QUEUE_H_

#include <base/macros.h>

#include "cros-disks/device_event.h"

namespace cros_disks {

struct DeviceEvent;

// An event queue for keeping track of deferred device events.
class DeviceEventQueue {
 public:
  DeviceEventQueue() = default;

  ~DeviceEventQueue() = default;

  // Removes a device event from the event queue in a FIFO manner.
  // It is a no-op if the queue is empty.
  void Remove();

  // Adds a device event to the event queue in a FIFO manner.
  //
  // Due to its use for keeping track of deferred device events, the
  // event queue does not simply accumulate events being passed to the
  // Add method. Depending on the type of an event and its correlation
  // with other events in the queue, the event may be discarded or cause
  // other events in the queue to be discarded.
  //
  // The rules are:
  // 1) Ignored and DeviceScanned events are always discarded as they
  //    do not carry any useful information to the prospective client.
  // 2) If a DeviceRemoved event is seen after a DeviceAdded event with
  //    the same device path, both events are discarded as if the device
  //    has not been added.
  // 3) If a DiskRemoved event is seen after a DiskAdded or DiskChanged
  //    event with the same device path, both events are discarded as if
  //    the device has not been added.
  // 4) A DiskChanged event is discarded if a DiskAdded event is already
  //    in the queue. This is because both events are deferred and thus
  //    the DiskChanged event, which signals some property changes in the
  //    disk, can be absorbed into the DiskAdded event.
  void Add(const DeviceEvent& event);

  // Returns a pointer to the oldest device event at the head of event
  // queue or NULL if the queue is empty. The pointer will become
  // invalid upon the next Remove call.
  const DeviceEvent* Head() const;

  const DeviceEventList& events() const { return events_; }

 private:
  // A list of events in the event queue.
  // The latest event is inserted at the beginning of the list.
  DeviceEventList events_;

  DISALLOW_COPY_AND_ASSIGN(DeviceEventQueue);
};

}  // namespace cros_disks

#endif  // CROS_DISKS_DEVICE_EVENT_QUEUE_H_
