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