Qt Virtual Chart Table (QVCT)
CDataCourse.cpp
Go to the documentation of this file.
1 // INDENTING (emacs/vi): -*- mode:c++; tab-width:2; c-basic-offset:2; intent-tabs-mode:nil; -*- ex: set tabstop=2 expandtab:
2 
3 /*
4  * Qt Virtual Chart Table (QVCT)
5  * Copyright (C) 2012 Cedric Dufour <http://cedric.dufour.name>
6  * Author: Cedric Dufour <http://cedric.dufour.name>
7  *
8  * The Qt Virtual Chart Table (QVCT) is free software:
9  * you can redistribute it and/or modify it under the terms of the GNU General
10  * Public License as published by the Free Software Foundation, Version 3.
11  *
12  * The Qt Virtual Chart Table (QVCT) is distributed in the hope
13  * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
14  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
15  *
16  * See the GNU General Public License for more details.
17  */
18 
19 // QT
20 #include <QDataStream>
21 
22 // QVCT
23 #include "data/CDataCourse.hpp"
24 
25 
26 //------------------------------------------------------------------------------
27 // CONSTANTS / STATIC
28 //------------------------------------------------------------------------------
29 
31 
32 
33 //------------------------------------------------------------------------------
34 // CONSTRUCTORS / DESTRUCTOR
35 //------------------------------------------------------------------------------
36 
38  : fdBearing( CDataCourse::UNDEFINED_BEARING )
39  , fdSpeed( CDataCourse::UNDEFINED_SPEED )
40  , fdSpeedVertical( CDataCourse::UNDEFINED_SPEED )
41 {}
42 
43 CDataCourse::CDataCourse( double _fdBearing, double _fdSpeed, double _fdSpeedVertical )
44 {
45  setCourse( _fdBearing, _fdSpeed, _fdSpeedVertical );
46 }
47 
48 CDataCourse::CDataCourse( const CDataCourse& _roDataCourse )
49 {
50  setCourse( _roDataCourse );
51 }
52 
54  : GroundCourse()
55  , ApparentCourse()
56 {}
57 
58 CDataCourseGA::CDataCourseGA( const CDataCourse& _roDataCourseGround, const CDataCourse& _roDataCourseApparent )
59  : GroundCourse( _roDataCourseGround )
60  , ApparentCourse( _roDataCourseApparent )
61 {}
62 
63 
64 //------------------------------------------------------------------------------
65 // METHODS
66 //------------------------------------------------------------------------------
67 
68 //
69 // SETTERS
70 //
71 
72 void CDataCourse::setCourse( double _fdBearing, double _fdSpeed, double _fdSpeedVertical )
73 {
74  if( _fdBearing != UNDEFINED_BEARING )
75  {
76  // Normalize bearing => [0;360[
77  while( _fdBearing >= 360 ) _fdBearing -= 360;
78  while( _fdBearing < 0 ) _fdBearing += 360;
79  }
80 
81  // Save course
82  fdBearing = _fdBearing;
83  fdSpeed = _fdSpeed;
84  fdSpeedVertical = _fdSpeedVertical;
85 }
86 
87 void CDataCourse::setCourse( const CDataCourse& _roDataCourse )
88 {
89  fdBearing = _roDataCourse.fdBearing;
90  fdSpeed = _roDataCourse.fdSpeed;
91  fdSpeedVertical = _roDataCourse.fdSpeedVertical;
92 }
93 
95 {
99 }
100 
101 //
102 // OTHER
103 //
104 
105 void CDataCourse::serialize( QDataStream& _rqDataStream ) const
106 {
107  _rqDataStream << fdBearing << fdSpeed << fdSpeedVertical;
108 }
109 
110 void CDataCourse::unserialize( QDataStream& _rqDataStream )
111 {
112  _rqDataStream >> fdBearing >> fdSpeed >> fdSpeedVertical;
113 }
114 
115 void CDataCourseGA::serialize( QDataStream& _rqDataStream ) const
116 {
117  GroundCourse.serialize( _rqDataStream );
118  ApparentCourse.serialize( _rqDataStream );
119 }
120 
121 void CDataCourseGA::unserialize( QDataStream& _rqDataStream )
122 {
123  GroundCourse.unserialize( _rqDataStream );
124  ApparentCourse.unserialize( _rqDataStream );
125 }
126 
127 //
128 // OPERATORS
129 //
130 bool CDataCourse::operator==( const CDataCourse& _roCourse ) const
131 {
132  return( fdBearing == _roCourse.fdBearing
133  && fdSpeed == _roCourse.fdSpeed
134  && fdSpeedVertical == _roCourse.fdSpeedVertical );
135 }
136 
137 bool CDataCourse::operator!=( const CDataCourse& _roCourse ) const
138 {
139  return( fdBearing != _roCourse.fdBearing
140  || fdSpeed != _roCourse.fdSpeed
141  || fdSpeedVertical != _roCourse.fdSpeedVertical );
142 }
143 
144 //
145 // COMPARATORS
146 //
147 
148 bool CDataCourse::compareBearingAscending( const CDataCourse& _roCourse1, const CDataCourse& _roCourse2 )
149 {
150  return( _roCourse1.fdBearing < _roCourse2.fdBearing );
151 }
152 
153 bool CDataCourse::compareBearingDescending( const CDataCourse& _roCourse1, const CDataCourse& _roCourse2 )
154 {
155  return( _roCourse1.fdBearing > _roCourse2.fdBearing );
156 }
157 
158 bool CDataCourse::compareSpeedAscending( const CDataCourse& _roCourse1, const CDataCourse& _roCourse2 )
159 {
160  return( _roCourse1.fdSpeed < _roCourse2.fdSpeed );
161 }
162 
163 bool CDataCourse::compareSpeedDescending( const CDataCourse& _roCourse1, const CDataCourse& _roCourse2 )
164 {
165  return( _roCourse1.fdSpeed > _roCourse2.fdSpeed );
166 }
167 
168 bool CDataCourse::compareSpeedVerticalAscending( const CDataCourse& _roCourse1, const CDataCourse& _roCourse2 )
169 {
170  return( _roCourse1.fdSpeedVertical < _roCourse2.fdSpeedVertical );
171 }
172 
173 bool CDataCourse::compareSpeedVerticalDescending( const CDataCourse& _roCourse1, const CDataCourse& _roCourse2 )
174 {
175  return( _roCourse1.fdSpeedVertical > _roCourse2.fdSpeedVertical );
176 }
void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.
CDataCourse ApparentCourse
Apparent course.
CDataCourse GroundCourse
Ground course.
(Geographical) Course data [bearing, horizontal/vertical speeds]
Definition: CDataCourse.hpp:34
bool operator!=(const CDataCourse &_roCourse) const
Inequality operator.
static bool compareSpeedVerticalDescending(const CDataCourse &_roCourse1, const CDataCourse &_roCourse2)
Vertical speed (descending sort) comparison operator.
static bool compareSpeedVerticalAscending(const CDataCourse &_roCourse1, const CDataCourse &_roCourse2)
Vertical speed (ascending sort) comparison operator.
static bool compareBearingDescending(const CDataCourse &_roCourse1, const CDataCourse &_roCourse2)
Bearing (descending sort) comparison operator.
double fdSpeedVertical
Vertical speed, in meters per second.
Definition: CDataCourse.hpp:62
static bool compareSpeedAscending(const CDataCourse &_roCourse1, const CDataCourse &_roCourse2)
Horizontal speed (ascending sort) comparison operator.
bool operator==(const CDataCourse &_roCourse) const
Equality operator.
double fdSpeed
Horizontal speed, in meters per second.
Definition: CDataCourse.hpp:59
static constexpr double UNDEFINED_BEARING
Specific value for an undefined bearing.
Definition: CDataCourse.hpp:42
static constexpr double UNDEFINED_SPEED
Specific value for an undefined speed.
Definition: CDataCourse.hpp:44
void setCourse(double _fdBearing, double _fdSpeed, double _fdSpeedVertical=UNDEFINED_SPEED)
Sets course values.
Definition: CDataCourse.cpp:72
void serialize(QDataStream &_rqDataStream) const
Serializes (store) this object's data to binary format.
double fdBearing
Bearing, in degrees.
Definition: CDataCourse.hpp:56
void resetCourse()
Resets all values (to an undefined course)
Definition: CDataCourse.cpp:94
static const CDataCourse UNDEFINED
Specific value for an undefined course.
Definition: CDataCourse.hpp:46
static bool compareBearingAscending(const CDataCourse &_roCourse1, const CDataCourse &_roCourse2)
Bearing (ascending sort) comparison operator.
static bool compareSpeedDescending(const CDataCourse &_roCourse1, const CDataCourse &_roCourse2)
Horizontal speed (descending sort) comparison operator.
void unserialize(QDataStream &_rqDataStream)
Unserializes (restore) this object's data from binary format.