public TagLayoutGuess AnalyzeStructure(BinaryReader reader, uint count)
        {
            if (count == 0)
            {
                throw new ArgumentException("count is 0", "count");
            }
            var startOffset = (uint)reader.BaseStream.Position;

            if (!_tagMap.IsBoundary(startOffset))
            {
                throw new InvalidOperationException("Cannot analyze a structure which does not start on a boundary");
            }
            var endOffset = _tagMap.GetNextBoundary(startOffset);

            if (startOffset == endOffset)
            {
                throw new InvalidOperationException("Structure is empty");
            }
            var offset      = startOffset;
            var elementSize = (endOffset - startOffset) / count;
            var result      = new TagLayoutGuess(elementSize);

            for (var i = 0; i < count; i++)
            {
                AnalyzeStructure(reader, offset, elementSize, result);
                offset += elementSize;
                reader.BaseStream.Position = offset;
            }
            return(result);
        }