xref: /netbsd-src/external/bsd/zstd/dist/contrib/pzstd/SkippableFrame.cpp (revision 3117ece4fc4a4ca4489ba793710b60b0d26bab6c)
1*3117ece4Schristos /*
2*3117ece4Schristos  * Copyright (c) Meta Platforms, Inc. and affiliates.
3*3117ece4Schristos  * All rights reserved.
4*3117ece4Schristos  *
5*3117ece4Schristos  * This source code is licensed under both the BSD-style license (found in the
6*3117ece4Schristos  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7*3117ece4Schristos  * in the COPYING file in the root directory of this source tree).
8*3117ece4Schristos  */
9*3117ece4Schristos #include "SkippableFrame.h"
10*3117ece4Schristos #include "mem.h"
11*3117ece4Schristos #include "utils/Range.h"
12*3117ece4Schristos 
13*3117ece4Schristos #include <cstdio>
14*3117ece4Schristos 
15*3117ece4Schristos using namespace pzstd;
16*3117ece4Schristos 
17*3117ece4Schristos SkippableFrame::SkippableFrame(std::uint32_t size) : frameSize_(size) {
18*3117ece4Schristos   MEM_writeLE32(data_.data(), kSkippableFrameMagicNumber);
19*3117ece4Schristos   MEM_writeLE32(data_.data() + 4, kFrameContentsSize);
20*3117ece4Schristos   MEM_writeLE32(data_.data() + 8, frameSize_);
21*3117ece4Schristos }
22*3117ece4Schristos 
23*3117ece4Schristos /* static */ std::size_t SkippableFrame::tryRead(ByteRange bytes) {
24*3117ece4Schristos   if (bytes.size() < SkippableFrame::kSize ||
25*3117ece4Schristos       MEM_readLE32(bytes.begin()) != kSkippableFrameMagicNumber ||
26*3117ece4Schristos       MEM_readLE32(bytes.begin() + 4) != kFrameContentsSize) {
27*3117ece4Schristos     return 0;
28*3117ece4Schristos   }
29*3117ece4Schristos   return MEM_readLE32(bytes.begin() + 8);
30*3117ece4Schristos }
31