// Path: src/main/java/uk/elementarysoftware/quickcsv/api/CSVParserBuilder.java
// public static class CSVFileMetadata {
//         
//     public static CSVFileMetadata RFC_4180 = new CSVFileMetadata(',', Optional.of('"'));
//     public static CSVFileMetadata TABS = new CSVFileMetadata('\t', Optional.empty());
//         
//     public final char separator;
//     public final Optional<Character> quote;
// 
//     public CSVFileMetadata(char separator, Optional<Character> quote) {
//         this.separator = separator;
//         this.quote = quote;
//     }
// }


import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import uk.elementarysoftware.quickcsv.api.CSVParserBuilder.CSVFileMetadata;

    }

    int indexOfInSourceView(int parseIdx) {
        return parseOrderToSourceOrder[parseIdx];
    }
    
    int getFieldSubsetSize() {
        return fieldSubset.getEnumConstants().length;
    }
    
    public static abstract class HeaderSource {
        
        private HeaderSource() {}
        
        abstract void onSlice(ByteSlice slice, CSVFileMetadata metadata);
        abstract List<String> getHeader();

        private static class ExplicitHeader extends HeaderSource {
            private final String[] header;

            public ExplicitHeader(String[] header) {
                this.header = header;
            }
            
            @Override
            List<String> getHeader() {
                return Arrays.asList(header);
            }
            
            @Override 

// Path: src/main/java/uk/elementarysoftware/quickcsv/api/CSVParserBuilder.java
// public static class CSVFileMetadata {
//         
//     public static CSVFileMetadata RFC_4180 = new CSVFileMetadata(',', Optional.of('"'));
//     public static CSVFileMetadata TABS = new CSVFileMetadata('\t', Optional.empty());
//         
//     public final char separator;
//     public final Optional<Character> quote;
// 
//     public CSVFileMetadata(char separator, Optional<Character> quote) {
//         this.separator = separator;
//         this.quote = quote;
//     }
// }


// Path: src/main/java/uk/elementarysoftware/quickcsv/parser/FieldSubsetView.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumMap;
import java.util.List;
import java.util.Map;
import uk.elementarysoftware.quickcsv.api.CSVParserBuilder.CSVFileMetadata;

    }

    int indexOfInSourceView(int parseIdx) {
        return parseOrderToSourceOrder[parseIdx];
    }
    
    int getFieldSubsetSize() {
        return fieldSubset.getEnumConstants().length;
    }
    
    public static abstract class HeaderSource {
        
        private HeaderSource() {}
        
        abstract void onSlice(ByteSlice slice, CSVFileMetadata metadata);
        abstract List<String> getHeader();

        private static class ExplicitHeader extends HeaderSource {
            private final String[] header;

            public ExplicitHeader(String[] header) {
                this.header = header;
            }
            
            @Override
            List<String> getHeader() {
                return Arrays.asList(header);
            }
            
            @Override 

            void onSlice(ByteSlice slice, CSVFileMetadata metadata) {}
