#ifndef SERVICES_AUDIO_GROUP_COORDINATOR_IMPL_H_
#define SERVICES_AUDIO_GROUP_COORDINATOR_IMPL_H_
#include "base/compiler_specific.h"
#include "base/containers/contains.h"
#include "base/no_destructor.h"
#include "base/not_fatal_until.h"
#include "base/ranges/algorithm.h"
#if DCHECK_IS_ON()
#define DCHECK_INCREMENT_MUTATION_COUNT …
#define DCHECK_REMEMBER_CURRENT_MUTATION_COUNT …
#define DCHECK_MUTATION_COUNT_UNCHANGED …
#else
#define DCHECK_INCREMENT_MUTATION_COUNT …
#define DCHECK_REMEMBER_CURRENT_MUTATION_COUNT …
#define DCHECK_MUTATION_COUNT_UNCHANGED …
#endif
namespace audio {
template <typename Member>
GroupCoordinator<Member>::GroupCoordinator() { … }
template <typename Member>
GroupCoordinator<Member>::~GroupCoordinator() { … }
template <typename Member>
void GroupCoordinator<Member>::RegisterMember(
const base::UnguessableToken& group_id,
Member* member) { … }
template <typename Member>
void GroupCoordinator<Member>::UnregisterMember(
const base::UnguessableToken& group_id,
Member* member) { … }
template <typename Member>
void GroupCoordinator<Member>::AddObserver(
const base::UnguessableToken& group_id,
Observer* observer) { … }
template <typename Member>
void GroupCoordinator<Member>::RemoveObserver(
const base::UnguessableToken& group_id,
Observer* observer) { … }
template <typename Member>
void GroupCoordinator<Member>::ForEachMemberInGroup(
const base::UnguessableToken& group_id,
base::RepeatingCallback<void(Member*)> callback) const { … }
template <typename Member>
const std::vector<Member*>& GroupCoordinator<Member>::GetCurrentMembersUnsafe(
const base::UnguessableToken& group_id) const { … }
template <typename Member>
typename GroupCoordinator<Member>::GroupMap::iterator
GroupCoordinator<Member>::FindGroup(const base::UnguessableToken& group_id) { … }
template <typename Member>
void GroupCoordinator<Member>::MaybePruneGroupMapEntry(
typename GroupMap::iterator it) { … }
template <typename Member>
GroupCoordinator<Member>::Observer::~Observer() = default;
template <typename Member>
GroupCoordinator<Member>::Group::Group() = default;
template <typename Member>
GroupCoordinator<Member>::Group::~Group() = default;
template <typename Member>
GroupCoordinator<Member>::Group::Group(
GroupCoordinator<Member>::Group&& other) = default;
template <typename Member>
typename GroupCoordinator<Member>::Group& GroupCoordinator<Member>::Group::
operator=(GroupCoordinator::Group&& other) = default;
}
#if DCHECK_IS_ON()
#undef DCHECK_INCREMENT_MUTATION_COUNT
#undef DCHECK_REMEMBER_CURRENT_MUTATION_COUNT
#undef DCHECK_MUTATION_COUNT_UNCHANGED
#endif
#endif