ActiveLib
Loading...
Searching...
No Matches
Cargo.h
1
6#ifndef ACTIVE_SERIALISE_CARGO
7#define ACTIVE_SERIALISE_CARGO
8
9#include "Active/Serialise/Inventory/Inventory.h"
10#include "Active/Utility/String.h"
11
13
17 class Cargo {
18 public:
19
20 // MARK: - Types
21
23 using Unique = std::unique_ptr<Cargo>;
25 using Shared = std::shared_ptr<Cargo>;
27 using size_type = std::string::size_type;
29 using sizeOption = std::optional<size_type>;
30
31 // MARK: - Constructors
32
36 Cargo() {}
41 Cargo(const Cargo& source) {}
45 virtual ~Cargo() = default;
46
47 // MARK: - Functions (const)
48
54 virtual bool fillInventory(Inventory& inventory) const = 0;
55
61 virtual Cargo::Unique getCargo(const Inventory::Item& item) const = 0;
62
63 // MARK: - Functions (mutating)
64
68 virtual void clear() { setDefault(); }
72 virtual void setDefault() = 0;
77 virtual bool validate() { return true; }
78 };
79
81 template<class T>
82 concept Transportable = std::is_base_of<active::serialise::Cargo, T>::value;
83
84
85}
86
87#endif //ACTIVE_SERIALISE_CARGO
Definition Cargo.h:17
std::optional< size_type > sizeOption
Optional size type (used to indicate an unspecified or non-existant position)
Definition Cargo.h:29
Cargo()
Definition Cargo.h:36
Cargo(const Cargo &source)
Definition Cargo.h:41
virtual void clear()
Definition Cargo.h:68
std::unique_ptr< Cargo > Unique
Unique pointer.
Definition Cargo.h:23
virtual bool validate()
Definition Cargo.h:77
std::shared_ptr< Cargo > Shared
Shared pointer.
Definition Cargo.h:25
virtual ~Cargo()=default
virtual bool fillInventory(Inventory &inventory) const =0
virtual void setDefault()=0
std::string::size_type size_type
Class size type.
Definition Cargo.h:27
virtual Cargo::Unique getCargo(const Inventory::Item &item) const =0
Definition Inventory.h:19
Transportable concept for classes/functions representing transportable cargo.
Definition Cargo.h:82
Definition Cargo.h:12
Definition Entry.h:20