File: OrderSet.h

package info (click to toggle)
endless-sky 0.10.16-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 414,608 kB
  • sloc: cpp: 73,435; python: 893; xml: 666; sh: 271; makefile: 28
file content (46 lines) | stat: -rw-r--r-- 1,461 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* OrderSet.h
Copyright (c) 2024 by TomGoodIdea

Endless Sky is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later version.

Endless Sky is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program. If not, see <https://www.gnu.org/licenses/>.
*/

#pragma once

#include "OrderSingle.h"

#include <bitset>



// This class holds a combination of orders given to a ship.
class OrderSet : public Orders {
public:
	// Operations on the bitset
	bool Has(Types type) const noexcept;
	bool Empty() const noexcept;

	// Add a single new order to this set.
	void Add(const OrderSingle &newOrder, bool *hasMismatch = nullptr, bool *alreadyHarvesting = nullptr);
	// Remove orders that need a ship/asteroid target if the current target is invalid.
	void Validate(const Ship *ship, const System *playerSystem);
	// Update the internal variants of the "hold position" order.
	void Update(const Ship &ship);


private:
	void Set(Types type) noexcept;
	void Reset(Types type) noexcept;


private:
	std::bitset<static_cast<size_t>(Types::TYPES_COUNT)> types;
};