/// <summary>
        /// get the file reader from the file property
        /// </summary>
        /// <param name="readerProperty"></param>
        /// <returns></returns>
        public static IFileReadStrategy Instance(IFileReaderProperty readerProperty)
        {
            IFileReadStrategy readStrategy = null;

            if(readerProperty.BufferType.HasFlag(EnumReaderBufferType.MEMORY_MAPPED_VIEW_ACCESSOR))
                readStrategy = new MemorySequentialAccess(readerProperty);
            else
                throw new NotImplementedException("Unreachable code");

            return readStrategy;
        }
        public static IFileReadStrategy Instance(IFileReaderProperty readerProperty)
        {
            IFileReadStrategy readStrategy = null;

            switch (readerProperty.ReaderType)
            {
            case EnumCOFFReaderType.MEMORY_SEQ_READ:
                readStrategy = new MemorySequentialAccess(readerProperty);
                break;

            case EnumCOFFReaderType.MEMORY_ACCESSOR_READ:
                readStrategy = new MemoryRandomAccess(readerProperty);
                break;

            case EnumCOFFReaderType.BINARY_READ:
                break;

            default:
                throw new NotImplementedException("Unreachable code");
            }

            return(readStrategy);
        }