Beispiel #1
0
 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);
        }