swift
aircraftenginelist.cpp
1 // SPDX-FileCopyrightText: Copyright (C) 2014 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #include <QString>
7 #include <QtGlobal>
8 
9 SWIFT_DEFINE_SEQUENCE_MIXINS(swift::misc::aviation, CAircraftEngine, CAircraftEngineList)
10 
11 namespace swift::misc::aviation
12 {
13  CAircraftEngineList::CAircraftEngineList(std::initializer_list<bool> enginesOnOff)
14  {
15  int no = 1; // engines 1 based
16  for (auto it = enginesOnOff.begin(); it != enginesOnOff.end(); ++it)
17  {
18  CAircraftEngine engine(no++, *it);
19  this->push_back(engine);
20  }
21  }
22 
24  : CSequence<CAircraftEngine>(other)
25  {}
26 
28  {
29  Q_ASSERT(engineNumber > 0);
30  return this->findBy(&CAircraftEngine::getNumber, engineNumber).frontOrDefault();
31  }
32 
33  bool CAircraftEngineList::isEngineOn(int engineNumber) const
34  {
35  Q_ASSERT(engineNumber > 0);
36  return this->getEngine(engineNumber).isOn();
37  }
38 
39  void CAircraftEngineList::setEngineOn(int engineNumber, bool on)
40  {
41  Q_ASSERT(engineNumber > 0);
42  for (CAircraftEngine &engine : *this)
43  {
44  if (engine.getNumber() == engineNumber)
45  {
46  engine.setOn(on);
47  break;
48  }
49  }
50  }
51 
52  void CAircraftEngineList::setEngines(const CAircraftEngine &engine, int engineNumber)
53  {
54  this->clear();
55  for (int e = 0; e < engineNumber; e++)
56  {
57  CAircraftEngine copy(engine);
58  copy.setNumber(e + 1); // 1 based
59  this->push_back(engine);
60  }
61  }
62 
63  void CAircraftEngineList::initEngines(int engineNumber, bool on)
64  {
65  this->clear();
66  for (int e = 0; e < engineNumber; e++)
67  {
68  const CAircraftEngine engine(e + 1, on);
69  this->push_back(engine);
70  }
71  }
72 
73  bool CAircraftEngineList::isAnyEngineOn() const { return this->contains(&CAircraftEngine::isOn, true); }
74 
75  QJsonObject CAircraftEngineList::toJson() const
76  {
77  QJsonObject map;
78 
79  for (const auto &e : *this)
80  {
81  const QJsonObject value = e.toJson();
82  map.insert(QString::number(e.getNumber()), value);
83  }
84  return map;
85  }
86 
87  void CAircraftEngineList::convertFromJson(const QJsonObject &json)
88  {
89  this->clear();
90  for (const auto &e : json.keys())
91  {
92  CAircraftEngine engine;
93  const int number = e.toInt();
94  CJsonScope scope(e);
95  Q_UNUSED(scope);
96  engine.convertFromJson(json.value(e).toObject());
97  engine.setNumber(number);
98  push_back(engine);
99  }
100  }
101 } // namespace swift::misc::aviation
Pseudo-RAII pattern that tracks the current JSON value being converted.
Definition: jsonexception.h:50
bool contains(const T &object) const
Return true if there is an element equal to given object. Uses the most efficient implementation avai...
Definition: range.h:109
const_reference frontOrDefault() const
Access the first element, or a default-initialized value if the sequence is empty.
Definition: sequence.h:239
CSequence findBy(Predicate p) const
Return a copy containing only those elements for which a given predicate returns true.
Definition: sequence.h:398
void push_back(const CAircraftEngine &value)
Appends an element at the end of the sequence.
Definition: sequence.h:305
void clear()
Removes all elements in the sequence.
Definition: sequence.h:288
Value object encapsulating information about aircraft's engines.
int getNumber() const
Get engine number.
void setNumber(int number)
Set engine number.
void setOn(bool on)
Set to on/off.
void setEngines(const CAircraftEngine &engine, int engineNumber)
Copy one engine multiple times (number) and set the number of engines to number.
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
CAircraftEngineList()=default
Default constructor.
CAircraftEngine getEngine(int engineNumber) const
Get engine 1..n.
bool isEngineOn(int engineNumber) const
Engine number 1..x on?
QJsonObject toJson() const
Cast to JSON object.
void initEngines(int engineNumber, bool on)
Init some engines.
void setEngineOn(int engineNumber, bool on)
Set engine on/off.
bool isAnyEngineOn() const
Is any engine on?
void convertFromJson(const QJsonObject &json)
Assign from JSON object.
Definition: mixinjson.h:153
#define SWIFT_DEFINE_SEQUENCE_MIXINS(Namespace, T, List)
Explicit template definition of mixins for a CSequence subclass.
Definition: sequence.h:63