2
* Copyright © 2012-2013 Canonical Ltd.
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.
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.
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/>.
16
* Authored by: Thomas Voß <thomas.voss@canonical.com>
19
#include <location/criteria.h>
21
bool location::Criteria::satisfies(const location::Criteria& rhs) const
25
if (rhs.requires.position)
26
result &= requires.position;
28
if (rhs.requires.altitude)
29
result &= requires.altitude;
31
if (rhs.requires.heading)
32
result &= requires.heading;
34
if (rhs.requires.velocity)
35
result &= requires.velocity;
37
result &= accuracy.horizontal <= rhs.accuracy.horizontal;
39
if (rhs.accuracy.vertical)
40
result &= accuracy.vertical && accuracy.vertical <= rhs.accuracy.vertical;
42
if (rhs.accuracy.heading)
43
result &= accuracy.heading && accuracy.heading <= rhs.accuracy.heading;
45
if (rhs.accuracy.velocity)
46
result &= accuracy.velocity && accuracy.velocity <= rhs.accuracy.velocity;
51
location::Criteria location::operator+(
52
const location::Criteria& lhs,
53
const location::Criteria& rhs)
57
result.requires.position |= rhs.requires.position;
58
result.requires.velocity |= rhs.requires.velocity;
59
result.requires.heading |= rhs.requires.heading;
60
result.requires.altitude |= rhs.requires.altitude;
62
if (rhs.accuracy.horizontal < result.accuracy.horizontal)
63
result.accuracy.horizontal = rhs.accuracy.horizontal;
65
if (result.accuracy.vertical)
67
if (rhs.accuracy.vertical && rhs.accuracy.vertical < result.accuracy.vertical)
69
result.accuracy.vertical = rhs.accuracy.vertical;
73
result.accuracy.vertical = rhs.accuracy.vertical;
76
if (result.accuracy.velocity)
78
if (rhs.accuracy.velocity && rhs.accuracy.velocity < result.accuracy.velocity)
80
result.accuracy.velocity = rhs.accuracy.velocity;
84
result.accuracy.velocity = rhs.accuracy.velocity;
87
if (result.accuracy.heading)
89
if (rhs.accuracy.heading && rhs.accuracy.heading < result.accuracy.heading)
91
result.accuracy.heading = rhs.accuracy.heading;
95
result.accuracy.heading = rhs.accuracy.heading;