// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "lib/callback/managed_container.h"

#include <algorithm>

#include <lib/fit/function.h>

#include "lib/callback/scoped_callback.h"

namespace callback {

ManagedContainer::ManagedContainer() : weak_ptr_factory_(this) {}

ManagedContainer::~ManagedContainer() {}

fit::closure ManagedContainer::ManageElement(std::unique_ptr<Element> element) {
  Element* ptr = element.get();
  managed_elements_.push_back(std::move(element));

  // We use a scoped callback to ManagedContainer to allow the manager to
  // be deleted.
  return MakeScoped(weak_ptr_factory_.GetWeakPtr(), [this, ptr]() {
    auto it = std::find_if(
        managed_elements_.begin(), managed_elements_.end(),
        [ptr](const std::unique_ptr<Element>& c) { return c.get() == ptr; });
    FXL_DCHECK(it != managed_elements_.end());
    managed_elements_.erase(it);
    CheckEmpty();
  });
}

void ManagedContainer::CheckEmpty() {
  if (managed_elements_.empty() && on_empty_) {
    on_empty_();
  }
}

}  // namespace callback
