OpenTTD Source 20260311-master-g511d3794ce
saveload_filter.h
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD 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, version 2.
4 * OpenTTD 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.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <https://www.gnu.org/licenses/old-licenses/gpl-2.0>.
6 */
7
9
10#ifndef SAVELOAD_FILTER_H
11#define SAVELOAD_FILTER_H
12
14struct LoadFilter {
16 std::shared_ptr<LoadFilter> chain;
17
22 LoadFilter(std::shared_ptr<LoadFilter> chain) : chain(std::move(chain))
23 {
24 }
25
27 virtual ~LoadFilter() = default;
28
35 virtual size_t Read(uint8_t *buf, size_t len) = 0;
36
40 virtual void Reset()
41 {
42 this->chain->Reset();
43 }
44};
45
52template <typename T> std::shared_ptr<LoadFilter> CreateLoadFilter(std::shared_ptr<LoadFilter> chain)
53{
54 return std::make_shared<T>(chain);
55}
56
58struct SaveFilter {
60 std::shared_ptr<SaveFilter> chain;
61
66 SaveFilter(std::shared_ptr<SaveFilter> chain) : chain(std::move(chain))
67 {
68 }
69
71 virtual ~SaveFilter() = default;
72
78 virtual void Write(uint8_t *buf, size_t len) = 0;
79
83 virtual void Finish()
84 {
85 if (this->chain != nullptr) this->chain->Finish();
86 }
87};
88
96template <typename T> std::shared_ptr<SaveFilter> CreateSaveFilter(std::shared_ptr<SaveFilter> chain, uint8_t compression_level)
97{
98 return std::make_shared<T>(chain, compression_level);
99}
100
101#endif /* SAVELOAD_FILTER_H */
std::shared_ptr< SaveFilter > CreateSaveFilter(std::shared_ptr< SaveFilter > chain, uint8_t compression_level)
Instantiator for a save filter.
std::shared_ptr< LoadFilter > CreateLoadFilter(std::shared_ptr< LoadFilter > chain)
Instantiator for a load filter.
virtual size_t Read(uint8_t *buf, size_t len)=0
Read a given number of bytes from the savegame.
virtual ~LoadFilter()=default
Ensure the destructor of the sub classes are called as well.
virtual void Reset()
Reset this filter to read from the beginning of the file.
std::shared_ptr< LoadFilter > chain
Chained to the (savegame) filters.
LoadFilter(std::shared_ptr< LoadFilter > chain)
Initialise this filter.
virtual void Write(uint8_t *buf, size_t len)=0
Write a given number of bytes into the savegame.
virtual void Finish()
Prepare everything to finish writing the savegame.
SaveFilter(std::shared_ptr< SaveFilter > chain)
Initialise this filter.
std::shared_ptr< SaveFilter > chain
Chained to the (savegame) filters.
virtual ~SaveFilter()=default
Ensure the destructor of the sub classes are called as well.