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