ubuntu-location-service  0.0.2
provider_selection_policy.h
1 /*
2  * Copyright © 2012-2013 Canonical Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it
5  * under the terms of the GNU Lesser General Public License version 3,
6  * as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authored by: Thomas Voß <thomas.voss@canonical.com>
17  */
18 #ifndef LOCATION_SERVICE_COM_UBUNTU_PROVIDER_SELECTION_POLICY_H_
19 #define LOCATION_SERVICE_COM_UBUNTU_PROVIDER_SELECTION_POLICY_H_
20 
21 #include "com/ubuntu/location/provider.h"
22 
23 #include <memory>
24 
25 namespace com
26 {
27 namespace ubuntu
28 {
29 namespace location
30 {
31 struct Criteria;
32 
34 {
35  ProviderSelection(const Provider::Ptr position = Provider::Ptr{},
36  const Provider::Ptr heading = Provider::Ptr{},
37  const Provider::Ptr velocity = Provider::Ptr{}) : position_updates_provider(position),
38  heading_updates_provider(heading),
39  velocity_updates_provider(velocity)
40  {
41  }
42 
43  Provider::FeatureFlags to_feature_flags() const
44  {
45  Provider::FeatureFlags flags;
46  flags.set(static_cast<std::size_t>(Provider::Feature::position), static_cast<bool>(position_updates_provider));
47  flags.set(static_cast<std::size_t>(Provider::Feature::heading), static_cast<bool>(heading_updates_provider));
48  flags.set(static_cast<std::size_t>(Provider::Feature::velocity), static_cast<bool>(velocity_updates_provider));
49 
50  return flags;
51  }
52 
53  Provider::Ptr position_updates_provider;
54  Provider::Ptr heading_updates_provider;
55  Provider::Ptr velocity_updates_provider;
56 };
57 
58 inline bool operator==(const ProviderSelection& lhs, const ProviderSelection& rhs)
59 {
60  return lhs.position_updates_provider == rhs.position_updates_provider &&
61  lhs.heading_updates_provider == rhs.heading_updates_provider &&
62  lhs.velocity_updates_provider == rhs.velocity_updates_provider;
63 }
64 
66 {
67 public:
68  typedef std::shared_ptr<ProviderSelectionPolicy> Ptr;
69 
70  virtual ~ProviderSelectionPolicy() = default;
71 
72  virtual ProviderSelection determine_provider_selection_from_set_for_criteria(const Criteria& criteria, const std::set<Provider::Ptr>& providers) = 0;
73 protected:
74  ProviderSelectionPolicy() = default;
75 private:
77  ProviderSelectionPolicy& operator=(const ProviderSelectionPolicy&) = delete;
78 };
79 }
80 }
81 }
82 
83 #endif // LOCATION_SERVICE_COM_UBUNTU_PROVIDER_SELECTION_POLICY_H_