private uint GetNumberOfEntries <T>(NumberOfEntriesType numberOfEntriesType, T numberOfEntriesName)
        {
            switch (numberOfEntriesType)
            {
            case NumberOfEntriesType.Byte: return(GetByte(numberOfEntriesName));

            case NumberOfEntriesType.UShort: return(GetUShort(numberOfEntriesName));

            case NumberOfEntriesType.UInt: return(GetUInt(numberOfEntriesName));

            default:
                Debug.Fail(string.Format("Please add support for the missing type: {0}", Enum.GetName(typeof(NumberOfEntriesType), numberOfEntriesType)));
                return(0U);
            }
        }
        /// <summary>
        /// return the length in bytes of the NumberOfEntriesType
        /// byte = 1, ushort = 2 and uint = 3
        /// </summary>
        private static uint NumberOfEntriesTypeLength(NumberOfEntriesType numberOfEntriesType)
        {
            switch (numberOfEntriesType)
            {
            case NumberOfEntriesType.Byte: return(1);

            case NumberOfEntriesType.UShort: return(2);

            case NumberOfEntriesType.UInt: return(4);

            default:
                Debug.Fail(string.Format("Please add support for the missing type: {0}", Enum.GetName(typeof(NumberOfEntriesType), numberOfEntriesType)));
                return(0);
            }
        }
        public void GetTable <T>(T tableName, T numberOfEntriesName, NumberOfEntriesType numberOfEntriesType, uint entrySize, Table <T, THeader, THeaderName, TParser> .CreateTableEntryDelegate createTableEntry, ulong bytesRemaining)
        {
            uint numberOfEntries = GetNumberOfEntries(numberOfEntriesType, numberOfEntriesName);

            GetTable(tableName, numberOfEntriesName, numberOfEntries, entrySize, createTableEntry, bytesRemaining - NumberOfEntriesTypeLength(numberOfEntriesType));
        }