120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie/*
220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Copyright (C) 2015 The Android Open Source Project
320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie *
420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Licensed under the Apache License, Version 2.0 (the "License");
520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * you may not use this file except in compliance with the License.
620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * You may obtain a copy of the License at
720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie *
820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie *      http://www.apache.org/licenses/LICENSE-2.0
920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie *
1020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Unless required by applicable law or agreed to in writing, software
1120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * distributed under the License is distributed on an "AS IS" BASIS,
1220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * See the License for the specific language governing permissions and
1420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * limitations under the License.
1520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie */
1620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
1720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie#pragma once
1820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
1920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass AudioPolicyManagerInterface;
2020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass AudioPolicyPluginInterface;
2120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
2220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffienamespace android
2320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{
2420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffienamespace audio_policy
2520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{
2620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
2720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass Engine;
2820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
2920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieclass EngineInstance
3020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie{
3120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieprotected:
3220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    EngineInstance();
3320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
3420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffiepublic:
3520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    virtual ~EngineInstance();
3620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
3720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    /**
3820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * Get Audio Policy Engine instance.
3920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     *
4020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * @return pointer to Route Manager Instance object.
4120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     */
4220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    static EngineInstance *getInstance();
4320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
4420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    /**
4520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * Interface query.
4620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * The first client of an interface of the policy engine will start the singleton.
4720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     *
4820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * @tparam RequestedInterface: interface that the client is wishing to retrieve.
4920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     *
5020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * @return interface handle.
5120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     */
5220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    template <class RequestedInterface>
5320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    RequestedInterface *queryInterface() const;
5420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
5520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieprotected:
5620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    /**
5720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * Get Audio Policy Engine instance.
5820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     *
5920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     * @return Audio Policy Engine singleton.
6020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie     */
6120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    Engine *getEngine() const;
6220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
6320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffieprivate:
6420f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    /* Copy facilities are put private to disable copy. */
6520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    EngineInstance(const EngineInstance &object);
6620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie    EngineInstance &operator=(const EngineInstance &object);
6720f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie};
6820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
6920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie/**
7020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Limit template instantation to supported type interfaces.
7120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie * Compile time error will claim if invalid interface is requested.
7220f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie */
7320f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffietemplate <>
7420f06f996337c9bf79d0b112083f6427a122ebabFrançois GaffieAudioPolicyManagerInterface *EngineInstance::queryInterface() const;
7520f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
7620f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffietemplate <>
7720f06f996337c9bf79d0b112083f6427a122ebabFrançois GaffieAudioPolicyPluginInterface *EngineInstance::queryInterface() const;
7820f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
7920f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}; // namespace audio_policy
8020f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie
8120f06f996337c9bf79d0b112083f6427a122ebabFrançois Gaffie}; // namespace android
82