public bool ContainsKey(string key) { if (this is JsonObjectCollection JOC) { return(JOC.ContainsKey(key)); } else { return(false); } }
/// <summary> /// Tries to decode an EMDF block, returns if succeeded. /// </summary> /// <remarks>Assumes the sync word was already read.</remarks> bool DecodeBlock(BitExtractor extractor) { int length = extractor.Read(16); int frameEndPos = extractor.Position + length * 8; if (frameEndPos > extractor.BackPosition) { return(false); } int version = extractor.Read(2); if (version == 3) { version += extractor.VariableBits(2); } int key = extractor.Read(3); if (key == 7) { key += extractor.VariableBits(3); } if (version != 0 || key != 0) { return(false); } int payloadID; while (extractor.Position < frameEndPos && (payloadID = extractor.Read(5)) != 0) { if (payloadID == 0x1F) { payloadID += extractor.VariableBits(5); } if (payloadID > jocPayloadID) { return(false); } bool hasSampleOffset; int sampleOffset = 0; if (hasSampleOffset = extractor.ReadBit()) { sampleOffset = extractor.Read(12) >> 1; // Skip 1 bit } if (extractor.ReadBit()) { extractor.VariableBits(11); } if (extractor.ReadBit()) { extractor.VariableBits(2); } if (extractor.ReadBit()) { extractor.Skip(8); } if (!extractor.ReadBit()) { bool frameAligned = false; if (!hasSampleOffset) { frameAligned = extractor.ReadBit(); if (frameAligned) { extractor.Skip(2); } } if (hasSampleOffset || frameAligned) { extractor.Skip(7); } } int payloadEnd = extractor.VariableBits(8) * 8 + extractor.Position; if (payloadEnd > extractor.BackPosition) { return(false); } if (payloadID == jocPayloadID) { JOC.Decode(extractor); HasObjects = true; } else if (payloadID == oamdPayloadID) { OAMD.Decode(extractor, sampleOffset); } extractor.Position = payloadEnd; } return(true); }