// Copyright 2013 The Flutter 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 FLUTTER_FML_CONTAINER_H_
#define FLUTTER_FML_CONTAINER_H_

#include <functional>
#include <map>

namespace fml {

template <
    class Collection =
        std::unordered_map<class Key, class Value, class Hash, class Equal>>
void erase_if(
    Collection& container,
    const std::function<bool(typename Collection::iterator)>& predicate) {
  auto it = container.begin();
  while (it != container.end()) {
    if (predicate(it)) {
      it = container.erase(it);
      continue;
    }
    it++;
  }
}

}  // namespace fml

#endif  // FLUTTER_FML_CONTAINER_H_
