MCPcopy Create free account
hub / github.com/OpenLoco/OpenLoco / decode

Method decode

src/OpenLoco/src/S5/SawyerStream.cpp:90–118  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

88}
89
90std::span<const std::byte> SawyerStreamReader::decode(SawyerEncoding encoding, std::span<const std::byte> data)
91{
92 switch (encoding)
93 {
94 case SawyerEncoding::uncompressed:
95 return data;
96 case SawyerEncoding::runLengthSingle:
97 _decodeBuffer2.clear();
98 _decodeBuffer2.reserve(data.size());
99 decodeRunLengthSingle(_decodeBuffer2, data);
100 return _decodeBuffer2.getSpan();
101 case SawyerEncoding::runLengthMulti:
102 _decodeBuffer2.clear();
103 _decodeBuffer2.reserve(data.size());
104 decodeRunLengthSingle(_decodeBuffer2, data);
105
106 _decodeBuffer.clear();
107 _decodeBuffer.reserve(_decodeBuffer2.getLength());
108 decodeRunLengthMulti(_decodeBuffer, _decodeBuffer2.getSpan());
109 return _decodeBuffer.getSpan();
110 case SawyerEncoding::rotate:
111 _decodeBuffer2.clear();
112 _decodeBuffer2.reserve(data.size());
113 decodeRotate(_decodeBuffer2, data);
114 return _decodeBuffer2.getSpan();
115 default:
116 throw Exception::RuntimeError(exceptionUnknownEncoding);
117 }
118}
119
120static void fillStream(MemoryStream& buffer, std::byte value, size_t count)
121{

Callers

nothing calls this directly

Calls 5

reserveMethod · 0.80
getSpanMethod · 0.80
clearMethod · 0.45
sizeMethod · 0.45
getLengthMethod · 0.45

Tested by

no test coverage detected